Linux 路由器上行链路接口上神秘的 rx_crc_errors

Linux 路由器上行链路接口上神秘的 rx_crc_errors

我有一台运行 Debian 11 的 Linux 机器,它充当位于边缘的设备和主机之间的路由器。在执行curl下载文件的命令时,面向边缘的接口将开始rx_crc_errors零星但持续地积累- 计数会以每秒一到两次的速度突然增加。结果是,无论是从路由器还是从其后面的主机,此curl命令的运行速度都非常慢,下载速度只有线路可用速度的一小部分(我检查过通过相同边缘设备的其他路由器和服务器,它们以更快的速度运行,并且不会累积 rx_crc_errors)。

边缘路由器(累积这些 rx_crc_errors 的机器/接口的网关)是运行 pfSense 22.01(最新版本)的 NetGate 1537。

到目前为止我们尝试过的方法:

  • 更换了电缆
  • 更换了 SFP 适配器
  • 使用不同的交换机端口
  • 用相同配置的机器替换整个主机

这些都没有改变行为,据我所知,这消除了硬件作为问题的根源。

curl https://dl.google.com/go/go1.18.1.linux-amd64.tar.gz --output t.dat从边缘机器执行大约需要 1 秒。从出现 rx_crc_errors 的路由器执行需要 17 秒,从其后面的主机执行需要 21 秒。

错误在上行链路接口上显示如下:

...
2: enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 10:1f:74:35:fc:94 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped missed  mcast
    1609100899 1250023  508     0       0       2534
    TX: bytes  packets  errors  dropped carrier collsns
    20574398   206727   0       0       0       0
...

然后使用 ethtool 我可以获得显示 CRC 错误的更多详细信息(rx_crc_errors: 508

ethtool -S enp3s0f0
NIC statistics:
     rx_bytes: 1609111223
     rx_error_bytes: 0
     tx_bytes: 20588905
     tx_error_bytes: 0
     rx_ucast_packets: 1245869
     rx_mcast_packets: 2554
     rx_bcast_packets: 1687
     tx_ucast_packets: 202770
     tx_mcast_packets: 4038
     tx_bcast_packets: 0
     tx_mac_errors: 0
     tx_carrier_errors: 0
     rx_crc_errors: 508
     rx_align_errors: 0
     tx_single_collisions: 0
     tx_multi_collisions: 0
     tx_deferred: 0
     tx_excess_collisions: 0
     tx_late_collisions: 0
     tx_total_collisions: 0
     rx_fragments: 22
     rx_jabbers: 0
     rx_undersize_packets: 0
     rx_oversize_packets: 0
     rx_64_byte_packets: 1823
     rx_65_to_127_byte_packets: 9084
     rx_128_to_255_byte_packets: 2371
     rx_256_to_511_byte_packets: 585
     rx_512_to_1023_byte_packets: 80
     rx_1024_to_1522_byte_packets: 1236167
     rx_1523_to_9022_byte_packets: 0
     tx_64_byte_packets: 0
     tx_65_to_127_byte_packets: 200168
     tx_128_to_255_byte_packets: 5659
     tx_256_to_511_byte_packets: 370
     tx_512_to_1023_byte_packets: 230
     tx_1024_to_1522_byte_packets: 381
     tx_1523_to_9022_byte_packets: 0
     rx_xon_frames: 0
     rx_xoff_frames: 0
     tx_xon_frames: 0
     tx_xoff_frames: 0
     rx_mac_ctrl_frames: 0
     rx_filtered_packets: 33361
     rx_ftq_discards: 0
     rx_discards: 0
     rx_fw_discards: 0

请注意,我检查过的任何其他机器上所有其他接口的错误都为零。

我现在不知道下一步该检查什么。我怀疑这个问题与边缘路由器有某种关系,但连接到此边缘路由器的其他路由器没有出现同样的问题。有一次,我使用 VLAN 中继(802.1q 标记)从边缘路由器到交换机,但我禁用了它,还尝试将 MTU 提高 4 个字节到 1504,但这两种方法都没有任何明显的区别 - rx_crc_errors 仍然在累积,性能如上所述很差。

关于诊断这些 rx_crc_errors 的原因还有其他想法吗?

相关内容