Use hidden Windows tweaks to speed up your Internet and network connections
Windows Vista and 7 include valuable features carefully designed to optimize your Internet and network speeds. Do these work for you, though? It's hard to say, because they're so deeply buried that there's no obvious way to see how they're set, or turn them on or off -- and so many people don't realize the options even exist.
If you're looking at optimizing your network performance, then, you should probably start by seeing which of these technologies is enabled on your PC -- and this applies even if you think you know already, as there's no telling when a Windows tweaking tool or other package might have decided to "optimize" your connection without telling you exactly what it's doing.
Click "Start," type CMD, right-click the cmd.exe link and select "Run as administrator" to launch an elevated command prompt, then type:
netsh int tcp show global
-- and press "Enter" to view your system's current settings.
Then print this out, take a screen grab, or otherwise note the settings -- you're probably going to change them, and it'll be useful to have a record of the original values just in case you want to undo your tweaks later.
Chimney Offload State
One of the first options listed here is "Chimney Offload State." It sounds a little cryptic, but the idea is a straightforward one: to transfer various network connection processing tasks from your PC's CPU to the network adapter, thus freeing up valuable processor time for other things.
This is generally a very good thing, then, and in theory at least Windows should turn this feature on whenever it detects that your hardware can handle it. So if the NETSH report says Chimney Offload State is "enabled" (or "automatic") on your PC then everything is working as it should, and you can move on to the next setting.
You can't rely on Windows activating this setting, though, so if Chimney Offload State is marked as "disabled" then you might want to try turning it on manually. Just type:
netsh int tcp set global chimney=enabled
-- and press "Enter," then reboot to try the new setting. If it's better, great; if you have problems, open another elevated command prompt and enter:
netsh int tcp set global chimney=disabled
-- to turn the technology off again.
Direct Cache Access
Windows 7 included a new technology called Direct Cache Access (DCA), which reduces system overheads by allowing a network controller to transfer data directly into your CPU's cache. That sounds good, but again there are compatibility issues: your controller, chipset and processor must all support DCA for it to work, which is probably why it's turned off by default. If NETSH reports that Direct Cache Access is disabled on your PC, though, you can try turning it on yourself. Enter:
netsh int tcp set global dca=enabled
-- and reboot to turn the feature on. Re-enter the command, replacing "=enabled" with "=disabled" if there are problems and you need to turn it off.
Windows 7 also supports NetDMA, a technology that allows network adapters to transfer data directly to your application, again without needing your CPU to assist. This should be turned on, but if it's marked as "disabled" on your PC then a quick NETSH command will fix this. Enter:
netsh int tcp set global netdma=enabled
-- and reboot to turn the technology on. Use the same command, replacing "=enabled" with "=disabled" if you have any issues with NetDMA and want to turn it off again.
Receive Window Auto-Tuning Level
Network tuning used to mean manually configuring settings like your TCP Receive Window (RWIN), which defines the amount of data your PC can receive without sending an acknowledgement. And this was tricky, as no one setting would cover all situations. Fortunately, Windows Vista and 7 both support auto-tuning, where the system automatically changes RWIN to suit the current network conditions, and this can significantly improve performance.
Others have reported that auto-tuning can actually reduce network speeds in some situations, though, so you may want to try all its possible settings. If NETSH reports "Autotuninglevel" as anything other than "Normal", then, and you haven't changed the setting yourself, enter the command:
netsh int tcp set global autotuninglevel=enabled
-- and reboot to restore its default value.
If you find this setting slows you down or causes other issues, then many guides simply recommend that you turn auto-tuning off entirely, but there are other options that may deliver better results. Entering:
netsh int tcp set global autotuninglevel=restricted
-- will still allow some variation in your receive window, while reducing the chance of problems. And the command:
netsh int tcp set global autotuninglevel=highlyrestricted
-- will vary the receive window even more conservatively, though still enough to perhaps improve overall network performance.
Still no good? Then entering:
netsh int tcp set global autotuninglevel=disabled
-- will finally turn the technology off entirely.
Add-On Congestion Control Provider
A regular network connection will send data in small blocks initially, increasing these only gradually to help avoid network congestion. Compound TCP takes a different approach, ramping up your TCP window size much more aggressively, and so enabling this may improve performance.
If NETSH currently reports that your "Add-On Congestion Control Provider" is "none," then, try entering the command:
netsh int tcp set global congestionprovider=ctcp
-- and rebooting to enable Compound TCP.
If performance is worse (or you're currently using CTCP, and want to see how your system runs without it), enter:
netsh int tcp set global congestionprovider=none
-- to turn it off entirely.
Explicit Congestion Notification (ECN) provides a way for routers to signal network congestion without dropping packets. Whether it will improve performance or not depends on many different factors, including whether your router supports it. You're not sure? Microsoft's Internet Connectivity Evaluation Tool will tell you more (and although it claims to support only Windows XP or Vista, we found it also delivered useful results on a Windows 7 system).
If NETSH reports your ECN Capability as "disabled" or "default" then enter:
netsh int tcp set global ecncapability=enabled
-- and reboot to turn it on.
If your router doesn't support ECN, though, or your connection has no significant packet loss, then you probably need to leave ECN turned off. So if it's currently on, and you're not sure why, enter:
netsh int tcp set global ecncapability=disabled
-- and reboot to disable ECN, and see how that affects your performance.
There are plenty of options to explore here, then, but be careful. Make a note of your original settings before you change anything, for instance, in case you need to restore them later.
Only change one setting at a time.
And try to find some objective benchmarks, like an online internet speed test, or the time it takes to transfer a set of files across your network, to measure the success (or otherwise) of any tweak. These should represent your typical internet or network use, as much as possible (so don't measure FTP download performance if you never grab files this way in real life). Repeat these tests a few times, note the average and the range, and you'll be in a good position to figure out which Windows network settings deliver the best results.