多队列网卡与队列数
多队列网卡把收发拆成多个队列,每个队列可以绑定独立中断与 CPU,从而把收包处理并行到多个核上。队列数量用 ethtool -l 查看、-L 调整,它与中断亲和、RSS 哈希共同决定流量在 CPU 之间的实际分布。队列数不足时,单核软中断会成为整机收包吞吐的上限。
基本信息
| 查看命令 | ethtool -l eth0 |
|---|---|
| 调整命令 | ethtool -L eth0 combined 8 |
| 通道类型 | combined、rx、tx 三类,多数场景用 combined |
| 硬件限制 | Maximums 行给出该网卡的队列上限 |
| 生效方式 | 立即生效并重建中断,需持久化到网络配置 |
典型使用场景
- 高 PPS 场景收包集中在一个核上,评估增加队列
- 核对网卡实际启用的队列数是否与规格一致
- 与中断亲和联合规划,让队列与 CPU 一一对应
- 虚拟化环境中对比物理网卡与虚拟网卡的能力差异
- 压测前把队列配置固化进基线,保证多次测试口径一致
查看与调整
查看与调整
ethtool -l eth0 # 查看当前、最大与预置队列数
cat /proc/interrupts | grep -i eth0 # 对照中断在各 CPU 上的分布
ls /sys/class/net/eth0/queues/ # 列出实际存在的收发队列
ethtool -L eth0 combined 8 # 需要时调整,先确认不超过 Maximums输出逐项读法
| 输出项 | 含义 | 判读 |
|---|---|---|
| Channel 类型 | combined、rx 或 tx | 多数场景关注 combined |
| Current hardware settings | 当前生效的队列数 | 与中断数量应大致对应 |
| Pre-set maximums | 硬件与驱动支持的上限 | 调大时不能超过该值 |
| Pre-set maximums 为空 | 网卡不支持该功能 | 虚拟网卡上很常见 |
调整队列数会重建该网卡的中断与队列结构,影响网卡上的全部流量,应在维护窗口执行,并先记录原值以便快速回滚。
队列数并非越多越好:每个队列都会带来额外的中断开销,队列数明显超过实际可用 CPU 时,中断迁移反而会增加抖动,需与 CPU 拓扑一起评估。
验证与回退
- 调整后用 ethtool -l 确认 Current 值已按预期变化
- 对照 /proc/interrupts 看中断是否分散到不同 CPU
- 压测对比调整前后的吞吐与软中断占用变化
- 异常时用记录的原值调回,或重启网络服务恢复默认