На встрече с преподавателями СПбГУТ им. Бонч-Бруевича был момент, когда один из них заинтересовался настолько, что попросил рассказать об этом студентам отдельной темой: «Я не слышал, чтобы cgroups внедряли в виртуализацию». Приём действительно редкий — и именно он позволяет управлять ресурсами виртуальных машин плотнее, чем умеет классическая переподписка. Разберём, о чём речь.

Классический способ: overcommit (переподписка)

Стандартный механизм управления ресурсами в любой виртуализации — overcommit, или переподписка. Идея проста: вы выделяете виртуальным машинам в сумме больше vCPU и памяти, чем физически есть на сервере, в расчёте на то, что не все ВМ нагружены одновременно.

Например, на сервере 32 физических ядра, а вы раздаёте 50 vCPU между десятком ВМ. Пока пиковые нагрузки не совпадают — всё работает. Переподписка экономит железо, но у неё есть предел: это управление «грубыми» единицами — целыми vCPU и гигабайтами памяти. Тонко ограничить отдельную ВМ «вот настолько и не больше» классический overcommit не позволяет.

Что добавляет cgroups

cgroups (control groups) — это механизм ядра Linux, который позволяет объединять процессы в группы и жёстко лимитировать, сколько ресурсов каждая группа может потребить: доля процессорного времени, объём памяти, пропускная способность диска и сети. Изначально cgroups — инструмент контейнеров и системного администрирования, и его действительно редко применяют к управлению виртуальными машинами.

В платформе Inscale, помимо стандартной переподписки CPU и памяти, управление ресурсами реализовано на уровне cgroups виртуальных машин:

«Фичу, которая на уровне cgroups виртуальных машин обеспечивает управление вплоть до выделения не только потоков, но и того, сколько гигагерц, условно, в рамках одного потока можно выделять».

Простыми словами: вы управляете не только тем, *сколько* vCPU получит ВМ, но и тем, *насколько мощным* будет каждый поток — вплоть до доли гигагерц. Это уровень детализации, которого классическая переподписка не даёт.

Зачем такая точность на практике

Тонкое управление ресурсами через cgroups решает несколько задач:

  • Жёсткие SLA. Критичной ВМ можно гарантировать ресурсный пул, который у неё никто не «отъест» под пиковой нагрузкой соседей.
  • Плотная упаковка. На одном сервере можно безопаснее разместить больше ВМ, потому что лимиты заданы точнее и «шумный сосед» не утащит весь процессор.
  • Учебные и тестовые стенды. Можно выдать каждой студенческой или тестовой ВМ ровно столько ресурсов, сколько нужно для задачи, — и не больше, чтобы один стенд не положил остальные.

Именно последний сценарий особенно ценен для вузов, которым мы бесплатно даём платформу для практики: на скромном железе кафедры важно нарезать ресурсы плотно и предсказуемо.

Почему это «приём, которого нет у других»

Преподаватель не случайно назвал cgroups в виртуализации редким приёмом. Большинство платформ ограничиваются переподпиской CPU и памяти — это проще и привычнее. Управление ресурсами через cgroups требует более глубокой интеграции с ядром, зато даёт администратору рычаги, которых в обычной модели просто нет.

Это часть нашей общей логики: ядро виртуализации мы взяли проверенное (KVM/QEMU), а слой управления построили заново, чтобы владеть кодом и добавлять подобные нестандартные возможности. Подробнее об этой архитектуре «одно ядро — свой Control Plane» — в разборе российского гипервизора на базе KVM и в материале про то, из чего состоит платформа виртуализации.

Коротко

Классический overcommit управляет ресурсами грубо — целыми vCPU и гигабайтами. cgroups позволяет управлять ресурсами виртуальных машин тоньше: задавать не только число потоков, но и их мощность вплоть до доли гигагерц. В платформе Inscale это работает поверх стандартной переподписки и даёт плотную, предсказуемую упаковку нагрузок. Хотите попробовать, как это настраивается, — запросите демо-доступ.