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

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

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

просмотр истории страницы
{code}

Альтернативный вариант с автоматическим определением оптимального значения (утилита из netutils-linux):

{code}
chroot /app/reductor/
rx-buffers-increase eth1
{code}

h3. Распределение прерываний
h4. Включение из консоли:

h4. Реальные прерывания
h5. Шаг 1. Выбрать пункт "Включить RSS для сетевых карт"

Хорошие сетевые карты поддерживают несколько очередей для входящих пакетов. Каждая очередь привязана к одному или нескольким ядрам. Несмотря на указанный список зачастую сетевые карты по умолчанию коробки работают на первом ядре процессора. Обойти это можно распределив прерывания c помощью утилиты rss-ladder.

{code}
rss-ladder eth1
menu->Reductor DPI X->Прочие настройки->Включить RSS для сетевых карт
{code}

Используйте разные ядра (cores), гипертрединг лучше выключить, с ним легко получить неоптимальные настройки.
Далее выйти с сохранением настроек.

h5. Многопроцессорные системы
h5. Шаг 2. Проверить запись в mirror_info.conf

Если в системе больше одного физического процессора, лучше распределять прерывания сетевой карты в пределах ядер её локальной NUMA-ноды. rss-ladder делает это автоматически. Число очередей лучше подстроить под число ядер одного физического процессора, по умолчанию их число часто равно общему числу ядер.
Открыть любым удобным для вас редактором ( например vim ) файл mirror_info.conf

Пример - поставим eth2 8 объединённых очередей.
{code}
vim /app/reductor/cfg/userinfo/mirror_info.conf
{code}

Убедиться в наличие соответствующей записи "mirror rss" напротив каждого указанного интерфейса.
{code}
ethtool -L eth2 combined 8
eth1 - - mirror rss
{code}

Очереди бывают combined или отдельные tx и rx, зависит от модели и драйвера сетевой карты.
h5. Шаг 3. Рестарт редуктора

Не все многопроцессорные системы поддерживают NUMA, иногда память является общей для обоих процессоров и для сетевых карт.

h5. Пример для Carbon Reductor 8

Мы не используем автоматическую настройку RSS, т.к. в редких ситуациях это приводит к зависанию сетевой карты. Так что настраивать это необходимо вручную:

Создаем сам файл-хук: `/app/reductor/cfg/userinfo/hooks/start.sh`

В него добавляем следующее содержимое:

{code}
#!/bin/bash

client_post_start_hook() {
rss-ladder eth0 || true
rss-ladder eth1 || true
}
/app/reductor/service restart
{code}

и делаем файл исполнимым: `chmod a+x /app/reductor/cfg/userinfo/hooks/start.sh`.

h4. Отложенные прерывания

* использовать распределение нагрузки с помощью RPS, используя для захвата одно ядро (экспериментальная опция fwboost: isolated rss).

h4. Большое число VLAN

При большом количестве VLAN создаётся большое количество правил iptables в цепочке iptables \-t raw \-nvL PREROUTING.

Их число можно сократить, перечислив через пробел интерфейсы с большим числом VLAN-тегов в опции: menu \-> Reductor DPI X \-> Настройки алгоритма фильтрации \-> Интерфейсы с большим количеством VLAN.

Опция позволяет добиться 1-3% прироста производительности.




h3. Различные значения rx-usecs




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

h2. Сеть провайдера

h3. Отправлять меньше трафика

Проанализируйте что вы отправляете в зеркало. Возможно там есть что-то лишнее.

# Иногда один и тот же трафик попадает в зеркало дважды — инкапсулированным и чистым, в таком случае от инкапсулированного можно избавиться.
# Возможно отправляется трафик в обоих направлениях, а достаточно только исходящего.
# Возможно там есть лишние VLAN'ы с служебным трафиком, а Carbon Reductor анализирует только часть.
# Если зеркал трафика несколько, можно балансировать отправку, указывая порты коммутатора, с которых оно снимается (в случае "перекосов").

h3. Масштабирование