Tuning Windows for TCP/IP performance

Expand / Collapse
 

Tuning Windows for TCP/IP performance


THE INFORMATION IN THIS ARTICLE APPLIES TO:

  • EFT Server (All Versions)
  • DMZ Gateway (All Windows versions)
  • Secure FTP Server (All Versions)

DISCUSSION

This topic describes how to tune Windows XP, Windows 2003, and Windows 2008 R1 & R2 operating systems for TCP/IP performance. "Tuning" involves adding several registry keys. To add a key to the registry, you can either edit it directly as described below or create and execute a .reg file. When you have finished adding or editing these registry keys, you must restart the Server. Configure the following settings or variables below according to your specific tuning needs. If necessary, refer to the Globalscape Knowledge Base article Q10411 - HOWTO: Windows Registry Settings, for the procedure for creating/editing keys and creating a .reg file.

These options are for advanced users only. Incorrectly editing the registry can severely damage your system. You should always back up (export a copy of) the registry before you make any changes to it.

REGISTRY KEYS

In all versions of Windows, add the keys described below. Certain keys/values depend on the operating system installed (noted in the Value name column where different).

Subkey: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters

Value Name
DWORD 32-bit)
Value Data
(Decimal)
Description
TcpTimedWaitDelay 30 This key determines the time that must elapse before TCP/IP can release a closed connection and reuse its resources. This interval between closure and release is known as the TIME_WAIT state or twice the maximum segment lifetime (2MSL) state. During this time, reopening the connection to the client and server costs less than establishing a new connection. By reducing the value of this entry, TCP/IP can release closed connections faster and provide more resources for new connections. Adjust this parameter if the running application requires rapid release, the creation of new connections, or an adjustment because of a low throughput caused by multiple connections in the TIME_WAIT state.
MaxUserPort (minimum) 32768 This key determines the highest port number that TCP/IP can assign when an application requests an available user port from the system.
TcpMaxDataRetransmissions 5 (seconds) This key determines how many times TCP retransmits an unacknowledged data segment on an existing connection.
TcpNumConnections 16777214 Determines the maximum number of TCP connections that can be open simultaneously. If the value is 0, you cannot open a connection.

Subkey: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters

Value Name
(DWORD 32-bit)
Value Data
(Decimal)
Description
EnableDynamicBacklog 00000001 These keys, if many connection attempts are received simultaneously, increase the default number of pending connections that are supported by the operating system.

These values request a minimum of 20 and a maximum of 1000 available connections. The number of available connections is increased by 10 each time that there are fewer than the minimum number of available connections.

MinimumDynamicBacklog 00000020
MaximumDynamicBacklog 00001000
DynamicBacklogGrowthDelta 00000010
KeepAliveInterval 1 (second) This key determines how often TCP repeats keep-alive transmissions when no response is received.

Subkey: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Interface GUID}*

* {Interface GUID} is different for every system.

Value Name
(DWORD 32-bit)
Value Data
Decimal)
Description
TcpNoDelay
(Windows 2008 R1 & R2 only)
1 0 to enable Nagle's algorithm, 1 to disable, not present by default
TcpAckFrequency
(Windows XP, Windows 2003, and Windows 2008 R1 & R2)
1

TCP/IP can be the source of some significant remote method delays. You can increase TCP performance by immediately acknowledging incoming TCP segments, in all situations.

NOTE: Some documentation states that this value may be placed directly under HKLM\SYSTEM\CurrentControlSet\Services\Tcpip or HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters. After testing, it was determined that the setting only takes effect when placed under the actual {Interface GUID} key.

Your .reg file for Windows 2008 would look something like this:

Remember to reboot the server computer after making the registry changes.

On Windows 2008 (R1&R2), you must also disable autotuning:

  • Open a command prompt and execute the following command:

netsh int tcp set global autotuninglevel=disabled

The default level is "normal." The possible settings include:

  • disabled: uses a fixed value for the tcp receive window. Limits it to 64KB (limited at 65535).
  • highlyrestricted: allows the receive window to grow beyond its default value, very conservatively
  • restricted: somewhat restricted growth of the tcp receive window beyond its default value
  • normal: default value, allows the receive window to grow to accommodate most conditions
  • experimental: allows the receive window to grow to accommodate extreme scenarios (not recommended as it can degrade performance in common scenarios; only intended for research purposes. It enables RWIN values of over 16 MB)


Rate this Article:

Add Your Comments


Comment require login or registration.

Details
Last Modified:Tuesday, May 21, 2013

Last Modified By: GlobalSCAPE 5

Type: HOWTO

Rated 4 stars based on 18 votes.

Article has been viewed 184,615 times.

Options