Контрольная группа
(
англ.
control group
,
cgroups
,
cgroup
) — группа
процессов
в
Linux
, для которой механизмами
ядра
наложена изоляция и установлены ограничения на некоторые
(процессорные, сетевые, ресурсы памяти, ресурсы ввода-вывода). Механизм позволяет образовывать иерархические группы процессов с заданными ресурсными свойствами и обеспечивает программное управление ими.
Содержание
История
Разработка была начата инженерами
Google
Полом Менэджем (
Paul Menage
) и Рохитом Сетом (
Rohit Seth
) в 2006 году и первоначально называлась «контейнеры процессов» (
англ.
process containers
)
. В 2007 году проект был переименован в сgroups (от
англ.
control groups
) по причине неоднозначности значения термина «контейнер» в ядре Linux.
Начиная с версии 2.6.24 ядра Linux технология включена в официальные версии ядра
. С этого момента разработка значительно активизировалась, в механизм добавлено много дополнительных возможностей, механизм существенным образом используется в технологии инициализации
systemd
, а также является ключевым элементом в реализации системы виртуализации на уровне операционной системы
LXC
.
Возможности
Одна из целей механизма — предоставить единый программный интерфейс к целому спектру средств управления процессами, начиная с контроля единичного процесса (таких как, например, утилита
nice
) вплоть до
полной виртуализации на уровне системы
(как у
OpenVZ
,
,
LXC
). Механизм предоставляет следующие возможности:
приоритизацию: разным группам можно выделить разное количество процессорного ресурса
и пропускной способности подсистемы ввода-вывода
;
учёт: подсчёт затрат тех либо иных ресурсов группой
;
изоляцию: разделение
пространств имён
для групп таким образом, что одной группе недоступны процессы, сетевые соединения и файлы другой
;
управление: приостановку (
freezing
) групп, создание контрольных точек (
checkpointing
) и их перезагрузку
.
Использование
Контрольная группа (
cgroup
) — набор процессов, объединённых по некоторым признакам, группировка может быть иерархической с наследованием ограничений и параметров родительской группы. Ядро Linux предоставляет доступ ко множеству так называемых контроллеров (подсистем) через интерфейс cgroup
, например, контроллер «memory» ограничивает использование оперативной памяти, контроллер «cpuacct» учитывает использование процессорного времени.
Управление контрольными группами возможно различными способами:
через доступ к виртуальной файловой системе
cgroup
(по типу
/proc
) напрямую;
утилитами
cgcreate
,
cgexec
,
cgclassify
(из libcgroup);
используя демон механизма правил (
англ.
rules engine daemon
), который автоматически перемещает процессы определённых пользователей, групп или команд в cgroups согласно конфигурации;
косвенно через другие программные средства, использующие контрольные группы, например, через системы контейнеризации
LXC
и
Docker
, библиотеку
libvirt
, технологию инициализации
systemd
, кластерное управляющее программное обеспечение
Grid Engine
.
Описание установки и использования механизма включено в документацию ядра Linux.
Примечания
Сокращение справедливо для версии 1
Сокращение справедливо для версии 2
Jonathan Corbet (2007-05-29).
. LWN.net.
из оригинала
12 июня 2017
. Дата обращения:
29 декабря 2012
.
↑
Jonathan Corbet (2007-10-29).
. LWN.net.
из оригинала
22 июня 2012
. Дата обращения:
29 декабря 2012
.
Jonathan Corbet (2007-07-31).
. LWN.
из оригинала
29 января 2018
. Дата обращения:
29 декабря 2012
.
Jonathan Corbet (2007-10-23).
. Network World. Архивировано из
19 октября 2013
. Дата обращения:
22 августа 2012
.
Kamkamezawa Hiroyu (2008-11-19).
(PDF)
. Japan Linux Symposium. Архивировано из
(PDF presentation slides)
22 июля 2011
. Дата обращения:
29 декабря 2012
.
(неопр.)
. Дата обращения: 29 декабря 2012. Архивировано 22 июля 2011 года.
↑
Dave Hansen.
(PDF)
. Linux Foundation. Архивировано из
(PDF presentation slides)
9 октября 2011
. Дата обращения:
29 декабря 2012
.
Matt Helsley (2009-02-03).
. IBM developerWorks.
из оригинала
29 октября 2012
. Дата обращения:
29 декабря 2012
.
(неопр.)
. Scalable Logic (22 мая 2012). Архивировано из
26 января 2013 года.