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
