Cgroups

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 05:44, 1 сентября 2017.
Файл:Linux kernel unified hierarchy cgroups and systemd.svg
Унифицированная иерархия на основе cgroup и systemd.

Шаблон:Заголовок с маленькой буквы Cgroups (англ. control group) — механизм ядра Linux, который ограничивает и изолирует вычислительные ресурсы (процессорные, сетевые, ресурсы памяти, ресурсы ввода-вывода) для групп процессов. Механизм позволяет образовывать иерархические группы процессов с заданными ресурсными свойствами и обеспечивает программное управление ими.

История

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

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

Возможности

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

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

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

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

Управление в cgroups возможно различными способами:

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

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

Примечания

  1. Jonathan Corbet (2007-05-29). "Process containers". LWN.net. 
  2. 2,0 2,1 2,2 Jonathan Corbet (2007-10-29). "Notes from a container". LWN.net. 
  3. Jonathan Corbet (2007-07-31). "Controlling memory use in containers". LWN. 
  4. Jonathan Corbet (2007-10-23). "Kernel space: Fair user scheduling for Linux". Network World. Retrieved 2012-08-22. 
  5. Шаблон:Cite conference
  6. 6,0 6,1 Шаблон:Cite conference
  7. Matt Helsley (2009-02-03). "LXC: Linux container tools". IBM developerWorks. 
  8. "Grid Engine cgroups Integration". Scalable Logic. 05-22-2012. Archived from the original on 2013-01-26.  Check date values in: |date= (help)
  9. cgroups, kernel.org 

Ссылки