Многие сетевые карты имеют несколько очередей для входящих пакетов. Каждая очередь висит на ядре/списке ядер. На многих железках из коробки, несмотря на то, что в smp_affinity_list указан список 0-$cpucount все прерывания находятся на первом ядре процессора. Обойти это можно раскидав с помощью echo все прерывания на разные ядра.
В Carbon Reductor DPI X распределение прерываний осуществляется встроенными средствами. Например, для сетевого адаптера eth1:
chroot /app/reductor rss-ladder eth1
Для многопроцессорных систем настройку лучше производить вручную.
По возможности используйте разные реальные ядра, допустим, дано:
- 1 процессор с гипертредингом
- 4 реальных ядра
- 8 виртуальных ядер
- 4 очереди сетевой карты, которые составляют 95% работы сервера
Раскинуть их на 0, 1, 2 и 3 ядра будет не так эффективно, как на 0, 2, 4 и 6.
Пример кода (не универсальный), который раскидывает 8 очередей на 8 ядер (довольно простой случай).
Строка "-TxRx" - по ней можно идентифицировать очереди сетевой карты принимающей зеркало трафика, может отличаться в зависимости от модели сетевой карты и драйвера, посмотреть как она выглядит можно в файле cat /proc/interrupts
Создаем сам файл-хук:
/app/reductor/cfg/userinfo/hooks/start.sh
Добавляем права на выполнение:
chmod a+x /app/reductor/cfg/userinfo/hooks/start.sh
В него добавляем следующее содержимое:
#!/bin/bash client_post_start_hook(){ rss-ladder eth1 || true return 0 } client_post_start_hook
При использовании многопроцессорных систем (с двумя и более физическими процессорами) распределять прерывания лучше по нескольким процессорам для разных сетевых адаптеров, будь то адаптеры под зеркало или зеркало и внешний интерфейс. |