Потери на сетевых картах, задержки в обработке и как с ними бороться

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (20)

просмотр истории страницы

{code}
/usr/local/Reductor/bin/net_rx_top.sh
chroot /app/reductor network-top
{code}

Запускается без аргументов, показывает прирост прерываний на одно ядро процессора в секунду. Рекомендуемое число: меньше 20000 на ядро.
Запускается без аргументов, показывает полную картину нагрузки на сетевые карты и ядра процессора в реальном времени. Аномально высокие значения подсвечиваются желтым (больше нормы) или красным (критично) цветом.


h1. Размер буфера сетевой карты

{code}

Здесь мы видим выкрученный на максимум rx-буфер. Обычно подобрать значение довольно сложновато, ибо тут такая ситуация - либо задержки (плохо для скорости реакции на пакет), либо потери (плохо, что нужный ip-пакет вообще не попадёт на анализ). Самое оптимальное - некоторое "среднее" значение. При высокочастотном и многоядерном процессоре (>3ГГц) можно ближе к максимуму/максимальный буфер. Пример команды для увеличения буфера:
Здесь мы видим увеличенный до максимума rx-буфер.

В Carbon Reductor DPI X при добавлении сетевой карты для фильтрации через мастер для неё автоматически настраивается оптимальный размер RX-буфера.

Также он настраивается автоматически при использовании опции FWBOOST.


{code}
ethtool -G eth1 rx 2048
{code}

CentOS позволяет указывать параметры ethtool в качестве опции в настройках интерфейса (/etc/sysconfig/network-scripts/ifcfg-eth1), например строчкой
{code}
ETHTOOL_OPTS="-G ${DEVICE} rx 2048"
{code}

К сожалению он не позволяет указывать несколько команд одновременно, но можно добавить их в хук.

h1. Распределение прерываний
Статья для лучшего понимания, правда больше под маршрутизаторы : [http://habrahabr.ru/post/108240/]


В кратце - можно за счёт повышения нагрузки на процессор слегка снять нагрузку с сетёвки уменьшая rx-usecs. На большинстве машин использумых в нашем случае оптимальным оказалось значение 1.

3: eth1: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1528 qdisc mq state UP qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
5956390755888 19345313821 3533855 0 0 817154
RX errors: length crc frame fifo missed
3533855 0 0 0 0
TX: bytes packets errors dropped carrier collsns
23100 330 0 0 0 0
TX errors: aborted fifo window heartbeat
0 0 0 0
{code}

# Как избавиться от этих потерь?

Разово:

{code}