Cgroups (control groups) — механизм ядра Linux, который ограничивает и изолирует ресурсы компьютера (процессор, память, ввод/вывод дисковой подсистемы и т. п.) для группы процессов. Разработка была начата инженерами Google (Paul Menage и Rohit Seth) в 2006 и первоначально называлась «контейнеры процессов» (process containers);[1], однако позднее, в 2007, была переименована в Cgroups (Control Groups) по причине неоднозначности значения термина «контейнер» в ядре Линукса и появилась в официальной версии ядра 2.6.24.[2] С тех пор система разрослась и в cgroups было добавлено много новых возможностей.
Одна из целей создания cgroups была предоставить единый интерфейс к целому спектру функциональности, начиная с контроля единичного процесса (а-ля nice) до полной виртуализации на уровне системы operating system-level virtualization (как у OpenVZ, Linux-VServer, LXC). Cgroups предоставляет следующие возможности:
Ограничение ресурсов (Resource limiting): использование памяти, в том числе и для page cache.[3]
Приоритезация: разным группам можно выделить разное количество процессорного ресурса[4] и пропускной способности подсистемы ввода-вывода.[5]
Учёт: подсчёт расхода тех либо иных ресурсов группой.[6]
Изоляцию: отдельный namespaces для групп, так, что одна группа не видит процессы, сетевые соединения и файлы другой .[2]
Управление: заморозку (freezing) групп, создание контрольных точек (checkpointing) и их перезагрузку.[6]
Использование
Cgroup это коллекция процессов, объединённых по некоторому критерию. Группировка может быть иерархической с наследованием лимитов родительской группы. Ядро Linux предоставляет доступ ко множеству так называемых контроллеров (подсистем) через интерфейс cgroup.[2] например, контроллер памяти ограничивает её использование, «cpuacct» учитывает использование процессорного времени и т.д.
Cgroups управляются различными способами:
Через доступ к виртуальной файловой системе cgroup (по типу /proc) напрямую
Утилитами cgcreate, cgexec, cgclassify (из libcgroup)
Используя «rules engine daemon», который автоматически перемещает процессы определённых пользователей, групп или команд в cgroups согласно конфигурации