У меня есть машина Linux, работающая под управлением Debian 11, которая действует как маршрутизатор между устройством, находящимся на краю, и хост-машиной. При выполнении команды curl
для загрузки файла интерфейс, который обращен к краюначнет накапливаться rx_crc_errors
спорадически, но последовательно- счетчик увеличивается рывками, в среднем, один или два в секунду. Результатом является то, что как с маршрутизатора, так и с хост-машины за ним эта curl
команда выполняется очень медленно и загружается на части скорости, доступной на линии (и я проверил на других маршрутизаторах и серверах, которые проходят через то же периферийное устройство, и они работают на более высокой скорости и не накапливают rx_crc_errors).
Граничный маршрутизатор (шлюз для машины/интерфейса, который накапливает эти rx_crc_errors) — это NetGate 1537, работающий под управлением pfSense 22.01 (последняя версия).
Что мы уже попробовали:
- Заменил кабель.
- Заменил 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?