我有一台运行 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 的原因还有其他想法吗?