ethtool — первое, что стоит запустить, когда интерфейс “вроде работает, но как-то медленно”. Голый вызов без флагов показывает текущий режим линка:

ethtool eth0

В выводе важны три строки: Speed (реальная согласованная скорость — не всегда совпадает с паспортной скоростью карты), Duplex (full/half — half duplex на современной проводной сети почти всегда означает проблему согласования) и Link detected: yes/no (физически ли подключен кабель, независимо от того, что показывает ip link).

Когда линк в порядке, а потери всё равно есть — флаг -S достаёт счётчики статистики прямо с карты, в обход того, что видит ядро:

ethtool -S eth0

Там ищутся rx_errors, rx_dropped, rx_crc_errors — растущие числа почти всегда означают проблему на уровне кабеля, разъёма или самого порта свитча, а не на уровне приложения.

Отдельная причина потерь под нагрузкой — слишком маленький ring buffer: буфер, в который карта складывает пакеты, пока ядро не успело их забрать. Текущие и максимальные значения:

ethtool -g eth0

Поднять RX-буфer до максимума, который поддерживает карта:

ethtool -G eth0 rx 4096

Увеличение ring buffer снижает потери на коротких всплесках трафика, но ценой задержки — пакеты дольше ждут своей очереди на обработку, поэтому для latency-sensitive нагрузок значение стоит поднимать с оглядкой, а не сразу на максимум.

#linux #network