在麒麟系统中需区分内核txqueuelen与网卡硬件ring buffer:用ifconfig或ip link show查txqueuelen;用sudo ethtool -g查rx/tx ring buffer深度;结合/proc/net/snmp和ethtool -s的丢包指标验证瓶颈。

在麒麟操作系统中查看网卡的接收(RX)和发送(TX)队列数,必须区分两个不同层级的队列:一是内核网络栈的传输队列长度(txqueuelen),二是网卡硬件自身的环形缓冲区(Ring Buffer)深度。前者影响TCP拥塞控制与突发流量缓存能力,后者直接决定驱动层能否及时收发数据包而不丢包。混淆二者会导致调优失效或误判瓶颈。
查看内核传输队列长度(txqueuelen)
该值表示内核为该网卡维护的待发送数据包最大缓存数量,单位是“包”,不是字节。它由驱动初始化时设定,运行时可动态调整。
方法一:用 ifconfig 查看(适用于已安装 net-tools 的系统)
执行:ifconfig,在每块启用网卡输出末尾查找 txqueuelen 字段,例如 txqueuelen 1000 (Ethernet)。
若网卡处于 DOWN 状态,需加 -a 参数强制显示:ifconfig -a | grep txqueuelen。
方法二:用 ip link show 查看(推荐,无需额外安装)
执行:ip link show dev enp0s3(将 enp0s3 替换为你实际的网卡名)。
在输出中定位 txqlen 字段,其数值即为当前 txqueuelen 值。
注意:【lo 回环接口的 txqlen 恒为 0 或 1,修改它无实际意义】。
查看网卡硬件 Ring Buffer 队列深度
这是网卡芯片内部用于暂存收发数据包的硬件缓存区,分 RX(接收)和 TX(发送)两部分,直接影响高吞吐场景下的丢包率。必须用 ethtool 查询,且需 root 权限。
第一步:确认网卡名称
执行:ip -br link | grep UP,从中选出正在使用的物理网卡名(如 enp0s3、ens11f0)。
第二步:查询当前硬件队列设置
执行:sudo ethtool -g enp0s3(替换为你的网卡名)。
输出中 “Current hardware settings” 下的 RX 和 TX 数值,就是当前生效的 Ring Buffer 深度,单位是“帧”(packet)。
第三步:检查硬件上限
同一输出中 “Pre-set maximums” 行的 RX/TX 值,是该网卡芯片允许设置的最大 Ring Buffer 深度。
若要调大,命令为:sudo ethtool -G enp0s3 rx 4096 tx 4096;但【该操作会短暂中断网络连接,不可在业务高峰期执行】。
注意:部分虚拟网卡(如 virtio_net)不支持 ethtool -G,执行后提示 “No data available”,此时该字段无意义,应忽略。
验证队列是否成为瓶颈
仅看数值不够,需结合丢包指标判断队列是否过小。
执行:cat /proc/net/snmp | grep -A1 "Udp:",观察 InErrors 或 RcvbufErrors 是否持续增长——这说明 RX Ring Buffer 溢出丢包。
执行:ethtool -S enp0s3 | grep -i "tx.*drop\|rx.*drop",若 tx_dropped 或 rx_missed_errors 非零且递增,说明 TX/RX 队列已满导致丢弃。
这一步操作起来很简单,直接把命令粘贴进终端回车就行。











