Перейти к поиску
  1. Главная
  2. Продукты
  3. С-Терра Шлюз КВ
  4. Настройка С-Терра Шлюз КВ
  5. Общие настройки шлюза
  6. Настройка IPsec-драйвера
  7. Настройка параметров параллельной обработки сетевого трафика
  8. Настройка параметров рабочей очереди
  9. cpu_distribution

cpu_distribution

Поиск в комплекте Источник
cpu_distribution

Внимание!

По умолчанию выставлено наиболее оптимальное значение cpu_distribution. Изменять предустановленное значение cpu_distribution можно только по согласованию с вендором. При необходимости изменения данного параметра, обратитесь в службу технической поддержки support@s-terra.ru

Назначением параметра cpu_distribution является оптимизация доступа к памяти и кешам процессоров при обработке трафика, минимизация переключения контекстов нитей ядра Linux, а также более эффективное распределение вычислительной мощности многопроцессорной системы между задачами обработки трафика. Многопроцессорные системы, использующие NUMA архитектуру, разделяют оперативную память между несколькими NUMA-узлами. К NUMA-узлу приписано некоторое число процессорных ядер. Доступ к памяти внутри своего NUMA-узла происходит гораздо быстрее, чем к памяти чужого узла. Поэтому целью настройки является обработка выделенного потока сетевого трафика в рамках одного NUMA узла: получение IP-пакета, выделение памяти под него и IPsec-обработка должна происходить на ядрах процессора, приписанных к одному узлу.

Ядра, выделенные для обработки прерываний, по возможности размещаются в разных NUMA-узлах. Каждому выделенному для обработки ядру соответствует своя рабочая очередь. В случае переполнения своей очереди, трафик будет помещаться в самую свободную "чужую" очередь (если такая найдется), при этом возможна потеря производительности.

Привязка прерываний позволяет добиться большей эффективности обработки т.к. для обработки пакета будет использована очередь, находящаяся в контексте NUMA и кеша процессора, на котором произошло прерывание. Кроме того, привязка прерываний обеспечивает возможность параллельной обработки прерываний при значении числа процессорных ядер два и более.

Параметр cpu_distribution имеет следующий формат:

[*]:<irq cores>/<working cores>

  • Параметр до “:” определяет выполнять или не выполнять привязку прерываний от сетевых интерфейсов к процессорам.

Если указать “*”', тогда привязываются все прерывания интерфейсов. Драйвер отслеживает события, связанные с состоянием интерфейсов (up/down), и динамически выставляет настройки в /proc/irq/<irq_num>/smp_affinity для этих интерфейсов.

Если ничего не указать (т. е. ничего перед символом “:”), тогда привязка прерываний к процессорам не выполняется, и прерывания сетевых интерфейсов распределятся в соответствии с алгоритмом назначения прерываний Linux. В таком случае файлы /proc/irq/<irq_num>/smp_affinity не будут модифицированы, что вызовет снижение производительности подсистемы обработки пакетов драйвером.

При значении <irq_cores> = 0 привязка прерываний осуществляется ко всем процессорам одновременно.

Так же есть возможность задать список контролируемых сетевых интерфейсов, для которых будет настраиваться распределение прерываний по CPU (<NIC0>,<NIC1>,...:<irq cores>/<working cores>).

  • <irq cores> - число процессорных ядер, полностью выделенных под обработку прерываний сетевых интерфейсов.

<irq_cores> = 0 используется для распределения прерываний по умолчанию. Задействованы все доступные ядра процессора для обработки прерываний сетевых интерфейсов.

<irq cores> = 1 одно выделенное ядро для прерываний. (Задаётся только количество процессорных ядер, номера задействованных ядер будут подобраны автоматически.)

<irq cores> может начинается с символа '#', после которого явно должны быть указаны номера процессорных ядер (#0,1,2,3...).

  • <working cores> - количество рабочих ниток, число процессорных ядер, используемых для IPsec обработки. Количество <working cores> должно быть больше или быть равным количеству <irq cores>. Рекомендуется указывать значение, кратное <irq cores>, в этом случае обеспечится равномерное распределение процессорных ядер по обслуживаемым очередям. Количество <working cores> не может превышать количество доступных процессорных ядер, не выбранных как <irq cores>.

<working cores> может иметь значение "*", которое означает "использовать все доступные ядра, за исключением ядер прерываний <irq cores>". При этом, в качестве <irq cores> должно быть выбрано не более половины всех доступных процессорных ядер, в противном случае не все <irq cores> смогут быть сгруппированы с <working cores> (одно ядро из <working cores> может быть сгруппировано только с одним из <irq cores>).

<working cores> может начинается с символа '#', после которого явно должны быть указаны номера рабочих ниток (#0,1,2,3...). При использовании записи такого вида дополнительно появляется возможность сгруппировывать процессорные ядра из <working cores> с рабочей нитью из <irq cores>. Для группировки используется запить формата W~I, где W - номер ядра из <working cores>, а I - номер ядра из <irq cores>, например:

cpu_distribution=*:10/#1~2,3~4,5

где ядро с номером 5 из <working cores> будет сгруппировано с каким-либо автоматически выбранным из <irq cores>.

Значения по умолчанию:

  • Если явно не задавать cpu_distribution и число процессорных ядер 3 и более, принимается значение *:1/*
  • Если явно не задавать cpu_distribution и число процессорных ядер 2 или одно, принимается значение *:0/*

Ограничения на значения в cpu_distribution

  • <irq cores> < число процессорных ядер
  • <irq cores> + <working cores> ≤ число процессорных ядер
  • <irq cores> ≤ <working cores>

Пример 1 (однопроцессорная система):

cpu_distribution=*:2/10

В данном случае выполняется привязка прерываний от всех сетевых интерфейсов к нулевому и первому ядрам процессора (irq cores = 2).

Количество рабочих ниток будет равно 10.

Пример 2 (двухпроцессорная система):

cpu_distribution=*:2/18

В данном случае выполняется привязка прерываний от всех сетевых интерфейсов к нулевым ядрам первого и второго процессора (irq cores = 2).

Количество рабочих ниток будет равно 18 (по девять на каждом процессоре).

Пример 8 irq ядер и 24 work:

cpu_distribution=*:#16,17,18,19,20,21,22,23/#24~16,25~17,26~18,27~19,28~20,29~21,30~22,31~23,48~16,49~17,50~18,51~19,52~20,53~21,54~22,55~23,56~16,57~17,58~18,59~19,60~20,61~21,62~22,63~23

Просмотр номеров используемых ядер:

Для просмотра номеров ядер, отвечающих за прерывания (irq), выполните команду:

cat /proc/sys/agent/cpu/irq

Для просмотра номеров рабочих ядер (work), выполните команду:

cat /proc/sys/agent/cpu/work

Для просмотра номеров свободных ядер (free), выполните команду:

cat /proc/sys/agent/cpu/free

Сброс настроек:

Для сброса параметра cpu_distribution к значению по умолчанию используется скрипт /opt/VPNagent/bin/reset_product_settings.sh:

root@sterragate:~# /opt/VPNagent/bin/reset_product_settings.sh

SUCCESS: Operation was successful.

Success!

Данный скрипт также запускается в процессе инициализации Продукта.