Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.4. Диагностика потерь пакетов

Наиболее распространенной причиной потери пакетов является переполнение очереди. Ядро накладывает ограничения на ее длину, и в некоторых случаях заполнение очереди происходит быстрее чем ее освобождение, что со временем приведет к переполнению и потере пакетов.
Рисунок 8.1, «Прохождение данных из сети» демонстрирует две основные очереди: аппаратный буфер сетевой карты и очередь сокета. Обе очереди должны быть настроены так, чтобы минимизировать риск переполнения.

8.4.1. Буфер сетевой карты

Пакеты, поступающие в буфер сетевой карты, извлекаются посредством softirq. Опросить состояние очереди можно следующим образом:
ethtool -S ethX
Замените ethX именем устройства. Эта команда вернет число потерянных на ethX пакетов, что обычно является следствием переполнения очереди.
К решению этой проблемы можно подойти с разных сторон.
Входящий трафик
Можно замедлить входящий трафик (добавить фильтры, уменьшить число многоадресных групп и т.п.)
Длина очереди
Можно увеличить длину очереди. При этом также потребуется увеличить число буферов в очереди. Для этого надо изменить параметры rx и tx для ethX:
ethtool --set-ring ethX
Подробную информацию можно найти на справочной странице man ethtool.
Вес устройства
Скорость освобождения очереди можно контролировать с помощью весового значения устройства. Вес определяет максимальное число пакетов, получаемых сетевой картой в контексте одного прерывания softirq. Его значение хранится в /proc/sys/net/core/dev_weight.
Обычно администраторы предпочитают последний вариант. Однако надо помнить, что увеличение числа пакетов, получаемых сетевой картой за один раз, означает увеличение процессорных циклов, во время выполнения которых процессор не будет обслуживать приложения.