Изоляция ядер для оптимизации производительности
По умолчанию ядра CPU, работающие с сетевыми портами, используются и другими подсистемами.
Это может снижать производительность и вызывать всплески Input Errors pps/bps
на
графиках Port extX/intX
. Можно снять часть нагрузки с этих ядер, запретив
некритичным подсистемам выполняться на них.
Для этого:
-
В опциях ядра пропишите изоляцию ядер обработчика пакетов через параметры
isolcpus=...
иrcu_nocbs=...
. Также рекомендуется добавитьmitigations=off
для отключения патчей безопасности ядра. -
В
.env
добавьте параметры:DATA_PLANE_CPUS
— список ядер, выделенных под обработчик пакетов (dataplane);CONTROL_PLANE_CPUS
— список ядер, выделенных под остальные подсистемы (все остальные ядра).
-
Скачайте
docker-compose.cpuisol.yml
, применяющий параметрcpuset
для всех подсистем:wget https://docs.mitigator.ru/master/dist/docker-compose.cpuisol.yml -O /srv/mitigator/docker-compose.cpuisol.yml
-
Добавьте его в список
COMPOSE_FILE
в.env
:COMPOSE_FILE=docker-compose.yml:docker-compose.cpuisol.yml
Пример
- Сервер с двумя CPU по 10 физических ядер с HyperThreading — всего 40 логических ядер:
CPU0: 0-9,20-29
CPU1: 10-19,30-39
- Под dataplane выделены все ядра кроме одного с каждого CPU, включая HT-пары:
0-8,10-18,20-28,30-38
- Оставшиеся ядра отданы остальным подсистемам:
9,19,29,39
Настройка grub
:
GRUB_CMDLINE_LINUX_DEFAULT="... isolcpus=0-8,10-18,20-28,30-38 rcu_nocbs=0-8,10-18,20-28,30-38 mitigations=off"
Настройка .env
:
DATA_PLANE_CPUS=0-8,10-18,20-28,30-38
CONTROL_PLANE_CPUS=9,19,29,39