Which kernel parameters should be adjusted to fix RX overruns?

I have a Centos 6 server that handles a lot of traffic. I see RX overruns increasing all the time:

RX packets:11191345002 errors:0 dropped:0 overruns:35592596 frame:0
TX packets:15262461573 errors:0 dropped:0 overruns:0 carrier:0
RX bytes:1871320014951 (1.7 TiB)  TX bytes:12673638434114 (11.5 TiB) 

According to http://www.tldp.org/LDP/nag2/x-087-2-iface.ifconfig.html

Receiver overruns usually occur when packets come in faster than the kernel can service the last interrupt.

Which kernel parameters should be adjusted to fix this issue?


I'd suggest using an appropriate tuned-adm profile for your I/O configuration. For this setup, it sounds like yum install tuned-utils and tuned-adm profile enterprise storage would be helpful.

On the kernel side, you can set send/receive buffers:

net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

I'd try those first...

If you still see issues, you can check the NIC ring buffer with ethtool -g

Ring parameters for eth0:
Pre-set maximums:
RX:     4096
RX Mini:    0
RX Jumbo:   0
TX:     4096
Current hardware settings:
RX:     256
RX Mini:    0
RX Jumbo:   0
TX:     256

So you could modify the rx from 256 to 1024 with ethtool -G eth0 rx 1024.