Контрольная группа (Linux)

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
Унифицированная иерархия на основе контрольных групп и systemd

Контрольная группа (англ. control group, cgroups[1], cgroup[2]) — группа процессов в Linux, для которой механизмами ядра наложена изоляция и установлены ограничения на некоторые вычислительные ресурсы (процессорные, сетевые, ресурсы памяти, ресурсы ввода-вывода). Механизм позволяет образовывать иерархические группы процессов с заданными ресурсными свойствами и обеспечивает программное управление ими.

История

Разработка была начата инженерами Google Полом Менэджем (Paul Menage) и Рохитом Сетом (Rohit Seth) в 2006 году и первоначально называлась «контейнеры процессов» (англ. process containers)[3]. В 2007 году проект был переименован в сgroups (от англ. control groups) по причине неоднозначности значения термина «контейнер» в ядре Linux.

Начиная с версии 2.6.24 ядра Linux технология включена в официальные версии ядра[4]. С этого момента разработка значительно активизировалась, в механизм добавлено много дополнительных возможностей, механизм существенным образом используется в технологии инициализации systemd, а также является ключевым элементом в реализации системы виртуализации на уровне операционной системы LXC.

Возможности

Одна из целей механизма — предоставить единый программный интерфейс к целому спектру средств управления процессами, начиная с контроля единичного процесса (таких как, например, утилита nice) вплоть до полной виртуализации на уровне системы (как у OpenVZ, Linux-VServer[англ.], LXC). Механизм предоставляет следующие возможности:

  • ограничение ресурсов (англ. resource limiting): использование памяти, в том числе виртуальной[5];
  • приоритизацию: разным группам можно выделить разное количество процессорного ресурса[6] и пропускной способности подсистемы ввода-вывода[7];
  • учёт: подсчёт затрат тех либо иных ресурсов группой[8];
  • изоляцию: разделение пространств имён для групп таким образом, что одной группе недоступны процессы, сетевые соединения и файлы другой[4];
  • управление: приостановку (freezing) групп, создание контрольных точек (checkpointing) и их перезагрузку[8].

Использование

Контрольная группа (cgroup) — набор процессов, объединённых по некоторым признакам, группировка может быть иерархической с наследованием ограничений и параметров родительской группы. Ядро Linux предоставляет доступ ко множеству так называемых контроллеров (подсистем) через интерфейс cgroup[4], например, контроллер «memory» ограничивает использование оперативной памяти, контроллер «cpuacct» учитывает использование процессорного времени.

Управление контрольными группами возможно различными способами:

  • через доступ к виртуальной файловой системе cgroup (по типу /proc) напрямую;
  • утилитами cgcreate, cgexec, cgclassify (из libcgroup);
  • используя демон механизма правил (англ. rules engine daemon), который автоматически перемещает процессы определённых пользователей, групп или команд в cgroups согласно конфигурации;
  • косвенно через другие программные средства, использующие контрольные группы, например, через системы контейнеризации LXC[9] и Docker, библиотеку libvirt, технологию инициализации systemd, кластерное управляющее программное обеспечение Grid Engine[10].

Описание установки и использования механизма включено в документацию ядра Linux.

Примечания

  1. Сокращение справедливо для версии 1
  2. Сокращение справедливо для версии 2
  3. Jonathan Corbet. Process containers, LWN.net (29 мая 2007). Архивировано 12 июня 2017 года. Дата обращения 29 декабря 2012.
  4. 4,0 4,1 4,2 Jonathan Corbet. Notes from a container, LWN.net (29 октября 2007). Архивировано 22 июня 2012 года. Дата обращения 29 декабря 2012.
  5. Jonathan Corbet. Controlling memory use in containers, LWN (31 июля 2007). Архивировано 29 января 2018 года. Дата обращения 29 декабря 2012.
  6. Jonathan Corbet. Kernel space: Fair user scheduling for Linux, Network World (23 октября 2007). Архивировано 19 октября 2013 года. Дата обращения 22 августа 2012.
  7. Kamkamezawa Hiroyu. Cgroup and Memory Resource Controller // [1]. — Japan Linux Symposium. Архивная копия от 22 июля 2011 на Wayback Machine
  8. 8,0 8,1 Dave Hansen. Resource Management // [2]. — Linux Foundation.
  9. Matt Helsley. LXC: Linux container tools, IBM developerWorks (3 февраля 2009). Архивировано 29 октября 2012 года. Дата обращения 29 декабря 2012.
  10. Grid Engine cgroups Integration (недоступная ссылка). Scalable Logic (22 мая 2012). Архивировано 26 января 2013 года.

Ссылки