Linux查看网络接口队列深度需区分三层:ethtool -g查网卡硬件Ring Buffer(Current hardware settings中的RX/TX值),ifconfig或ip link查内核txqueuelen(如txqueuelen 1000),lsscsi -l查SCSI存储queue_depth;三者作用域、参数来源及调优目标均不同。

Linux 查看网络接口队列深度,关键要分清三个不同层级的“队列”:网卡硬件环形缓冲区(Ring Buffer)、内核传输队列(txqueuelen)、以及 SCSI 存储 LUN 的 queue_depth。混用命令或误读参数会导致完全对不上号。
ethtool -g 查网卡硬件 Ring Buffer 深度
这是最常被问到、也最容易被当成“总队列深度”的那个值——它代表网卡芯片内部 DMA 缓冲区大小,直接影响收发包不丢包的能力。
-
ethtool -g eth0输出中Current hardware settings下的RX和TX值就是当前生效的硬件队列深度(单位:包) - 若显示
No data available,说明该网卡驱动不支持 Ring Buffer 调整(如某些 virtio_net 虚拟网卡) -
Pre-set maximums是硬件上限,硬设超限会报Operation not supported - Mellanox 网卡常见上限是 8192,Intel 千兆卡多为 4096,部分老卡仅 256
ifconfig 或 ip link 查 txqueuelen(内核传输队列长度)
这个值控制的是内核协议栈往网卡驱动提交数据包时的排队能力,和硬件 Ring Buffer 完全无关,但协同影响高吞吐下的延迟与丢包。
-
ifconfig eth0输出末尾的txqueuelen 1000就是当前值;网卡 DOWN 状态需加-a才可见 - 等价命令:
ip link show dev eth0,找txqlen <N>字段 - 回环接口
lo的txqueuelen通常是 0 或 1,改它没实际意义 - 该值默认由驱动决定,部分新发行版不预装
net-tools,ifconfig会提示command not found
lsscsi -l 查 SCSI 设备(如硬盘 LUN)的 queue_depth
这不是网络接口的队列,但名字里带“queue depth”且常被混淆——它控制的是主机向存储设备(如 SAN LUN、NVMe SSD)并发发多少 I/O 请求。
-
lsscsi -l输出中每行末尾的queue_depth=16就是该设备当前软件队列深度 - 对应内核路径:
/sys/block/sda/device/queue_depth(可读可写,需 root) - NVMe 设备更应关注
/sys/block/nvme0n1/device/queue_depth和/sys/block/nvme0n1/queue/nr_requests - 虚拟机里没外接存储时,
lsscsi可能根本不存在或无输出
真正调优时,必须先确认你关心的是哪一层:突发小包丢包?看 ethtool -g;TCP 重传陡增?检查 txqueuelen 和 net.core.netdev_max_backlog;存储 I/O 延迟高?才去动 queue_depth。三者参数来源不同、作用域不同、修改方式也不同,强行统一处理只会让问题更难定位。


















