TGViewer
Записки IT специалиста Записки IT специалиста @interface31 · 8.99K subscribers
Post #6672 2.06K
Тонкие настройки LXC. Процессор

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

Для примера возьмем задачу, когда у нас есть некоторый процессор 16 ядер / 32 потока и мы хотим разместить на нем сервер 1С, сервер СУБД и всяко-разно по мелочи.

Сервер 1С версии ПРОФ может использовать не более 12 ядер, но просто взять и указать в его настройках ограничение по ядрам мы не можем, потому что при старте контейнер будет выбирать ядра случайным образом, что ведет к изменению процессора и слету лицензии 1С.

Поэтому укажем ядра явно, для этого в конфигурационный файл /etc/pve/lxc/nnn.conf (где nnn – ID контейнера) добавим:

lxc.cgroup2.cpuset.cpus = 0-11


Это заставит его использовать 12 первых ядер. Ядра нумеруются начиная с нуля. Можно указывать отдельные номера через запятую или диапазон через тире, оба способа можно комбинировать. Например:

lxc.cgroup2.cpuset.cpus = 0, 1, 8-10,17-20


Серверу 1С ядра выделили, но остальные контейнеры, даже будучи ограниченными по количеству ядер могут использовать ядра совместно с сервером 1С, хотя у нас есть много еще свободных.

Поэтому явно указываем доступные ядра и для других машин, скажем 12-23 серверу СУБД и диапазон 24-31 для всех остальных.

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

Для этого используйте:

lxc.cgroup2.cpuset.mems: 0


Где цифра указывает номер узла NUMA начиная с нуля, можем указать несколько значений с нуля или через запятую.

Хорошо, когда ядер много и можно всем раздать, но как быть, если процессорные ресурсы делятся между несколькими контейнерами. В этом случае следует настроить лимиты. Как мы помним, процессорное время выделяется процессам порциями – тиками. Если тиков всем не хватает – собирается очередь.

Это ведет к росту LA, значение LA в 1 на ядро означает, что свободных тиков нет, а значение более единицы указывает на наличие очереди.

Начнем с гибкого лимита, который позволяет установить относительный приоритет процессов, для этого мы используем следующий параметр:

lxc.cgroup2.cpu.shares: 512


Число 512 указывает приоритет, он может принимать значение от 1 до 1024, значение по умолчанию – 1024. Таким образом контейнер со значением 512 в случае возникновения конкуренции за ресурсы получит в два раза меньше тиков, чем контейнер без этой настройки.

Если же тиков хватает всем, либо более привилегированный контейнер не проявляет большой активности, то ограничения не применяются. Но если вдруг ему снова потребуются ресурсы, то они будут выделены в первую очередь.

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

lxc.cgroup2.cpu.max: 50000 100000


Числа означают следующее: максимальное время использования ЦПУ, период в течении которого применяется ограничение в микросекундах. В приведенном примере мы выделили контейнеру половину процессорного ресурса. И он не сможет никогда его превысить, даже если процессор полностью простаивает.

Ну и наконец мы можем полностью закрепить ядро за контейнером, после чего ни один другой контейнер не сможет его использовать, если ядро занято хоть одним процессом назначенного ему контейнера.

Это позволяет обеспечить гарантированную производительность критичным сервисам.

lxc.cgroup2.cpuset.cpu_exclusive = 1


Этот параметр нужно обязательно сочетать с

lxc.cgroup2.cpuset.cpus = 0-3


При этом мы можем выделить контейнеру большее количество ядер, скажем 8, но в эксклюзивное использование ему перейдут только 4, а за остальные он будет конкурировать с другими контейнерами.
  • 👍 22
  • ❤ 3
  • 🤡 1
More from @interface31
  1. Sep 23, 2026DarkHost — хостинг и VDS для ваших проектов Размещайте сайты, интернет-магазины, приложени…
  2. Sep 22, 2026Post #6781
  3. Sep 22, 2026Debian или Ubuntu Нам достаточно часто задают вопрос: какой именно из этих дистрибутивов и…
  4. Sep 22, 2026Девопсы, сисадмины, архитекторы, техлиды (и вообще все, кто принимает технические или бизн…
  5. Sep 22, 2026Прекращена поддержка Debian 11 31 августа 2026 года поддержка дистрибутива Debian 11 прекр…
  6. Sep 22, 2026🚀 AI-Driven Digital Q: прямая трансляция новой ИИ-версии экосистемы для команд разработки…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →