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
for more information).
Performance tuning for earlier Windows versions
Enabling TCP Window Scaling
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:
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
This can also be adjusted using DrTCP
GUI tool (see link below)
Send Window (buffer)
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
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.
This value needs to be manually adjusted (e.g., DrTCP
can't do it), or the application needs to set it (e.g., iperf
with '-l' option).
It may be difficult to detect this as a bottleneck because the host will advertise large windows but will only have about 8.5KB of data in flight.
(From this TechNet article
Assuming Window Scaling is enabled, then the following parameter can be set to between 1 and 1073741823 bytes
Value Data: The window size in bytes. 1 to 65535 (or 1 to 1073741823 if Window scaling set).
can also be used to adjust this parameter.
Windows XP SP3 simultaneous connection limit
Windows XP SP3 limits the number of simultaneous TCP connections to (by default) to 10.
How exactly it's doing this is not clear, but this may come up with some kind of applications.
A Tcpip.sys patcher tool
has been developed to adjust this limit.
- 28 Feb 2005 (initial version)
- 06 Apr 2005 (removed dead pointers; added new ones; descriptions)
- 17 Jun 2005 (added send window information)
- 19 Jun 2005 (added new MS webcast for 2003 Server)
- 12 Sep 2005 (added information and pointer about new TCP/IP in Vista)
- 22 Oct 2006 (added Cisco IOS firewall upgrade)
- 31 Aug 2007 (replaced IOS issue with a link to WindowScalingProblems
, added info for scaling limitation in Vista)
- 04 Nov 2007 (information on how to enable Compound TCP on Vista)
- 05 Jun 2008 major reorganization to improve the clarity wrt send buffer adjustment, add a link to DrTCP
; add XP SP3 connection limiting discussion