TCP Tuning
Optimizing HTTP Server Performance 4-5
You will find some other possibilities to tune TCP in /proc/sys/net/ipv4/:
tcp_timestamps
tcp_windowscaling
��tcp_sack
There is a brief description of TCP parameters in
/Documentation/networking/ip-sysctl.txt.
Tuning at Compile Time
All the above TCP parameter values are set default by a header file in the Linux
kernel source directory /LINUX-SOURCE-DIR/include/linux/skbuff.h
These values are default. This is run time configurable.
# ifdef CONFIG_SKB_LARGE
#define SK_WMEM_MAX 65535
#define SK_RMEM_MAX 65535
# else
#define SK_WMEM_MAX 32767
#define SK_RMEM_MAX 32767
#endif
You can change the MAX-WINDOW value in the Linux kernel source directory
/LINUX-SOURCE-DIR/include/net/tcp.h.
#define MAX_WINDOW 32767
#define MIN_WINDOW 2048
The MIN_WINDOW definition limits you to using only 15bits of the window field in
the TCP packet header.
For example, if you use a 40kB window, set the rmem_default to 40kB. The stack
will recognize that the value is less than 64 kB, and will not negotiate a winshift. But
due to the second check, you will get only 32 kB. So, you need to set the
rmem_default value at greater than 64 kB to force a winshift=1. This lets you
express the required 40 kB in only 15 bits.
Note: Never assign values greater than 32767 to windows,
without using window scaling.