ethtool -l 仅显示当前启用的队列数及驱动声明的最大值,不能修改最大通道数;真正决定最大RX/TX队列数的是网卡固件、驱动支持与硬件规格,需结合ethtool -L设置、驱动验证(如RSS启用)、MSI-X能力检查及中断CPU绑定协同完成。

ethtool -l 本身只能查看网卡当前的硬件队列(ring buffer)配置,不能直接修改最大通道数(即 RX/TX 队列数量)。真正决定“最大硬件队列通道数”的是网卡固件能力、驱动支持和硬件规格,ethtool -l 不具备写入权限,也不触发队列数变更。要让网卡队列数匹配多核 CPU,并非靠一条命令搞定,而需分步确认与协同配置。
先查清网卡真实支持的最大队列数
运行 ethtool -l eth0(替换为你的接口名),输出中关注:
- Current hardware settings:当前实际启用的 RX/TX 队列数(如 RX: 8, TX: 8)
- Maximum supported:该网卡硬件+驱动允许设置的上限(如 RX: 64, TX: 64)
注意:这个“Maximum”是理论上限,但是否可用还取决于驱动是否加载了对应功能(如 ixgbe、i40e、mlx5 驱动需启用 RSS 或 MQ 支持)。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
确认驱动和内核是否启用多队列支持
多数现代千兆/万兆网卡默认启用多队列,但需验证:
- 检查驱动是否加载 RSS(Receive Side Scaling):
ethtool -k eth0 | grep receive-scalar,应显示receive-scalar: on - 查看当前队列目录是否存在:
ls /sys/class/net/eth0/device/msix_affinity/(MSI-X 中断绑定)或/sys/class/net/eth0/queues/(含 rx-0、tx-0 等子目录) - 若
/sys/class/net/eth0/queues/下只有 rx-0 和 tx-0,说明队列未启用或多队列被禁用(可能因 BIOS 设置、驱动参数或旧内核)
通过 ethtool -L 启用并设置队列数(关键操作)
真正用于修改队列数量的是 ethtool -L(大写 L),不是 -l(小写 L):
- 设为 CPU 核心数(如 16 核):
sudo ethtool -L eth0 combined 16 - 分别设置 RX/TX(部分网卡支持):
sudo ethtool -L eth0 rx 16 tx 16 - 执行后立即生效,但重启会丢失;需写入启动脚本或 systemd service 持久化
- 若报错 “Operation not supported”,说明驱动不支持动态调整,或需在模块加载时传参(如
i40e.irq_mode=1)
配合 CPU 绑定与中断亲和性实现算力对齐
仅设队列数还不够,必须把每个队列中断绑定到对应 CPU 核心:
- 查看各队列中断号:
cat /proc/interrupts | grep eth0 - 将 rx-0 中断绑定到 CPU0:
echo 1 | sudo tee /proc/irq/XX/smp_affinity_list(XX 为中断号) - 更推荐使用
irqbalance或脚本自动按 NUMA 节点分配,避免跨节点访问延迟 - 验证效果:
watch -n1 'cat /proc/interrupts | grep eth0',观察中断是否均匀分散

















