Slow wired upload speed vs Linux on same hardware

Dawid Oosthuizen 26 Reputation points
2020-09-09T05:18:31.053+00:00

Intel® Ethernet Controller X550-AT2, 10G network interface on ASRock Rack ROMED8-2T with AMD EPYC 7232P processor.
Windows 10 Pro for Workstations, 2004.
Latest Windows updates and Intel drivers installed as of 09/09/2020.

This machine is a dual boot, the above Windows version, and Ubuntu 20.04.
When doing a speed test, I get good performance from Ubuntu, but very poor uploads from Windows. This is on the same machine, the exact same hardware.

The WAN link is 1000Mbps down, 50Mbps up.

This is the Windows speedtest result:
23320-windows-10-speedtest.png

This is the Ubuntu speedtest result:
23325-ubuntu-2004-speedtest.png

I have tried to tweak the adapter's advanced driver settings in Windows, such as disabling LSO, etc. No luck, performance remains poor.

I've also noticed it on another PC running Windows 10 Pro, and a laptop running Windows 10 Pro for Workstations, both give the same poor upload performance. Whereas my other Ubuntu 20.04 Server machine, and also my phone connected via Wi-Fi, is getting good upload speeds.

I have even taken the Windows laptop and plugged it straight into my incoming WAN connection (bypassing router), and it still gets poor upload speeds.

Incidentally, when the speed test is running, I can see that the upload looks bursty on Windows, like it is only getting chunks of data here and there, while in Linux and on Android it looks the same as the download, the graph is drawn at a consistent high rate and with consistent high values.

Windows for business | Windows Client for IT Pros | Networking | Network connectivity and file sharing

50 answers

Sort by: Newest
  1. Gary Nebbett 6,536 Reputation points
    2020-12-24T13:31:04.887+00:00

    Hello @mensa84 ,

    Thanks for trying.

    I am coming to the opinion that there is no settable option to improve the situation - functionality seems to be missing from the Microsoft TCP/IP implementation.

    The functionality in question is RACK ("Recent ACKnowledgment", The RACK-TLP loss detection algorithm for TCP, https://datatracker.ietf.org/doc/draft-ietf-tcpm-rack/?include_text=1). The RFC for this functionality is still in draft status - I had been looking at draft 14 and I just noticed that draft 15 was published 2 days ago (2020-12-22). RACK in the Windows TCP/IP implementation is mentioned in this c't article from 2016 (the date of the first draft): https://www.heise.de/select/ct/2016/17/1471609544700372

    It would be useful to try to identify which device is responsible for the high degree of out-of-order delivery. When I trace the route to the speedtest server that you used, this is what I see:

    tracert -w 200 84.116.34.253

    Tracing route to 84.116.34.253 over a maximum of 30 hops

    1 5 ms 3 ms 3 ms 192.168.0.1
    2 * * * Request timed out.
    3 10 ms 14 ms 13 ms riehen-sw1-po-1.gw.imp.ch [157.161.254.101]
    4 24 ms 11 ms 10 ms bsl-mes-sw1-vlan-2140.gw.imp.ch [157.161.251.110]
    5 12 ms 11 ms 13 ms bsl-dsp-sw1-vlan-2100.gw.imp.ch [157.161.251.42]
    6 10 ms 10 ms 15 ms prt-imp-sw7-vlan-2302.gw.imp.ch [157.161.251.50]
    7 11 ms 14 ms 26 ms prt-hea-sw1-vlan-2303.gw.imp.ch [157.161.251.53]
    8 63 ms 48 ms 31 ms prt-cbl-sw1-vlan-2003.gw.imp.ch [157.161.251.9]
    9 11 ms 11 ms 11 ms prt-cbl-core2-ve-3020.gw.imp.ch [157.161.254.153]
    10 10 ms 11 ms 12 ms te0-0-2-1.nr11.b021978-0.bsl01.atlas.cogentco.com [149.6.34.41]
    11 11 ms 10 ms 11 ms te0-0-2-3.rcr11.bsl01.atlas.cogentco.com [154.25.4.221]
    12 13 ms 11 ms 14 ms te0-2-0-1.ccr51.zrh02.atlas.cogentco.com [130.117.2.145]
    13 13 ms 12 ms 12 ms liberty.zrh01.atlas.cogentco.com [130.117.14.230]
    14 29 ms 32 ms 30 ms ch-zrh03a-rc1-ae-9-0.aorta.net [84.116.134.141]
    15 44 ms 43 ms 30 ms de-fra02a-rc1-ae-27-0.aorta.net [84.116.132.1]
    16 28 ms 29 ms 28 ms at-vie01b-rc2-ae-3-0.aorta.net [84.116.136.117]
    17 31 ms * 28 ms at-vie01b-rc1-ae-41-0.aorta.net [84.116.130.26]
    18 29 ms 28 ms 30 ms at-vie01a-ra5-dc-ae-1-306.aorta.net [84.116.138.33]
    19 28 ms 28 ms 27 ms 84.116.34.253

    How many hops are their from your system to the first common hop that we share on the path to the speedtest server?

    Gary

    Was this answer helpful?

    1 person found this answer helpful.

  2. mensa84 6 Reputation points
    2020-12-24T13:01:43.367+00:00

    Thx, but it did not change anything :(

    Was this answer helpful?

    0 comments No comments

  3. Gary Nebbett 6,536 Reputation points
    2020-12-21T15:30:07.973+00:00

    Hello @Moosa Mahsoom ,

    That is interesting, the new graph of the upload connection looks like this:

    50041-image.png

    It is (surprisingly) similar to the RTMP graph. One odd thing is that this time, the "congestion avoidance" algorithm is Compound TCP (CTCP) rather than CUBIC. Have you been experimenting with commands like "netsh int tcp set supplemental template=internet congestionprovider=ctcp"?

    The reason for the very slow adjustment of the congestion window will need some more time to investigate, but it would be very helpful to know why the congestion provider seems to have changed...

    Gary

    Was this answer helpful?


  4. Gary Nebbett 6,536 Reputation points
    2020-12-21T13:49:04.93+00:00

    Hello @Moosa Mahsoom ,

    The behaviour of your connection appears to be more similar to that of Egoist-7680. In this case, the path is "lossy" (i.e. packets are lost en route) and the "congestion avoidance" algorithm used by Windows ("CUBIC", in this case) does not match the throughput obtainable with other congestion avoidance algorithms used by some other systems (e.g. "BBR"). There are open questions about the network "fairness" of algorithms such as "BBR"; in any event, "CUBIC" is the best algorithm currently natively available under Windows.

    Passing your connection through an additional device can only worsen the problem; it is the "end-user" device (Windows) that chooses the algorithm and makes the key decisions about windows sizes, retransmissions, etc..

    I checked many of the retransmissions in the trace and they were all appropriate (the retransmitted data was not acknowledged until at least one round-trip time had elapsed since the retransmission) - this is the big difference to the behaviour observed by mensa84-6815, where retransmissions occur after the data has been acknowledged (but before the acknowledgement has been "processed").

    Your trace data was of a "useful" network connection using a higher level protocol (Real-Time Messaging Protocol (RTMP) ) rather than a straightforward speed test. In RTMP, RTMP protocol interactions do occur and this has some impact on the perceived throughput. This is a graph of the throughput from client to server (the darker line is the data throughput, the lighter line is the receive window boundary):

    49910-image.png

    Over the lifetime of the connection, the average throughput was 180 kilobytes/second or 1.5 megabits/second; however, near the end of the connection, a throughput of 615 kilobytes/second or 5 megabits/second was sustained for a short time. Since we truncated the capture length so that not much more than the TCP headers are captured, it is difficult to say what impact higher level (RTMP) protocol interactions had on the throughput.

    Sorry, but I don't have any good ideas about what could be done to improve the situation.

    Gary

    Was this answer helpful?


  5. Moosa Mahsoom 1 Reputation point
    2020-12-20T21:12:51.853+00:00

    @Gary Nebbett if I am having the same issue (I assume I am because it does look like a very similar case to me but I'll post my dumps tomorrow to confirm), this effects workloads such as streaming to YouTube (using OBS Studio)

    I was streaming to YouTube in the morning and the bit rate completely drops. I can confirm the issue happens with all windows devices on my network.

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.