Сеть «работает, но медленно» — худший класс инцидентов: приложение жалуется на задержки, а коммутатор и графики молчат. В большинстве случаев ответ даёт ethtool: он показывает, на какой скорости реально поднялся линк, какие ошибки считает карта и не отключены ли аппаратные ускорения. Разберём диагностику от кабеля до настроек драйвера.

Базовая проверка линка

Первая команда выводит согласованную скорость, дуплекс, состояние автосогласования и поддерживаемые режимы. Если вместо 10000 видно 100, дальше искать нечего: проблема на физическом уровне.

ethtool eth0
ethtool -i eth0
ip -s link show eth0
dmesg | grep -i eth0 | tail -20

Блок Speed и Duplex показывает текущее согласование, Link detected — наличие несущей. В разделе Supported link modes перечислено, что умеет карта, в Advertised — что она предлагает партнёру. Расхождение этих списков часто объясняет, почему линк поднялся на низкой скорости.

Драйвер и железо

Флаг -i отдаёт имя драйвера, версию, прошивку и PCI-адрес. По нему находят карту в lspci и проверяют, не перешла ли она на слот с меньшим числом линий.

ethtool -i eth0
lspci -vv -s 0000:03:00.0 | grep -E 'LnkCap|LnkSta'
cat /sys/class/net/eth0/device/numa_node

Строка LnkSta показывает фактическую ширину PCIe. Если карта рассчитана на x8, а работает на x1, пропускной способности не хватит даже при честных 10G на порту. Проверьте также numa_node: карта на дальнем NUMA-узле добавит задержку обработки прерываний.

Счётчики ошибок

Флаг -S выводит статистику драйвера. Набор полей зависит от модели, поэтому смотрите на смысл, а не на точные имена. Счётчики обнуляются при перезапуске драйвера или линка, поэтому снимайте дельту за интервал, а не абсолютное значение с момента загрузки.

ethtool -S eth0 | grep -Ei 'err|drop|miss|discard|timeout'
watch -n 2 'ethtool -S eth0 | grep -E "rx_crc|rx_missed|tx_errors"'
  • rx_crc_errors растут — кабель, патч-панель или модуль SFP; данные бьются в пути.
  • rx_missed_errors и rx_no_buffer — карта не успевает отдавать пакеты, нужен больший ring buffer.
  • tx_errors и late collisions — почти всегда несовпадение дуплекса или скорости.
  • rx_length_errors и rx_over_errors — проблемы на стороне партнёра или согласования кадра.
  • Единичные drop при всплеске нагрузки нормальны, постоянный рост — нет.

Оффлоады

Флаг -k показывает состояние ускорений: контрольные суммы, сегментацию, GRO и LRO. Обычно они полезны, но при отладке и в виртуализации мешают.

ethtool -k eth0 | grep -E 'on|off'
sudo ethtool -K eth0 gro off
sudo ethtool -K eth0 tso off gso off

Если tcpdump показывает гигантские кадры или странные контрольные суммы, отключите GRO и TSO на время съёмки. В виртуальных машинах с пробросом карт отключение offload иногда лечит потерю пакетов. Не оставляйте такие настройки навсегда без замеров: они повышают нагрузку на процессор.

Кольца и коалесинг

Ring buffer — очередь дескрипторов между картой и ядром. Маленькое кольцо при всплеске трафика даёт дропы, большое добавляет задержку.

ethtool -g eth0
sudo ethtool -G eth0 rx 4096 tx 4096
ethtool -c eth0
sudo ethtool -C eth0 adaptive-rx on adaptive-tx on

Значения из блока Pre-set maximums — верхняя граница, которую примет драйвер. Настройка adaptive coalescing сама подбирает паузы между прерываниями: это разумный компромисс для смешанной нагрузки. Для биржевых и игровых задач, наоборот, коалесинг уменьшают до минимума.

Каналы и распределение прерываний

Многопоточная карта раскладывает очереди по ядрам. Если очередей меньше, чем ядер, часть ядер не участвует в обработке, и нагрузка ложится на меньшее число очередей.

ethtool -l eth0
sudo ethtool -L eth0 combined 8
ethtool -x eth0
grep eth0 /proc/interrupts | head

Число каналов не может превышать предел драйвера из блока Pre-set maximums. После изменения проверьте /proc/interrupts: прерывания должны распределиться по разным CPU, иначе включите irqbalance.

Модуль SFP и оптика

Для оптических трансиверов доступна диагностика DDM: температура, напряжение, ток смещения и мощность приёма-передачи. Это позволяет отличить умирающий модуль от грязного разъёма.

sudo ethtool -m eth0
sudo ethtool -p eth0 10
ethtool --show-fec eth0
ethtool -T eth0

Флаг -p мигает индикатором порта десять секунд — незаменимо в серверной, где кабели подписаны не вами. FEC показывает коррекцию ошибок: на 25G и выше она обязательна, а её отключение на одной стороне ломает линк. Rx power заметно ниже нормы обычно означает загрязнённый или пережатый патч-корд. Для медных портов модульная диагностика недоступна, зато пригодится ethtool —show-priv-flags: приватные флаги драйвера показывают энергосбережение и прочие особенности.

Скорость и дуплекс вручную

Автосогласование почти всегда лучше ручной настройки. Принудительное значение оправдано только на старом оборудовании, которое не умеет договариваться.

sudo ethtool -s eth0 speed 1000 duplex full autoneg off
sudo ethtool -r eth0
sudo ethtool -s eth0 autoneg on

Флаг -r перезапускает согласование без перезагрузки. Если после ручной настройки появились late collisions, значит, вторая сторона осталась на autoneg: такой режим работает нестабильно. Верните автосогласование на обоих концах.

Закрепление настроек

Изменения через ethtool живут до перезагрузки или перезапуска службы сети. В NetworkManager их задают свойствами подключения, а не скриптом.

nmcli -g ethtool.feature-gro con show eth0
sudo nmcli con mod eth0 ethtool.feature-gro off
sudo nmcli con mod eth0 ethtool.ring-rx 4096
sudo nmcli con up eth0

В systemd-networkd аналогичные параметры задаются в файле .link: секция Link поддерживает BitsPerSecond, Duplex и AutoNegotiation в свежих версиях systemd. После правки выполните networkctl reload и проверьте ethtool снова — настройка должна пережить перезагрузку.

Порядок диагностики

  • Проверьте Link detected и согласованную скорость.
  • Снимите -i и сверьте драйвер с прошивкой из документации вендора.
  • Посмотрите рост ошибок за две минуты, а не общий счётчик с момента загрузки.
  • Сравните счётчики на обоих концах линка и на коммутаторе.
  • Отключите GRO только для теста и верните обратно.
  • Замените кабель или модуль, если растут CRC-ошибки.
  • Сверьте настройки скорости и дуплекса с обеих сторон линка.

Итог

ethtool превращает «сеть тормозит» в конкретную гипотезу: низкая скорость согласования, битый кабель, переполненное кольцо или отключённый offload. Держите под рукой четыре команды — ethtool, -i, -S и -k, — и фиксируйте настройки через NetworkManager, чтобы они не исчезли после перезагрузки. Остальное решается заменой железа и сверкой с документацией драйвера.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте