调整 ring buffer & interrupts affinity 的重要性

最近线上出现了不少由于 ring buffer 设置过小而导致的丢包问题问题,这个值在这之前我们一直使用的是出场的默认值,因此跟动辄 2048 的 max 相比,200 或者 500 确实小了点。
比如看看某台 web server 的监控

看了下 ring buffer 以及 interrputs 的分布
# ethtool  -S em2 | grep dis
     tx_discards: 0
     rx_discards: 77491

# ethtool  -g em2
Ring parameters for em2:
Pre-set maximums:
RX:   2047
RX Mini:  0
RX Jumbo: 0
TX:   511
Current hardware settings:
RX:   511
RX Mini:  0
RX Jumbo: 0
TX:   511

默认的太小了,适当的调大。 另外,由于这台机器网卡本身的问题,无法均匀的分散 interrupts,只能先把能分散的给分散了。记得把 irqbalance 给关了,这玩意儿没什么用:
# /etc/init.d/irqbalance status
irqbalance is stopped

关键还是配置管理做的不到位,不然不会出现这么低级的错误。