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

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

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

просмотр истории страницы
Многие сетевые карты имеют несколько очередей для входящих пакетов. Каждая очередь висит на ядре/списке ядер. На многих железках из коробки, несмотря на то, что в smp_affinity_list указан список 0-$cpucount все прерывания находятся на первом ядре процессора. Обойти это можно раскидав с помощью echo все прерывания на разные ядра.

Для систем с одним физическим процессором и сетевыми картами, использующими драйвера igb, ixgbe, vmxnet3 можно использовать утилиту netutils-linux.
В Carbon Reductor DPI X распределение прерываний осуществляется встроенными средствами.

Установка производится следующими командами:
{code}
yum install python-pip
pip install netutils-linux
{code}
h4. Включение из консоли:

Использование в контейнере reductor (для сетевого адаптера eth1):
h5. Шаг 1. Выбрать пункт "Включить RSS для сетевых карт"

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

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

По возможности используйте разные реальные ядра, допустим, дано:
h5. Шаг 2. Проверить запись в mirror_info.conf

- 1 процессор с гипертредингом
- 4 реальных ядра
- 8 виртуальных ядер
- 4 очереди сетевой карты, которые составляют 95% работы сервера
Открыть любым удобным для вас редактором ( например vim ) файл mirror_info.conf

Раскинуть их на 0, 1, 2 и 3 ядра будет не так эффективно, как на 0, 2, 4 и 6.
{code}
vim /app/reductor/cfg/userinfo/mirror_info.conf
{code}

Пример кода (не универсальный), который раскидывает 8 очередей на 8 ядер (довольно простой случай).
Строка "-TxRx" - по ней можно идентифицировать очереди сетевой карты принимающей зеркало трафика, может отличаться в зависимости от модели сетевой карты и драйвера, посмотреть как она выглядит можно в файле cat /proc/interrupts

Создаем сам файл-хук:

{panel}
/app/reductor/cfg/userinfo/hooks/start.sh
{panel}
В него добавляем следующее содержимое:

Убедиться в наличие соответствующей записи "mirror rss" напротив каждого указанного интерфейса.
{code}
eth1 - - mirror rss
#!/bin/bash {code}

client_post_start_hook(){
rss-ladder eth1 0
rss-ladder eth0 1
}
client_post_start_hook
{code}
{info}