cpu_distribution

 

Внимание!

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

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

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

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

 

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

<NIC0>,<NIC1>,...:<irq cores>/<working cores>

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

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

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

 

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

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

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

 

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

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

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

      <irq cores> ≤ <working cores>

 

Пример для однопроцессорной системы:

cpu_distribution=*:2/10

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

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

 

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

cpu_distribution=*:2/18

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

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