Cgroups

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Unified hierarchy cgroups и systemd.

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 согласно конфигурации
  • Косвенно через другой софт, использующий cgroups, например виртуализатор Linux Containers (LXC),[7] libvirt, systemd, и Open Grid Scheduler/Grid Engine.[8]

Документация по ядру Линукс[9] содержит описание установки и использования cgroups.

См. также[править | править исходный текст]

Примечания[править | править исходный текст]

  1. Jonathan Corbet. Process containers, LWN.net (29 мая 2007).
  2. 1 2 3 Jonathan Corbet. Notes from a container, LWN.net (29 октября 2007).
  3. Jonathan Corbet. Controlling memory use in containers, LWN (31 июля 2007).
  4. Jonathan Corbet. Kernel space: Fair user scheduling for Linux, Network World (23 октября 2007). Проверено 22 августа 2012.
  5. Kamkamezawa Hiroyu (2008-11-19). "Cgroup and Memory Resource Controller" (PDF presentation slides)., Japan Linux Symposium. 
  6. 1 2 Dave Hansen. "Resource Management" (PDF presentation slides)., Linux Foundation. 
  7. Matt Helsley. LXC: Linux container tools, IBM developerWorks (3 февраля 2009).
  8. Grid Engine cgroups Integration. Scalable Logic (05-22-2012). Архивировано из первоисточника 26 января 2013.
  9. «cgroups», kernel.org, <http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt> 

Ссылки[править | править исходный текст]