|
Внимание! |
По умолчанию выставлено наиболее оптимальное значение 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!
Данный скрипт также запускается в процессе инициализации Продукта.