Interface queue lengths
txqueuelen
The txqueuelen
parameter of an interface in the Linux kernel. It limits the number of packets in the transmission queue in the interface's device driver. In 2.6 series and e.g., RHEL3 (2.4.21) kernel, the default is 1000. In earlier kernels, the default is 100. '100' is often too low to support line-rate transfers over Gigabit Ethernet interfaces, and in some cases, even '1000' is too low.
For Gigabit Ethernet interfaces, it is suggested to use at least a txqueuelen
of 1000. (values of up to 8000 have been used successfully to further improve performance), e.g.,
ifconfig eth0 txqueuelen 1000
If a host is low performance or has slow links, having too big txqueuelen
may disturb interactive performance.
netdev_max_backlog
The sysctl net.core.netdev_max_backlog
defines the queue sizes for received packets. In recent kernels (like 2.6.18), the default is 1000; in older ones, it is 300. If the interface receives packets (e.g., in a burst) faster than the kernel can process them, this could overflow. A value in the order of thousands should be reasonable for GE, tens of thousands for 10GE.
For example,
net/core/netdev_max_backlog=2500
References
- Yee-Ting Li has published a Web page on the <i>Effect of TxqueueLen on High Bandwidth Delay Product Network (DataTAG)</i> which illustrates the problem nicely.
- CERN's Linux gigabit tuning and LBL's Linux tuning describe receive queue tuning.
– Main.SimonLeinen - 06 Jan 2005
-- Main.PekkaSavola - 17 Nov 2006