3

I have a DigitalOcean Droplet that shares a gigabit connection and my college dorm fortunately also has gigabit connection. I noticed data transfers between the two were quite slow so I ran iperf3 with the Droplet as the server and my computer as the client. The test showed abysmal speeds. When I ran the same test with UDP or enough parallel streams(80), I reached the full gigabit speed.

I ran iperf3 on another Windows machine and got the same results. After troubleshooting some more, I discovered using Ubuntu instead of Windows reached gigabit speeds.

I have an EC2 instance that is located a few states closer to me than the Droplet and when I set that as the server and my Windows computer as the client, I reached around 30 megabits and again with UDP or enough parallel streams, I was also able to get gigabit.

With this information, I tried running iperf with a larger window size and fiddling with some Windows network setting themselves but nothing seems to have helped. I found an article that is almost exactly similar to my situation but with no solution available.

I would really appreciate any help or advice to help me get this working. Thank you.

EDIT: I contacted the author of the article and he responded that I would need a WAN optimizer. Here's a pastebin of the email he sent me. Can anyone confirm this or suggest a simpler solution? While I like to think I'm tech savy, I'm only a college freshman and almost everything in that email went over my head.

EDIT2: http://www.dslreports.com/speedtest/41142166

13
  • What is your RTT (Round-Trip Time, e.g. "ping time") from your dorm to your Droplet? What was the largest window size you tried? IPerf by default "uploads" data from the client to the server. Was that the direction you wanted to concentrate on first? Run dslreports.com/speedtest and edit your question to include a link to your results page. I'd like to see your bufferbloat score and upload speed.
    – Spiff
    Commented Oct 30, 2018 at 23:50
  • Another interesting thing to try would be to enable Windows 10's experimental support for the CUBIC TCP congestion control algorithm. I believe both Linux and macOS currently default to CUBIC, whereas Windows defaults to something called "Compound TCP (CTCP)". It's possible that something about the network path between your dorm and your Droplet confounds CTCP but doesn't faze CUBIC. Here are instructions for enabling CUBIC in Windows 10: blogs.technet.microsoft.com/networking/2017/07/13/…
    – Spiff
    Commented Oct 30, 2018 at 23:58
  • How does a speed test, like speedtest.net, compare in the two OS's?
    – Xen2050
    Commented Oct 31, 2018 at 15:26
  • My ping time to my Droplet from my server is less than a ms. I've tried 64KB and 1M but it seems to have made no difference. My main concentration is the default behavior of uploading from my computer to the Droplet. I've edited my post above to include the report. I also tried enabling CUBIC but again I don't see a difference in speeds. To confirm, this is the command "netsh int tcp set supplemental template=internet congestionprovider=cubic"? My speed tests on both reach up to gigabit speeds. My Windows machine can get gigabit in P2P and other applications.
    – kimsbrian
    Commented Oct 31, 2018 at 15:47
  • FYI, should add a @kimsbrian to let a user know you're replying to them
    – Xen2050
    Commented Oct 31, 2018 at 16:01

2 Answers 2

0

For Window tcp optimization, you may give a try on an optimizer like the one below:

https://www.speedguide.net/downloads.php

For Linux tcp optimization, here is a close one having the similar goal of boosting network throughput

https://www.cascaderangenetworks.com/

We have used both on different systems and they are pretty simple to install.

0

I sounds like your ISP does some bandwidth limiting which makes Windows unable to cope with the limit without huge hit in the performance. My experience has been that if you used Linux and configured it to use CDG TCP congestion algorithm it will get pretty good throughput with as low latency as possible. This works nicely because Linux uses queue management algorithm called fq-codel by default if you're running recent enough Linux system.

However, Windows doesn't support any kind of queue management algoritm from all I can tell and you can choose only from a couple of TCP congestion algorithms. I would recommend trying NewReno or BBR2 algorithms for Windows but neither of those are truly good solutions without proper queue management. You can try using Cubic congestion control algorithm to see if it improves your throughput. However, be warned that Cubic optimizes for raw throughput and totally ignores bufferbloat which may result in poor experience for any interactive internet use even though it gets you maximum throughput (e.g. file downloads complete in minimal time but anybody using the same connection to surf the net, play games or seek youtube videos will suffer a lot of extra latency).

Most people seem to think that only acceptable solution is to use a Linux box as a filter between Windows and uplink Internet access to workaround the problems in Windows. Most commonly recommended device for this is Ubiquiti EdgeRouter X which is fine product if your uplink is 300 Mbps or less because the CPU inside the EdgeRouter X cannot handle faster traffic than that. Some routers (if your uplink connection goes to WLAN access point you can control) already support active queue management (AQM) or smart queue management (SQM) which may be enough to force Windows to behave. The idea with AQM or SQM is to set the queue throughput a bit less than your physical connection to reduce latency a lot. Typically configuring the limit around 95% the speed that Cubic can throughput without any limits is okay as long as the router has enough CPU power to process all the TPC/IP packets fast enough.

The sad state seems to be that Microsoft is not interested to add the missing queue management to their system so Windows alone cannot handle the situation correctly.

If you cannot afford to get one extra network device to fix Windows, a poor man's solution would be to adjust network adapter settings to set link speed to 100 Mbps duplex which limits the Windows max speed to 100 Mbps but it should get at least 90 Mbps throughput in all cases because it no longer hits the ISP level limits.

Obviously, forcing your local link to smaller bandwidth than your network connection actually supports is far from perfect but it may be least bad option if you have to optimize the internet experience for a single Windows machine.

If somebody can point an error in the above and tell me how to enable active queue management (something similar to fq-codel, cake or pie in Linux) in Windows, please, add a comment below. I'd be interested to get our Windows gaming machine to behave in otherwise all-linux network where all linux devices have zero issues using FTTH connection.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .