查网卡队列深度需先明确层级:1.硬件Ring Buffer用ethtool -g查看,决定硬件吞吐上限;2.txqueuelen用ip link或/sys/class/net/eth0/tx_queue_len查看,影响内核协议栈排队;3.多队列数量用ls /sys/class/net/eth0/queues/或ethtool -l查看,决定并行处理能力。

查网卡队列深度,必须先分清你问的是哪一层:硬件 Ring Buffer?内核 txqueuelen?还是多队列数量?三者命令、含义、调优目标全不同,混着查会完全对不上号。
ethtool -g 查网卡硬件 Ring Buffer 深度
这是网卡芯片内部 DMA 缓冲区大小,单位是包数,直接影响收发是否丢包。它和内核协议栈无关,但决定硬件侧吞吐上限。
-
ethtool -g eth0输出里看Current hardware settings行的RX和TX值,比如RX: 2048 TX: 2048 - 若显示
No data available,说明驱动不支持(常见于virtio_net虚拟网卡) -
Pre-set maximums是硬件上限,硬设超限会报Operation not supported - Mellanox 卡上限常为 8192,Intel 千兆卡多为 4096,老卡可能只有 256
ip link 或 ifconfig 查 txqueuelen(内核传输队列长度)
这是内核协议栈往网卡驱动提交数据包时的排队能力,单位也是包数,影响高吞吐下的延迟与丢包,和硬件 Ring Buffer 完全独立。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
ip link show eth0 | grep txqueuelen(推荐,ifconfig已逐步弃用) -
ifconfig eth0输出末尾的txqueuelen 1000字段;网卡 DOWN 状态需加-a才可见 -
cat /sys/class/net/eth0/tx_queue_len是最轻量读取方式,无解析开销 - 回环接口
lo的txqueuelen通常是 0 或 1,改它没意义
ls /sys/class/net/eth0/queues/ 查实际启用的多队列数量
这不是“深度”,而是当前启用的 RX/TX 队列个数,决定能否并行处理流量。它和 Ring Buffer 大小、txqueuelen 都不等价,但协同影响整体吞吐。
-
ls /sys/class/net/eth0/queues/列出所有子目录:rx-0、rx-1、tx-0、tx-1……总数 = 最大 rx-N 编号 + 1 + 最大 tx-N 编号 + 1 -
ethtool -l eth0中Current hardware settings的Rx/Tx值才是当前生效队列数(注意不是Pre-set maximums) -
cat /proc/interrupts | grep eth0 | grep rx统计 RX 中断行数,即实际分配的 RX 队列数 - KVM 虚拟机中
virtio-net默认只开 1 队列,即使宿主机开了 8 个也没用
真正动手前,得先确认你关心的是什么:突发小包丢包?看 ethtool -g;TCP 重传陡增?查 txqueuelen 和 net.core.netdev_max_backlog;CPU 软中断打满?才去验多队列数量和 IRQ 绑定。三个值来源不同、修改方式不同、甚至生效时机都不同——查错一层,后面全跑偏。

















