网卡多队列与中断均衡
高吞吐场景下,如果网卡只有一个队列,中断会集中到某个 CPU 核上,形成软中断瓶颈:CPU 整体看起来并不忙,但网络吞吐上不去。排查要看队列数量、中断在各核的分布以及软中断占比;调整手段包括多队列网卡配合中断均衡,以及在单队列场景下用软件分发。
基本信息
| 用途 | 排查与优化网络软中断的 CPU 分布 |
|---|---|
| 查看方式 | ethtool -l、/proc/interrupts、mpstat -P ALL |
| 调整手段 | RPS、irqbalance、启用多队列 |
| 适用场景 | 万兆与高包速率业务 |
典型使用场景
- 万兆网卡下吞吐上不去而 CPU 显示空闲
- 单核软中断占比异常偏高
- 压测时发现延迟抖动与中断集中相关
- 核对中断亲和设置是否已持久化
- 排查容器宿主机上网络瓶颈的具体位置
- 评估软件分发与硬件多队列之间的取舍
诊断与调整
诊断与调整
ethtool -l eth0 # 查看队列数与当前配置
ethtool -S eth0 | head # 队列级统计(视驱动支持)
grep -E 'eth0' /proc/interrupts | head
mpstat -P ALL 1 3 # 看各核软中断占比
cat /sys/class/net/eth0/queues/rx-0/rps_cpus # 查看 RPS 掩码
systemctl status irqbalance --no-pager | head # 中断均衡服务状态
tuned-adm active # 确认是否由 tuned 统一管理手段与取舍
| 手段 | 作用 | 代价 |
|---|---|---|
| 多队列配合 RSS | 硬件层把流量分到多核 | 需要网卡与驱动支持 |
| irqbalance | 动态均衡中断 | 粒度粗,可能与绑核冲突 |
| RPS | 软件模拟分发 | 额外消耗 CPU |
| RFS | 按数据流分发 | 配置复杂度上升 |
| 中断亲和绑核 | 精确可控 | 需要自行维护并持久化 |
多队列网卡优先依靠硬件分发配合中断均衡;RPS 属于软件模拟,会消耗额外 CPU,生产环境使用前应先评估开销。
RPS 掩码是十六进制 CPU 位图:核数写错(例如 4 核机器填了 8 核的掩码)会让分发失效,表现为「调了但没效果」。
手工调整的中断亲和不会自动持久化,重启即失效;应通过 tuned、udev 规则或网络配置脚本固化下来。
判断瓶颈是否出在网络软中断,可以同时看单核的软中断占比与队列级丢包计数:只凭吞吐数字,无法区分是中断集中还是链路本身已经饱和。