Windows-Specific Host Tuning
Next Generation TCP/IP Stack in Windows Vista ("Longhorn")
According to
http://www.microsoft.com/technet/community/columns/cableguy/cg0905.mspx, the new version of Windows, Vista, features a redesigned TCP/IP stack. Besides unifying IPv4/IPv6 dual-stack support, this new stack also claims much-improved performance for high-speed and asymmetric networks, as well as several auto-tuning features.
The Microsoft Windows Vista Operating System enables the TCP
Window Scaling option by default (previous Windows OSes had this option disabled). This causes problems with various middleboxes, see
WindowScalingProblems. As a consequence, the scaling factor is limited to 2 for HTTP traffic in Vista.
Another new feature of Vista is
Compound TCP, a high-performance TCP variant that uses delay information to adapt its transmission rate (in addition to loss information). To enable it on Vista, use
netsh interface tcp set global congestionprovider=ctcp
(see
CompoundTCP for more information).
Performance tuning for earlier Windows versions
The references below detail the various "whys" and "hows" to tune Windows network performance. Of particular note however is the setting of scalable TCP receive windows (see
LargeTcpWindows).
It appears that, by default, not only does Windows not support TCP 1323 scalable windows, but the required key is not even in the Windows registry. The key (Tcp1323Opts) can be added to one of two places, depending on the particular system:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP] (Windows'95)
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters] (Windows 2000/XP)
Value Name:
Tcp1323Opts
Data Type:
REG_DWORD (DWORD Value)
Value Data: 0, 1, 2 or 3
- 0 = disable RFC 1323 options
- 1 = window scale enabled only
- 2 = time stamps enabled only
- 3 = both options enabled
Inquiry at Microsoft (thanks to Larry Dunn) has revealed that the default send window is 8KB and that there is no official support for configuring a system-wide default. However, the current Winsock implementation uses the following undocumented registry key for this purpose
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\AFD\Parameters]
Value Name:
DefaultSendWindow
Data Type:
REG_DWORD (DWORD Value)
Value Data: The window size in bytes. The maximum value is unknown.
According to Microsoft, this parameter may not be supported in future Winsock releases.
Send Window
(From
this TechNet article
Assuming Window Scaling is enabled, then the following parameter can be set to between 1 and 1073741823 bytes
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\TcpWindowSize]
Value Name:
TcpWindowSize
Data Type:
REG_DWORD (DWORD Value)
Value Data: The window size in bytes. 1 to 65535 (or 1 to 1073741823 if Window scaling set).
References
--
TobyRodwell - 28 Feb 2005 (initial version)
--
SimonLeinen - 06 Apr 2005 (removed dead pointers; added new ones; descriptions)
--
AlexGall - 17 Jun 2005 (added send window information)
--
HankNussbacher - 19 Jun 2005 (added new MS webcast for 2003 Server)
--
SimonLeinen - 12 Sep 2005 (added information and pointer about new TCP/IP in Vista)
--
HankNussbacher - 22 Oct 2006 (added Cisco IOS firewall upgrade)
--
AlexGall - 31 Aug 2007 (replaced IOS issue with a link to
WindowScalingProblems, added info for scaling limitation in Vista)
--
SimonLeinen - 04 Nov 2007 (information on how to enable Compound TCP on Vista)