A
Angel Ruiz Fernandez
Hello, I’m a Windows 10 user having a very very annoying issue. I'll put you in context.
I have a Windows 10 Pro desktop connected to a router with a 1000BASE-T over UTP Cat. 5e ethernet cable. My ISP provides 600mbps internet access.
A few months ago, I noted that my internet speed was slowing quite a lot, during a download that usually took most of my available bandwidth (~70MB/s), now was going less than 1MB/s. So, I made a speed test using my ISP's test. It showed around 2.5mbps.
As you would expect I cursed and sweared, initially I thought it was the ISP's fault, but I made another test on a laptop over 5GHz WiFi, that showed 400mbps. I thought "How is this possible over 1000BASE-T in my PC?". So, I rechecked my connection, Windows reported a 1000gbps link, I changed cables, even trying a Cat. 7 FTP, trying different NICs and adapters, but no change. I finally rebooted, and then I got 150mbps in the same test. So, I thought, "Is it fixed? Is not great but I got things to do", but with Windows 10, nothing is fixed
Note that I usually just put the computer to sleep, not shutting it down completely. So, the next day the test was 60mbps, and the next day again below 2mbps. I can't live like this, I was breaking my head trying different things, searching forums, and now I'm pretty sure this is a Windows issue.
I finally found that changing a setting via cmd, made a difference. This was the "Receive Window Auto-Tuning Level" feature. It was set using the netsh command. Firstly, I displayed its original value, "normal", I changed it to "disabled" and rebooted. Nothing changed as any other thing I tried. Then I changed it back to "normal", and then I rebooted again and then the test reported 620mbps! Is it fixed now? No. The next day it was going down again, 400mbps, okay that doesn’t have to be related, right? The next day, 150mbps, okay this is definitely going down again. Next day 60mbps... you get the point.
I investigated this issue furthermore, discovering what Receive Window Auto-Tuning Level is, found this: https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/description-tcp-features. The feature refers to the automatic setting of the TCP Receive window size.
I understand that this is the size of the receive buffer of the Windows TCP/IP stack. I understand that the size of a buffer can significantly affect the transfer speed. The window size is limited to WORD, so 65535 bytes in size. There is a scaling factor to enlarge the maximum to 1GB, that left-shifts the window size to the true buffer size. So total_buffer = window_size * 2^scaling_factor, from the article mentioned above.
And from https://docs.microsoft.com/en-us/windows-server/networking/technologies/network-subsystem/net-sub-performance-tuning-nics, the optimal buffer size between 100mbps and 10gbps is 64KB.
The obvious solution would be to directly change window size to 64KB right? But apparently that can’t be done, I don’t know how such a vital setting can’t be directly changed via Control Panel or Configuration. Apparently there also isn't a way to determine the current Window size and scaling factor. I do know that the default Window size in Windows 10, which is 17520 bytes, far from the 65535 mentioned above.
The options for "autotuninglevel" are:
disabled: Fix the receive window at its default value.
highlyrestricted: Allow the receive window to grow beyond its default value, but do so very conservatively.
restricted: Allow the receive window to grow beyond its default value, but limit such growth in some scenarios.
normal: Allow the receive window to grow to accommodate almost all scenarios.
experimental: Allow the receive window to grow to accommodate extreme scenarios. WARNING: This can dramatically degrade performance in common scenarios and should only be used for research purposes.
I also tried creating a DWORD registry value called TcpWindowSize (as pointed in the first link) in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters, to the desired value, 65535 or 0xffff in hex. After rebooting, as always, nothing changed. This registry value is supposed to set the Receive Window size.
Finally, it was time to try other autotuninglevel settings, I tried “experimental”, and that worked actually! for a couple of weeks. Now is the same yet again.
Last thing I tried is to set Tcp1323Opts, to 3, to “force window scaling and timestamps” as described in https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/description-tcp-features#:~:text=The%20window%20scale%20option%20is,S%20is%20the%20scale%20value. But no change, as always.
So, I came to a point that when the speed lowers significantly, it was usually fixed with a reboot, but I’m still not happy with this crappy incomplete solution. This is the most annoying of all Windows problems I encountered so far (quite a lot of problems actually). This apparent small problems and random issues is the kind of reason of why people are switching to Linux, but unfortunately, I can’t because I’m dependent on Windows-only software. If I wasn’t, I would be on Linux since Windows 8.
Thanks for whoever reads this whole thing, and I implore those above to make a change, fix windows, make it consistent, eliminate bloatware and stuff from the Windows 7 era. I’m talking about completely rewriting the OS, just like they did with NT 3.1, when Microsoft threw the DOS kernel away, and built a modern, much more stable kernel from scratch. And from there built all the other OS components consistently with each other, with very clean and debugged code. That is what I think would be best for windows right now, throwing all the pre-Windows 8 inherited stuff, and remaking the OS and all its components from the ground up, so they are consistent and clean. I hope this makes a change, and luckily, make Windows better.
If you have any ideas for my specific issue, please post here.
- Attentively, a user forced to hate Windows because its issues, but feels sad about having to. I really want Windows to get better.
Continue reading...
I have a Windows 10 Pro desktop connected to a router with a 1000BASE-T over UTP Cat. 5e ethernet cable. My ISP provides 600mbps internet access.
A few months ago, I noted that my internet speed was slowing quite a lot, during a download that usually took most of my available bandwidth (~70MB/s), now was going less than 1MB/s. So, I made a speed test using my ISP's test. It showed around 2.5mbps.
As you would expect I cursed and sweared, initially I thought it was the ISP's fault, but I made another test on a laptop over 5GHz WiFi, that showed 400mbps. I thought "How is this possible over 1000BASE-T in my PC?". So, I rechecked my connection, Windows reported a 1000gbps link, I changed cables, even trying a Cat. 7 FTP, trying different NICs and adapters, but no change. I finally rebooted, and then I got 150mbps in the same test. So, I thought, "Is it fixed? Is not great but I got things to do", but with Windows 10, nothing is fixed
Note that I usually just put the computer to sleep, not shutting it down completely. So, the next day the test was 60mbps, and the next day again below 2mbps. I can't live like this, I was breaking my head trying different things, searching forums, and now I'm pretty sure this is a Windows issue.
I finally found that changing a setting via cmd, made a difference. This was the "Receive Window Auto-Tuning Level" feature. It was set using the netsh command. Firstly, I displayed its original value, "normal", I changed it to "disabled" and rebooted. Nothing changed as any other thing I tried. Then I changed it back to "normal", and then I rebooted again and then the test reported 620mbps! Is it fixed now? No. The next day it was going down again, 400mbps, okay that doesn’t have to be related, right? The next day, 150mbps, okay this is definitely going down again. Next day 60mbps... you get the point.
I investigated this issue furthermore, discovering what Receive Window Auto-Tuning Level is, found this: https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/description-tcp-features. The feature refers to the automatic setting of the TCP Receive window size.
I understand that this is the size of the receive buffer of the Windows TCP/IP stack. I understand that the size of a buffer can significantly affect the transfer speed. The window size is limited to WORD, so 65535 bytes in size. There is a scaling factor to enlarge the maximum to 1GB, that left-shifts the window size to the true buffer size. So total_buffer = window_size * 2^scaling_factor, from the article mentioned above.
And from https://docs.microsoft.com/en-us/windows-server/networking/technologies/network-subsystem/net-sub-performance-tuning-nics, the optimal buffer size between 100mbps and 10gbps is 64KB.
The obvious solution would be to directly change window size to 64KB right? But apparently that can’t be done, I don’t know how such a vital setting can’t be directly changed via Control Panel or Configuration. Apparently there also isn't a way to determine the current Window size and scaling factor. I do know that the default Window size in Windows 10, which is 17520 bytes, far from the 65535 mentioned above.
The options for "autotuninglevel" are:
disabled: Fix the receive window at its default value.
highlyrestricted: Allow the receive window to grow beyond its default value, but do so very conservatively.
restricted: Allow the receive window to grow beyond its default value, but limit such growth in some scenarios.
normal: Allow the receive window to grow to accommodate almost all scenarios.
experimental: Allow the receive window to grow to accommodate extreme scenarios. WARNING: This can dramatically degrade performance in common scenarios and should only be used for research purposes.
I also tried creating a DWORD registry value called TcpWindowSize (as pointed in the first link) in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters, to the desired value, 65535 or 0xffff in hex. After rebooting, as always, nothing changed. This registry value is supposed to set the Receive Window size.
Finally, it was time to try other autotuninglevel settings, I tried “experimental”, and that worked actually! for a couple of weeks. Now is the same yet again.
Last thing I tried is to set Tcp1323Opts, to 3, to “force window scaling and timestamps” as described in https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/description-tcp-features#:~:text=The%20window%20scale%20option%20is,S%20is%20the%20scale%20value. But no change, as always.
So, I came to a point that when the speed lowers significantly, it was usually fixed with a reboot, but I’m still not happy with this crappy incomplete solution. This is the most annoying of all Windows problems I encountered so far (quite a lot of problems actually). This apparent small problems and random issues is the kind of reason of why people are switching to Linux, but unfortunately, I can’t because I’m dependent on Windows-only software. If I wasn’t, I would be on Linux since Windows 8.
Thanks for whoever reads this whole thing, and I implore those above to make a change, fix windows, make it consistent, eliminate bloatware and stuff from the Windows 7 era. I’m talking about completely rewriting the OS, just like they did with NT 3.1, when Microsoft threw the DOS kernel away, and built a modern, much more stable kernel from scratch. And from there built all the other OS components consistently with each other, with very clean and debugged code. That is what I think would be best for windows right now, throwing all the pre-Windows 8 inherited stuff, and remaking the OS and all its components from the ground up, so they are consistent and clean. I hope this makes a change, and luckily, make Windows better.
If you have any ideas for my specific issue, please post here.
- Attentively, a user forced to hate Windows because its issues, but feels sad about having to. I really want Windows to get better.
Continue reading...