首页/系统/Linux 内核与性能调优速查/多队列网卡队列数查看与调整
网络栈调优98 条

多队列网卡队列数查看与调整

队列数影响收包并行度; 用 ethtool 查看当前与上限, 高 PPS 场景评估增加 combined 队列。

多队列网卡与队列数

多队列网卡把收发拆成多个队列,每个队列可以绑定独立中断与 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
  • 压测对比调整前后的吞吐与软中断占用变化
  • 异常时用记录的原值调回,或重启网络服务恢复默认

易错点

  • 在虚拟网卡上照搬物理网卡的队列参数,接口不暴露该功能导致配置无效
  • 只增加队列而不评估中断数量与 CPU 拓扑,中断仍堆在少数核上
  • 调整前不记录原队列数,出现异常时无法快速恢复
  • 以为调大队列数等于提高带宽,忽略了上游链路与对端的能力上限

数据来源与参考

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