Cgroups (control groups) — это подсистема ядра Linux, предназначенная для распределения аппаратных ресурсов между процессами. Она позволяет объединять задачи в иерархические группы и применять к ним политики управления. В отличие от namespaces, которые изолируют видимость ресурсов, cgroups контролируют их фактическое потребление.
Механизм работы
Управление осуществляется через виртуальную файловую систему (обычно /sys/fs/cgroup). Ядро предоставляет контроллеры для разных типов ресурсов:
cpu— ограничение весов планировщика или времени выполнения;memory— лимиты на использование ОЗУ и swap;blkio— квоты на скорость чтения/записи диска.
Технология критически важна для контейнеризации. Например, Docker использует cgroups для того, чтобы один контейнер не мог занять всю память хоста, вызывая срабатывание OOM Killer для соседних процессов. В версии cgroup v2 реализована единая иерархия, что устранило конфликты между контроллерами ресурсов, характерные для первой версии.