可用watch定期执行ethtool -S并过滤FIFO溢出计数器实现近实时监控,需识别驱动特有字段如tx_fifo_errors、rx_fifo_errors等,避免误用非相关错误计数,并控制轮询频率以防系统开销。

可以用 watch 定期执行 ethtool -S 并过滤出 FIFO 溢出相关计数器,实现近实时观察。关键在于识别网卡驱动中对应 FIFO overflow 的统计字段,并避免高频轮询影响系统。
确认网卡驱动支持的 FIFO 溢出计数器名称
不同驱动命名差异大,常见字段包括:
- tx_fifo_errors(如某些 Intel igb/ixgbe 驱动)
- rx_fifo_errors 或 rx_over_errors(部分 Realtek、Marvell)
- tx_aborted_errors、tx_carrier_errors 不代表 FIFO 溢出,需排除
- 运行
ethtool -S eth0 | grep -i "fifo\|over\|err"初步筛选,结合驱动文档确认语义
构造 watch + ethtool -S 的监控命令
以每2秒刷新、高亮变化、仅显示关键字段为例:
watch -n 2 'ethtool -S eth0 2>/dev/null | grep -E "(tx_fifo_errors|rx_fifo_errors|rx_over_errors)" | sed "s/:/: /"'
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
-n 2表示间隔2秒(太短会增加 CPU 和驱动开销) -
2>/dev/null屏蔽权限或设备忙错误信息 -
grep -E精准匹配你确认有效的计数器名 -
sed微调格式,让冒号后带空格更易读
增强可读性与变化感知
若需直观看到数值是否增长,可用简单 shell 脚本配合 watch:
保存为 watch-fifo.sh:
#!/bin/bash
IFACE=${1:-eth0}
OLD=$(ethtool -S "$IFACE" 2>/dev/null | awk -F': ' '/tx_fifo_errors|rx_fifo_errors|rx_over_errors/{print $2; exit}')
NEW=$(ethtool -S "$IFACE" 2>/dev/null | awk -F': ' '/tx_fifo_errors|rx_fifo_errors|rx_over_errors/{print $2; exit}')
echo "FIFO errors: $OLD → $NEW"
[ "$OLD" != "$NEW" ] && echo "⚠️ CHANGED!" | font color="red"
然后运行:watch -n 2 ./watch-fifo.sh eth0
注意事项
该方法是软件轮询,非硬件中断级监控:
- 计数器本身由驱动在收发路径中更新,
ethtool -S读取的是快照值 - 若溢出频繁发生但每次只增1,2秒间隔可能漏掉中间跳变;建议先用
tcpdump或perf定位是否真有丢包 - 某些虚拟网卡(如 veth、macvlan)不提供底层 FIFO 计数,
ethtool -S输出为空或无相关字段 - 生产环境长期运行时,建议搭配
syslog或 Prometheus + node_exporter 做持续采集

















