网络栈调优98 条

中断合并参数调整

中断合并决定网卡攒包再中断的频率: 提高合并有利于吞吐, 降低或关闭更利于低延迟场景。

中断合并是什么

中断合并让网卡攒够一定数量的报文、或等待固定时间后再产生一次中断,用较少的 CPU 中断处理更多报文。合并程度越高,吞吐越好但延迟越大;越低则延迟更小,CPU 中断开销更高。ethtool -c 查看当前参数,-C 调整,自适应模式会按负载自动调节。

基本信息

查看命令ethtool -c eth0
调整命令ethtool -C eth0 rx-usecs 50
主要参数rx-usecs、tx-usecs、rx-frames、tx-frames
自适应开关adaptive-rx、adaptive-tx
适用平台Linux,需驱动支持中断合并

典型使用场景

  • 低延迟服务:压低 rx-usecs,减少网卡侧攒包引入的额外延迟
  • 高吞吐场景:提高合并程度,降低每包中断带来的 CPU 开销
  • 中断占比过高:观察 /proc/interrupts,评估合并参数是否过激进
  • 压测对比:用同一负载比较不同 rx-usecs 下的延迟分布
  • 虚拟化宿主:平衡多虚机中断开销与转发延迟

查看与调整

查看与调整
ethtool -c eth0                              # 查看当前合并参数与自适应状态
ethtool -C eth0 adaptive-rx off rx-usecs 50  # 低延迟取向:关闭自适应并压低等待
cat /proc/interrupts | grep -i eth0          # 对照中断次数,判断 CPU 开销
ethtool -C eth0 adaptive-rx on               # 需要时恢复自适应模式

参数含义

参数含义影响
rx-usecs收到报文后等待多少微秒再中断调大降 CPU 开销,调小降延迟
rx-frames攒够多少报文后立即中断与 usecs 共同决定触发条件
tx-usecs发送侧的中断等待时间影响发送完成通知的及时性
adaptive-rx按负载自动调整合并程度省事但不如手工设定可控

验证与权衡

  • 调整后对比延迟分布而不是只看平均值,关注 P99 变化
  • 同时观察 CPU 中断占比,确认收益确实来自合并参数
  • 低延迟业务优先牺牲一点 CPU 开销换取稳定的尾延迟
  • 保留调整前的参数,便于回滚到业务已验证的配置
中断合并与环缓冲是两个不同环节的缓冲:环缓冲决定网卡能暂存多少包,合并参数决定多久通知一次 CPU。两者都会影响延迟,调整时要分别验证。
低延迟场景保留过大的 rx-usecs 会带来固定量级的排队延迟,这类延迟在平均值上不明显,却在尾延迟指标里非常突出。

易错点

  • 低延迟场景保留过大 rx-usecs,引入额外排队延迟而未被平均值发现
  • 只调合并参数,不观察 CPU 中断占比与延迟分布的变化
  • 忘记自适应模式的覆盖作用:开了自适应后手工值可能被自动改写
  • 在压测环境调好参数却未持久化,生产重启后回到默认值

数据来源与参考

  • man ethtool
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌