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.