Изоляция ядер для оптимизации производительности
По умолчанию ядра 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/v24.08/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