Оптимизация

Изоляция ядер

По умолчанию ядра ЦП, работающие с сетевыми портами, используются и другими подсистемами. Это может снижать производительность и вызывать всплески Input Errors pps/bps на графиках Port extX/intX. Можно снять часть нагрузки с этих ядер, запретив некритичным подсистемам выполняться на них.

Пример.

  • Два CPU по 12 физических ядер с HyperThreading, итого 2×12×2 = 48 потоков.
  • Два порта сетевой карты обрабатываются ядрами 1, 2 (HT-парные: 25, 26).
  • Ядро 0 всегда занято служебными задачами (HT-парное: 24).
// data-plane.conf
worker_cores: 3-23,27-47

ext0: 0
  cores: 1
int0: 1
  cores: 2

Контейнерам graphite, fwstats, backend, watchhog и postgres можно задать cpuset: "3-23,27-47" в docker-compose.override.yml:

version: "2.2"
services:
  graphite:
    cpuset: "3-23,27-47"

  fwstats:
    cpuset: "3-23,27-47"

  backend:
    cpuset: "3-23,27-47"

  watchhog:
    cpuset: "3-23,27-47"

  postgres:
    cpuset: "3-23,27-47"

В данном случае набор ядер cpuset совпадает с набором worker_cores, но может быть и более узким. После внесения изменений нужно перезапустить Mitigator:

systemctl restart mitigator

Подробнее о параметре cpuset:

Чтобы не повторять 3-23,27-47 несколько раз, удобно в .env прописать:

CPUSET="2-23,27-47"

Далее можно использовать переменную в docker-compose.override.yml:

version: "2.2"
services:
  graphite:
    cpuset: "${CPUSET}"
  # и так далее для fwstats, backend, watchhog, postgres