Search Linux Wireless

Abysmally slow upload speed for iwlmvm in linux-6.11+ for forwarded traffic only

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello.

I have a Dell laptop with this WiFi card:

02:00.0 Network controller [0280]: Intel Corporation Wi-Fi 6 AX200
[8086:2723] (rev 1a)

Also, I sometimes run virtual machines on this laptop; thus, it has
the usual virbr0 bridge interface, of which the only slaves are tap
devices created by QEMU. The routing setup is a NAT created by
NetworkManager:

table ip nm-shared-virbr0 {
    chain nat_postrouting {
        type nat hook postrouting priority srcnat; policy accept;
        ip saddr 192.168.253.0/24 ip daddr != 192.168.253.0/24 masquerade
    }

    chain filter_forward {
        type filter hook forward priority filter; policy accept;
        ip daddr 192.168.253.0/24 oifname "virbr0" ct state {
established, related } accept
        ip saddr 192.168.253.0/24 iifname "virbr0" accept
        iifname "virbr0" oifname "virbr0" accept
        iifname "virbr0" reject
        oifname "virbr0" reject
    }
}

Up to and including linux-6.10.x, this WiFi card worked as it should.
When testing the performance of this card from the laptop itself
against iperf3 running on the router, everything is fine even on later
kernels (e.g., 6.12.7):

[aep@dell-laptop linux]$ iperf3 -c 192.168.10.1 -p 9999  # Upload
Connecting to host 192.168.10.1, port 9999
[  5] local 192.168.10.234 port 38596 connected to 192.168.10.1 port 9999
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  95.9 MBytes   803 Mbits/sec    0   1.40 MBytes
[  5]   1.00-2.00   sec   103 MBytes   862 Mbits/sec    0   1.28 MBytes
[  5]   2.00-3.00   sec   100 MBytes   839 Mbits/sec    0   1.79 MBytes
[  5]   3.00-4.00   sec   104 MBytes   877 Mbits/sec    0   1.30 MBytes
[  5]   4.00-5.00   sec   103 MBytes   866 Mbits/sec    0   1.05 MBytes
[  5]   5.00-6.00   sec  87.2 MBytes   732 Mbits/sec    0   1.02 MBytes
[  5]   6.00-7.00   sec   103 MBytes   865 Mbits/sec    0   1.39 MBytes
[  5]   7.00-8.00   sec   102 MBytes   856 Mbits/sec    0   1.58 MBytes
[  5]   8.00-9.00   sec   103 MBytes   866 Mbits/sec    0   1.54 MBytes
[  5]   9.00-10.00  sec   103 MBytes   862 Mbits/sec    0   1.42 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1005 MBytes   843 Mbits/sec    0             sender
[  5]   0.00-10.01  sec  1003 MBytes   841 Mbits/sec                  receiver

iperf Done.

However, when testing from virtual machines, with the host kernel
being v6.11 or later, the speed is way too low:

aep@debian-misc:~$ iperf3 -c 192.168.10.1 -p 9999  # Upload
Connecting to host 192.168.10.1, port 9999
[  5] local 192.168.252.80 port 33614 connected to 192.168.10.1 port 9999
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  32.1 MBytes   269 Mbits/sec   28   2.83 KBytes
[  5]   1.00-2.00   sec  0.00 Bytes  0.00 bits/sec   24   2.83 KBytes
[  5]   2.00-3.00   sec  0.00 Bytes  0.00 bits/sec   46   2.83 KBytes
[  5]   3.00-4.00   sec  0.00 Bytes  0.00 bits/sec   40   2.83 KBytes
[  5]   4.00-5.00   sec  1.38 MBytes  11.5 Mbits/sec   24   2.83 KBytes
[  5]   5.00-6.00   sec  0.00 Bytes  0.00 bits/sec   32   2.83 KBytes
[  5]   6.00-7.00   sec  0.00 Bytes  0.00 bits/sec   38   2.83 KBytes
[  5]   7.00-8.00   sec  0.00 Bytes  0.00 bits/sec   44   2.83 KBytes
[  5]   8.00-9.00   sec  0.00 Bytes  0.00 bits/sec   30   2.83 KBytes
[  5]   9.00-10.00  sec  0.00 Bytes  0.00 bits/sec   30   2.83 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  33.5 MBytes  28.1 Mbits/sec  336             sender
[  5]   0.00-10.01  sec  30.8 MBytes  25.8 Mbits/sec                  receiver

iperf Done.

I found that disabling TCP segmentation offload on the WiFi card helps
the upload performance inside the VM:

[aep@dell-laptop linux]$ sudo ethtool --features wlp2s0
tcp-segmentation-offload off

aep@debian-misc:~$ iperf3 -c 192.168.10.1 -p 9999  # Upload
Connecting to host 192.168.10.1, port 9999
[  5] local 192.168.252.80 port 59622 connected to 192.168.10.1 port 9999
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  92.6 MBytes   776 Mbits/sec    0   2.49 MBytes
[  5]   1.00-2.00   sec   104 MBytes   874 Mbits/sec    1   2.49 MBytes
[  5]   2.00-3.00   sec   103 MBytes   863 Mbits/sec    0   2.49 MBytes
[  5]   3.00-4.00   sec   105 MBytes   881 Mbits/sec    0   2.49 MBytes
[  5]   4.00-5.00   sec   105 MBytes   882 Mbits/sec    0   2.49 MBytes
[  5]   5.00-6.00   sec   106 MBytes   885 Mbits/sec    0   2.49 MBytes
[  5]   6.00-7.00   sec   106 MBytes   889 Mbits/sec    0   2.49 MBytes
[  5]   7.00-8.00   sec   102 MBytes   855 Mbits/sec    0   2.49 MBytes
[  5]   8.00-9.00   sec   107 MBytes   896 Mbits/sec    0   2.49 MBytes
[  5]   9.00-10.00  sec   103 MBytes   862 Mbits/sec    0   2.49 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.01 GBytes   866 Mbits/sec    1             sender
[  5]   0.00-10.01  sec  1.01 GBytes   865 Mbits/sec                  receiver

iperf Done.

I have tried bisecting between 6.10 and 6.11, but gave up, as too many
intermediate revisions either crash on the first forwarded packet, or
do not connect, or misbehave in other ways.

I am aware of https://bugzilla.kernel.org/show_bug.cgi?id=209913,
which looks similar. The difference is that the recent regression is
all about the forwarded traffic.

Could you please fix this regression?

-- 
Alexander Patrakov




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux