中断合并的取舍
中断合并(interrupt coalescing)让网卡攒够若干个包或等够一段时间再触发一次中断,用降低中断频率换取更低的 CPU 占用,代价是收包延迟抬高。对延迟敏感的业务,合并参数会直接影响尾延迟;对多数普通业务,它带来的 CPU 收益反而更重要。是否调整应按实测收益决定。
基本信息
| 适用平台 | Linux,使用 ethtool 查看与调整 |
|---|---|
| 查看命令 | ethtool -c 网卡名 |
| 关键参数 | rx-usecs(等待微秒数)、rx-frames(攒包数)、tx-usecs |
| 权衡 | 延迟与 CPU 占用此消彼长 |
典型使用场景
- 低延迟业务调优,把接收侧等待压到最低
- CPU 被中断打满导致丢包时,适度增大合并以降低中断频率
- 对比调整前后的尾延迟与吞吐变化
- 虚拟化环境中区分宿主驱动与虚拟交换机的合并行为
- 为延迟基线的异常提供参数层面的解释
查看与调整
查看与调整
ethtool -c eth0
# 查看当前合并参数:rx-usecs、rx-frames、tx-usecs、adaptive-rx 等
sudo ethtool -C eth0 rx-usecs 0
# 关闭接收侧合并等待,降低延迟,代价是中断与 CPU 消耗上升
ethtool -S eth0 | head -20
# 结合网卡计数确认丢包与队列情况,再判断是否需要回调参数
sudo ethtool -C eth0 rx-usecs 32 rx-frames 16
# 折中示例:适度合并,兼顾延迟与 CPU,具体数值需按网卡与业务实测参数逐项读法
| 参数 | 含义 | 调整方向 |
|---|---|---|
| rx-usecs | 收包中断的最大等待时间(微秒) | 调小降延迟,调大降 CPU |
| rx-frames | 攒够多少帧触发一次中断 | 调小降延迟,代价是中断更频繁 |
| tx-usecs | 发送侧的合并等待 | 影响发送方向的延迟 |
| adaptive-rx | 自适应合并开关 | 开启后由驱动按负载自动调整 |
调整要以实测为准。多数业务对几微秒到几十微秒的差别并不敏感,而中断频率翻倍带来的 CPU 上升会挤占其他负载,最终得不偿失。留一份调整前后的对比数据再决定。
虚拟化环境中合并行为由虚拟交换机与宿主驱动共同决定,只改虚拟机内部参数可能毫无变化。要逐层核对宿主网卡、虚拟交换机与虚拟机内部的设置。
排查顺序
- 先看当前合并参数与中断频率,确认是否存在明显等待
- 用同一业务流量测出调整前后的延迟分位数与 CPU 占用
- 检查是否存在网卡队列或 CPU 绑定层面的瓶颈
- 虚拟化环境逐层核对,确认改动实际生效的位置
- 把最终参数与实测结论写入运维记录,便于回滚