Что такое cgroups v2 и чем они отличаются от cgroups v1
В Linux за изоляцию процессов отвечают namespaces, но сами по себе они не решают проблему потребления ресурсов. Процесс может быть полностью изолирован, но при этом занять всю оперативную память или загрузить CPU на 100%.
Для управления ресурсами в Linux существует механизм Control Groups (cgroups). В этой статье мы сфокусируемся именно на cgroups v2 — современной версии подсистемы, которая используется в актуальных дистрибутивах и контейнерных средах.
Практическую работу с лимитами CPU, памяти и I/O через systemd мы уже подробно разбирали в отдельной статье — «Как ограничить ресурсы процессов в Linux с помощью cgroups и systemd». Здесь же разберём архитектуру, отличия версий и ключевые принципы работы cgroups v2.
Зачем понадобились cgroups v2
Первая версия cgroups (v1) появилась давно и со временем обросла сложностями:
- каждый контроллер имел собственную иерархию;
- один и тот же процесс мог находиться в разных cgroup-деревьях;
- поведение лимитов было не всегда предсказуемым;
- конфигурации становились трудно поддерживаемыми.
В больших системах это приводило к путанице и ошибкам. Поэтому была разработана cgroups v2 — переработанная архитектура с более строгими и понятными правилами.
Главное отличие cgroups v2 от v1
Ключевая идея cgroups v2 — единая иерархия.
В v2:
- все контроллеры работают в одном дереве;
- процесс принадлежит только одной cgroup;
- правила наследования лимитов становятся очевидными;
- поведение ограничений более предсказуемо.
Это значительно упрощает администрирование и делает систему более надёжной.
Единое дерево cgroups
В cgroups v2 всё управление ресурсами происходит через единое дерево, расположенное в:
/sys/fs/cgroup
Каждый каталог в этом дереве — это отдельная группа процессов.
Лимиты, заданные на верхнем уровне:
- наследуются дочерними группами;
- могут быть уточнены или ужесточены ниже по дереву.
Такой подход хорошо сочетается с иерархической моделью systemd и контейнерных runtime.
Контроллеры в cgroups v2
В cgroups v2 контроллеры включаются явно для каждой группы. Основные из них:
- cpu — управление процессорным временем;
- memory — контроль оперативной памяти и swap;
- io — ограничения дискового ввода/вывода;
- pids — лимит на количество процессов.
Важно: контроллер должен быть активирован в родительской группе, прежде чем его можно использовать в дочерней.
Как работает ограничение ресурсов
В отличие от v1, где настройки могли конфликтовать, cgroups v2 вводят строгие правила:
- лимиты всегда применяются сверху вниз;
- дочерняя группа не может превысить лимиты родителя;
- ядро гарантирует консистентность ограничений.
Это делает поведение системы более понятным и упрощает отладку проблем с ресурсами.
cgroups v2 и systemd
Systemd изначально проектировался с учётом cgroups и в современных системах является основным интерфейсом для работы с ними.
Каждый systemd-сервис:
- запускается в собственной cgroup;
- наследует ограничения от slice-юнитов;
- может иметь индивидуальные лимиты ресурсов.
Именно благодаря cgroups v2 systemd способен централизованно управлять ресурсами всей системы.
cgroups v2 и контейнеры
Docker, containerd и Kubernetes используют cgroups v2 для:
- ограничения ресурсов контейнеров;
- предотвращения взаимного влияния сервисов;
- защиты хоста от перегрузки.
Когда вы задаёте лимиты контейнеру, runtime просто транслирует их в параметры cgroups.
Контейнеры не используют «магии» — это те же самые механизмы ядра Linux.
Почему важно понимать cgroups v2
Даже если вы не работаете напрямую с /sys/fs/cgroup, понимание принципов cgroups v2 помогает:
- корректно задавать лимиты в systemd и Docker;
- разбираться в причинах OOM и throttling;
- проектировать стабильные продакшен-системы;
- понимать, как Linux управляет ресурсами под нагрузкой.
Итог
cgroups v2 — это современная и упрощённая архитектура управления ресурсами в Linux:
- единая иерархия вместо множества деревьев;
- предсказуемое наследование лимитов;
- тесная интеграция с systemd и контейнерами;
- надёжная основа для многосервисных систем.
Если вам нужна практическая настройка лимитов CPU, памяти и I/O, рекомендуем обратиться к статье «Как ограничить ресурсы процессов в Linux с помощью cgroups и systemd», где эти механизмы разобраны на реальных примерах.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний