Cgroups

Механизм ядра Linux для ограничения, учета и изоляции ресурсов (CPU, память, ввод-вывод) групп процессов.

Cgroups (control groups) — это подсистема ядра Linux, предназначенная для распределения аппаратных ресурсов между процессами. Она позволяет объединять задачи в иерархические группы и применять к ним политики управления. В отличие от namespaces, которые изолируют видимость ресурсов, cgroups контролируют их фактическое потребление.

Механизм работы

Управление осуществляется через виртуальную файловую систему (обычно /sys/fs/cgroup). Ядро предоставляет контроллеры для разных типов ресурсов:

  • cpu — ограничение весов планировщика или времени выполнения;
  • memory — лимиты на использование ОЗУ и swap;
  • blkio — квоты на скорость чтения/записи диска.

Технология критически важна для контейнеризации. Например, Docker использует cgroups для того, чтобы один контейнер не мог занять всю память хоста, вызывая срабатывание OOM Killer для соседних процессов. В версии cgroup v2 реализована единая иерархия, что устранило конфликты между контроллерами ресурсов, характерные для первой версии.