[SOLVED] Slow wifi speeds on 11th-gen framework on Fedora36

[Framework 11th Gen, Fedora 36, NetworkManager/nmtui]

I’ve noticed my framework has slow wifi speeds compared to other linux devices on my network. See the iperf3 results below.

I’ve looked through a few threads, and messing around with the config for NetworkManager (e.g. with powersave) hasn’t produced any meaningful results.


$ cat /etc/os-release

NAME="Fedora Linux"
VERSION="36 (Workstation Edition)"
ID=fedora
VERSION_ID=36
VERSION_CODENAME=""
PLATFORM_ID="platform:f36"
PRETTY_NAME="Fedora Linux 36 (Workstation Edition)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:36"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f36/system-administrators-guide/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=36
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=36
PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
SUPPORT_END=2023-05-16
VARIANT="Workstation Edition"
VARIANT_ID=workstation
$ ip a

2: wlp170s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether f4:7b:09:9c:40:b4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.226/16 brd 192.168.255.255 scope global dynamic noprefixroute wlp170s0
       valid_lft 43054sec preferred_lft 43054sec
    inet6 fdf3:52bb:7210:4465:b8e5:b022:1caa:cc2f/64 scope global dynamic noprefixroute 
       valid_lft 1671sec preferred_lft 1671sec
    inet6 fe80::90a:f86a:4e13:36a4/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
$ cat /etc/resolv.conf

nameserver 127.0.0.53
options edns0 trust-ad
search zah.arpa

...
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.02  sec  26.2 MBytes  21.9 Mbits/sec                  receiver
...

For reference, here are the results for a Dell XPS 13", running Fedora 36 as well:

...
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.01  sec   207 MBytes   173 Mbits/sec                  receiver
...

Try checking the antennas, I remember someone on reddit got far higher speeds by replacing them. Yours may be clipped somewhere.

I took the framework apart and reseated the antenna module, but that didn’t change anything. I just ordered a new antenna module so I’ll update once I replace it.

I replaced the antenna and got similar speeds. When I booted to a live Ubuntu usb, I got about ~200 Mbits/sec in perf3.

So this is some issue related to my Fedora36/37 configs.

Editing /etc/modprobe.d/iwl.conf fixed it:

options iwlwifi 11n_disable=8 swcrypto=0 power_save=0 bt_coex_active=0
options iwlmvm power_scheme=1
options iwlwifi d0i3_disable=1
options iwlwifi uapsd_disable=1
options iwlwifi lar_disable=1

I think it was 11n_disable=8 in particular (it was 1 before).

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-6.00   sec   175 MBytes   245 Mbits/sec                  receiver

Yep, depending on a number of factors, that will often do it as will disabling it all together. Glad you got this resolved.

We have a fun little script for getting a read on your network environment should you need help again. Passive, just provides helpful details in one spot.

interface=$(nmcli -t -f active,device d wifi list | grep '^yes' | cut -d':' -f2)
echo -e "\n        \033[1;33mInterface:\033[0m $interface"
signal_strength=$(iw dev $interface link | awk '/signal/ {print $2}')
echo -e "        \033[1;33mSignal strength:\033[0m $signal_strength"
signal_quality=$(nmcli d wifi list ifname $interface | grep '*' | awk '{print $8}')
echo -e "        \033[1;33mSignal quality:\033[0m $signal_quality"
signal_bars=$(nmcli -t -f active,bars d wifi list | grep '^yes' | awk -F: '{print $2}')
echo -e "        \033[1;33mSignal bars:\033[0m $signal_bars"
speed=$(nmcli -t -f IN-USE,RATE dev wifi list | grep '*' | awk -F: '{print $2}')
echo -e "        \033[1;33mWi-Fi Speed:\033[0m $speed"
channel=$(nmcli -t -f IN-USE,CHAN dev wifi list | grep '*' | awk -F: '{print $2}')
echo -e "        \033[1;33mWi-Fi Channel:\033[0m $channel"
noise=$(awk 'NR==3 {print "Link: " $3 " Level: " $4 " Noise: " $5}' /proc/net/wireless)
echo -e "        \033[1;33mWi-Fi Noise, Link and Quality Level:\033[0m $noise";
1 Like