我正在尝试调试一台服务器的一些网络问题。我用多个监视器监视这台机器,发现 ping 错误率有时会跳升至 5/10%
我在 ubuntu 上运行,我看到 ethtool -S eth0 的输出显示 rx_queue_*_csum_errboth rx_fifo_errors 为正值(几千个)。
这些计数器实际上跟踪什么,是否存在一些众所周知的原因导致它们非 0?
答案1
rx_fifo_errors
= rx_queue_*_drops 总数
rx_queue_*_drops
= 每个队列丢弃的数据包数
听起来 RX 中断没有足够快地分配缓冲区,导致适配器丢弃数据包。
检查并增加环形缓冲区。
# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
您可以将“ Current Hardware Settings
”设置为“ ”,最高可达“ ”RX
中显示的限额Pre-set maximums
# ethtool -G eth0 rx 4096
笔记:此设置将不是重启后仍能继续使用。你可能需要使用rc.local
(或类似的东西)
答案2
根据Linux 内核文档:
RX Queue Checksum errors
表示物理链路错误。
RX Fifo errors
表示 FIFO 溢出,如下所述@Signal15
rx_crc_errors
Number of packets received with a CRC error. Part of aggregate "frame" errors in /proc/net/dev.
For IEEE 802.3 devices this counter must be equivalent to:
30.3.1.1.6 aFrameCheckSequenceErrors
我建议在生产机器上调整 RX FIFO 大小时要小心,因为我在某些配置下遇到了不稳定性,例如:当接口是 BRIDGE 或 BOND 组的一部分时。