rx_missed_errors持续增加的常见原因包括硬件资源不足(如PCIe带宽瓶颈、网卡FIFO溢出)、驱动配置不当(如中断合并过度、NAPI轮询不足)、RX队列分配不均及系统负载过高(如软中断瓶颈、内存分配失败)。

rx_missed_errors 持续增加的常见原因
rx_missed_errors 是 ethtool 统计中一个关键指标,表示网卡因**内部接收缓冲区满、DMA 失败或队列溢出等原因,直接丢弃了本该接收的数据包数量**。它不反映 CRC 错误或链路层丢包,而是说明“包到了物理层,但没进协议栈”。持续增长意味着接收路径存在瓶颈或异常,需从硬件、驱动、队列配置三方面排查。
硬件层面原因
网卡自身资源不足或物理异常会导致 rx_missed_errors 上升:
-
PCIe 带宽或延迟问题:老旧主板、共享 PCIe 通道(如与显卡共用)、PCIe 链路降速(
lspci -vv | grep -A 10 "Eth.*cap"查看 Link Capabilities/Status),导致 DMA 写入内存变慢,RX ring buffer 来不及清空 - 网卡 FIFO 溢出:部分网卡(如某些 Intel I350/I40E、Broadcom BCM57xx)有片上 RX FIFO,当驱动处理延迟高或中断响应慢时,FIFO 满即丢包,计入 rx_missed_errors
-
供电或温度异常:网卡过热或供电不稳可能引发内部逻辑异常,表现为间歇性 rx_missed_errors 突增(可结合
ip link show eth0查看是否伴随 carrier error 或 flapping)
驱动与内核配置原因
驱动行为和内核网络栈参数直接影响 RX 处理效率:
-
中断合并(Interrupt Coalescing)过度:启用过多延迟或包数阈值(如
ethtool -C eth0 rx-usecs 100 rx-frames 64),导致软中断积压,ring buffer 溢出。尤其在小包突发场景下极易触发 - NAPI 轮询权重不足或被阻塞:驱动未及时退出 NAPI poll 循环(如硬中断频繁抢占、poll 函数耗时过长),或.net.core.netdev_budget 过小(默认300),使单次轮询无法清空 ring,后续包被丢弃
- 驱动 Bug 或版本不匹配:例如旧版 ixgbe 驱动在多队列 + RPS 开启时存在 ring refill 竞态;或使用 out-of-tree 驱动(如某些厂商定制驱动)未适配当前内核版本
RX 队列与系统负载原因
即使硬件和驱动正常,系统级配置不当也会让接收队列“堵死”:
- RX 队列数量不足或分配不均:单队列网卡在高吞吐下易成为瓶颈;多队列网卡若 RSS 配置不合理(如 hash key 未更新、indirection table 偏斜),流量集中到少数队列,对应 CPU 负载飙升,来不及处理
-
CPU 绑定失衡或软中断瓶颈:查看
cat /proc/interrupts | grep eth0,确认中断是否集中在某几个 CPU;再用top -H或perf top -e irq:softirq_entry观察 ksoftirqd 占用,若某 CPU 软中断长期 100%,说明该核无法及时消费 RX 队列 -
内存压力或页分配失败:RX ring 中 descriptor 指向的 skb 缓冲区需通过
alloc_pages()分配,若系统内存碎片严重或 lowmem 不足(尤其在没有 transparent hugepage 的 32 位环境或某些嵌入式系统),分配失败会直接丢包并累加 rx_missed_errors
快速定位建议
按顺序执行以下检查,能较快收敛根因:
- 运行
ethtool -S eth0 | grep -i "miss\|drop\|over\|fifo",同时观察rx_over_errors、rx_fifo_errors是否同步增长(指向 FIFO 或 DMA 故障) - 用
ethtool -g eth0查看 RX ring buffer 大小,尝试调大(如ethtool -G eth0 rx 4096),若数值下降说明原 buffer 不足 - 关闭中断合并:
ethtool -C eth0 rx off tx off,观察 rx_missed_errors 是否停止增长(可临时验证是否为 coalescing 导致) - 检查
/proc/net/softnet_stat第 1 列(dropped)和第 2 列(time_squeeze),若后者持续非零,说明 softirq 处理不过来
不复杂但容易忽略。关键是把 rx_missed_errors 当作“接收流水线堵车报警”,顺着物理层 → 驱动层 → 内核网络栈 → 系统资源这条链路逐段验证。











