中断合并是什么
中断合并让网卡攒够一定数量的报文、或等待固定时间后再产生一次中断,用较少的 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 会带来固定量级的排队延迟,这类延迟在平均值上不明显,却在尾延迟指标里非常突出。