首页/网络/抓包与流量分析速查/中断合并与收包延迟
丢包与时延定位60 条

中断合并与收包延迟

中断合并(interrupt coalescing)降低 CPU 消耗但抬高收包延迟:低延迟场景要评估合并参数与业务敏感度。

中断合并的取舍

中断合并(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 绑定层面的瓶颈
  • 虚拟化环境逐层核对,确认改动实际生效的位置
  • 把最终参数与实测结论写入运维记录,便于回滚

易错点

  • 只调参数不复测:吞吐与 CPU 会同时变化,缺少对比数据无法判断收益
  • 把合并参数当成延迟唯一变量:队列、CPU 绑定、卸载特性同样影响收包延迟
  • 虚拟化环境只改虚拟机内部:宿主侧合并设置未变,改动等于没做
  • 在低负载环境验证后直接上线:高负载下中断合并的实际行为与低负载差异很大

数据来源与参考

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