контрольные группы
Оригинальный автор(ы) | v1: Пол Менадж, Рохит Сет, контроллер памяти Бальбира Сингха, контроллер ЦП Шриватса Ваддагири v2: Теджун Хо |
---|---|
Разработчик(и) | Теджун Хео, Йоханнес Вайнер, Михал Хоко, Вайман Лонг, Роман Гущин, Крис Даун и др. |
Первоначальный выпуск | 2007 г |
Написано в | С |
Операционная система | Линукс |
Тип | Системное программное обеспечение |
Лицензия | Лицензия GPL и LGPL |
Веб-сайт | Cгруппа v1 , Cгруппа v2 |
cgroups (сокращенно от control groups ) — это функция ядра Linux , которая ограничивает, учитывает и изолирует использование ресурсов (ЦП, память, дисковый ввод-вывод и т. д.). [1] ) набора процессов .
Инженеры Google начали работу над этой функцией в 2006 году под названием «контейнеры процессов». [2] В конце 2007 года номенклатура была изменена на «группы управления», чтобы избежать путаницы, вызванной множеством значений термина « контейнер » в контексте ядра Linux, а функциональность групп управления была объединена с основной линией ядра Linux в версии ядра 2.6.24. который был выпущен в январе 2008 года. [3] С тех пор разработчики добавили множество новых функций и контроллеров, например, поддержку kernfs в 2014 году. [4] брандмауэр , [5] и единая иерархия. [6] cgroup v2 была объединена с ядром Linux 4.5. [7] со значительными изменениями интерфейса и внутреннего функционала. [8]
Версии [ править ]
![]() | Этот раздел может потребовать очистки Википедии , чтобы соответствовать стандартам качества . Конкретная проблема: неполные описания и отсутствие ссылок. ( июнь 2016 г. ) |
Существует две версии cgroups.
Cgroups изначально была написана Полом Менажем и Рохитом Сетом и объединена с основным ядром Linux в 2007 году. Впоследствии она стала называться cgroups версии 1. [9]
Затем разработку и поддержку групп взял на себя Теджун Хео . Теджун Хео переработал и переписал контрольные группы. Эта переписанная версия теперь называется версией 2, документация по cgroup-v2 впервые появилась в ядре Linux 4.5, выпущенном 14 марта 2016 года. [7]
В отличие от версии 1, cgroup v2 имеет только одну иерархию процессов и различает процессы, а не потоки.
Особенности [ править ]
Одна из целей разработки cgroups — предоставить унифицированный интерфейс для множества различных вариантов использования с помощью nice : от управления отдельными процессами ( например, ) до полной виртуализации на уровне операционной системы (как это предусмотрено OpenVZ , Linux-VServer или LXC , например). Cgroups обеспечивает:
- Ограничение ресурсов
- группы могут быть настроены так, чтобы они не превышали настроенный предел памяти , который также включает в себя кэш файловой системы , [10] [11] Ограничение пропускной способности ввода-вывода, [12] ограничение квоты процессора, [13] Установленный лимит ЦП, [14] или максимальное количество открытых файлов . [15]
- Расстановка приоритетов
- некоторые группы могут получить большую долю использования процессора [16] или пропускная способность дискового ввода-вывода [17]
- Бухгалтерский учет
- измеряет использование ресурсов группой, что может использоваться, например, для целей выставления счетов [18]
- Контроль
- заморозка групп процессов, их контрольная точка и перезапуск [18]
Используйте [ править ]

Группа управления (сокращенно cgroup) — это совокупность процессов, связанных одними и теми же критериями и связанными с набором параметров или ограничений. Эти группы могут быть иерархическими, то есть каждая группа наследует ограничения своей родительской группы. Ядро обеспечивает доступ к множеству контроллеров (также называемых подсистемами) через интерфейс cgroup; [3] например, контроллер «памяти» ограничивает использование памяти, «cpuacct» учитывает использование ЦП и т. д.
Группы управления можно использовать несколькими способами:
- Доступ к виртуальной файловой системе cgroup вручную.
- Создавая группы и управляя ими на лету с помощью таких инструментов, как
cgcreate
,cgexec
, иcgclassify
(отlibcgroup
). - Через «демон механизма правил», который может автоматически перемещать процессы определенных пользователей, групп или команд в контрольные группы, как указано в его конфигурации.
- Косвенно через другое программное обеспечение, использующее cgroups, такое как Docker , Firejail , LXC , [19] libvirt , systemd , Open Grid Scheduler/Grid Engine , [20] и прекративший свое существование lmctfy от Google .
Документация ядра Linux содержит некоторые технические подробности установки и использования групп управления версии 1. [21] и версия 2. [22] systemd-cgtop
[23] Команда может использоваться для отображения верхних групп управления по использованию ими ресурсов.
Редизайн [ править ]
Редизайн групп начался в 2013 году. [24] с дополнительными изменениями, внесенными версиями ядра Linux 3.15 и 3.16. [25] [26] [27]
Изоляция пространства имен [ править ]
Хотя технически это не является частью работы cgroups, связанной особенностью ядра Linux является изоляция пространства имен , при которой группы процессов разделяются так, что они не могут «видеть» ресурсы в других группах. Например, пространство имен PID обеспечивает отдельное перечисление идентификаторов процессов в каждом пространстве имен. Также доступны пространства имен монтирования, пользователя, UTS, сети и SysV IPC.
- Пространство имен PID обеспечивает изоляцию для выделения идентификаторов процессов (PID), списков процессов и их сведений. Хотя новое пространство имен изолировано от других родственных ему пространств, процессы в его «родительском» пространстве имен по-прежнему видят все процессы в дочерних пространствах имен, хотя и с другими номерами PID. [28]
- Пространство сетевых имен изолирует контроллеры сетевых интерфейсов (физические или виртуальные), правила брандмауэра iptables , таблицы маршрутизации и т. д. Сетевые пространства имен можно соединить друг с другом с помощью виртуального Ethernet-устройства «veth». [29]
- Пространство имен «UTS» позволяет изменить имя хоста .
- монтирования Пространство имен позволяет создать другую структуру файловой системы или сделать определенные точки монтирования доступными только для чтения. [30]
- Пространство имен IPC System V изолирует межпроцессное взаимодействие между пространствами имен.
- Пространство имен пользователей изолирует идентификаторы пользователей между пространствами имен. [31]
- Пространство имен Cgroup [32]
Пространства имен создаются с помощью команды «unshare» или системного вызова или как «новые» флаги в системном вызове «клонирования». [33]
Подсистема «ns» была добавлена на ранних стадиях разработки cgroups для интеграции пространств имен и групп управления. Если контрольная группа «ns» была смонтирована, каждое пространство имен также создало бы новую группу в иерархии контрольных групп. Это был эксперимент, который позже был признан неподходящим для API cgroups и удален из ядра.
Пространства имен Linux были созданы на основе более общей функциональности пространств имен, широко используемой в Plan 9 от Bell Labs . [34]
Единая иерархия [ править ]
Kernfs был введен в ядро Linux с версией 3.14 в марте 2014 года, основным автором является Теджун Хео. [35] Одним из основных мотиваторов создания отдельной kernfs является файловая система cgroups. Kernfs в основном создается путем выделения части логики sysfs в независимый объект, что упрощает для других подсистем ядра реализацию их собственной виртуальной файловой системы с обработкой подключения и отключения устройств, динамического создания и удаления и других атрибутов. Редизайн продолжился и в версии 3.15 ядра Linux. [36]
Группы управления памятью ядра (kmemcg) [ править ]
Группы управления памятью ядра ( kmemcg ) были объединены в версию 3.8 (18 февраля 2013 г основной ветки ядра Linux . [37] [38] [39] Контроллер kmemcg может ограничивать объем памяти, которую ядро может использовать для управления своими внутренними процессами.
)осведомленность cgroup об убийце OOM [ править ]
В Linux Kernel 4.19 (октябрь 2018 г.) реализована осведомленность cgroup о реализации OOM killer , которая добавляет возможность уничтожать cgroup как единое целое и таким образом гарантировать целостность рабочей нагрузки. [40]
Принятие [ править ]
В качестве основы cgroups используют различные проекты, включая CoreOS , Docker (в 2013 году), Hadoop , Jelastic , Kubernetes , [41] lmctfy (позволь мне сохранить это для вас), LXC (контейнеры Linux), systemd , Mesos и Mesphere, [41] и HTCondor .
Его также приняли основные дистрибутивы Linux, такие как Red Hat Enterprise Linux (RHEL) 6.0, в ноябре 2010 года, за три года до принятия основным ядром Linux. [42]
29 октября 2019 года проект Fedora изменил Fedora 31 для использования CgroupsV2 по умолчанию. [43]
См. также [ править ]
- Реализации виртуализации на уровне операционной системы
- Группа процессов
- Tc (Linux) — утилита управления трафиком, немного перекрывающаяся по функционалу с настройками сетевой cgroup.
- Объект задания — эквивалентная концепция Windows , управляемая диспетчером объектов этой платформы.
Ссылки [ править ]
- ^ «Группа управления v2 — Документация по ядру Linux» . www.kernel.org . Проверено 24 июня 2023 г.
- ^ Джонатан Корбет (29 мая 2007 г.). «Технологические контейнеры» . LWN.net.
- ^ Jump up to: Перейти обратно: а б Джонатан Корбет (29 октября 2007 г.). «Записки из контейнера» . LWN.net . Проверено 14 апреля 2015 г.
Исходное название «контейнеров» было сочтено слишком общим — этот код является важной частью контейнерного решения, но это далеко не все. Таким образом, контейнеры теперь переименованы в «группы управления» (или «cgroups») и объединены в версию 2.6.24.
- ^ «cgroup: преобразовать в kernfs» . Список рассылки ядра Linux . 28 января 2014 г.
- ^ «netfilter: x_tables: сопоставление облегченной группы управления процессами» . 23 апреля 2014 г. Архивировано из оригинала 24 апреля 2014 г.
- ^ «cgroup: подготовиться к использованию единой иерархии по умолчанию» . 13 марта 2014 г.
- ^ Jump up to: Перейти обратно: а б «Документация/cgroup-v2.txt, появившаяся в ядре Linux 4.5» . 14 марта 2016 г.
- ^ «cgroup v2: несколько иерархий» .
- ^ «разница между ядром Linux 4.4 и 4.5» . 14 марта 2016 г.
- ^ Джонатан Корбет (31 июля 2007 г.). «Контроль использования памяти в контейнерах» . ЛВН.
- ^ Бальбир Сингх, Вайдинатан Шринивасан (июль 2007 г.). «Контейнеры: проблемы с контроллером ресурсов памяти и его производительностью» (PDF) . Оттавский симпозиум по Linux.
- ^ Карвальо, Андре. «Использование cgroups для ограничения ввода-вывода» . andrestc.com . Проверено 12 сентября 2022 г.
- ^ Луу, Дэн. «Проблема регулирования контейнера» . danluu.com . Проверено 12 сентября 2022 г.
- ^ Дерр, Саймон (2004). «ЦПУСЕТЫ» . Проверено 12 сентября 2022 г.
- ^ «setrlimit(2) — Страницы руководства Arch» . man.archlinux.org . Проверено 27 ноября 2023 г.
- ^ Джонатан Корбет (23 октября 2007 г.). «Пространство ядра: справедливое планирование пользователей для Linux» . Сетевой мир. Архивировано из оригинала 19 октября 2013 года . Проверено 22 августа 2012 г.
- ^ Камкамедзава Хирою (19 ноября 2008 г.). Cgroup и контроллер ресурсов памяти (PDF) . Японский симпозиум по Linux. Архивировано из оригинала (слайды презентации в формате PDF) 22 июля 2011 года.
- ^ Jump up to: Перейти обратно: а б Дэйв Хансен. Управление ресурсами (слайды презентации в формате PDF) . Фонд Linux.
- ^ Мэтт Хелсли (3 февраля 2009 г.). «LXC: Контейнерные инструменты Linux» . IBM DeveloperWorks.
- ^ «Интеграция групп Grid Engine» . Масштабируемая логика. 22 мая 2012 г.
- ^ "cгруппы" . ядро.org.
- ^ «Торвальдс/Линукс» . Гитхаб . 13 февраля 2022 г.
- ^ «Системд-cgtop» .
- ^ «Все о ядре Linux: редизайн Cgroup» . Linux.com . 15 августа 2013 года. Архивировано из оригинала 28 апреля 2019 года . Проверено 19 мая 2014 г.
- ^ «Единая иерархия групп управления в версии 3.16» . LWN.net . 11 июня 2014 г.
- ^ «Получить обновления cgroup для 3.15 от Tejun Heo» . ядро.орг . 3 апреля 2014 г.
- ^ «Получить обновления cgroup для 3.16 от Tejun Heo» . ядро.орг . 9 июня 2014 г.
- ^ Павел Емельянов, Кир Колышкин (19 ноября 2007 г.). «Пространства имен PID в ядре 2.6.24» . LWN.net.
- ^ Джонатан Корбет (30 января 2007 г.). «Сетевые пространства имен» . LWN.net.
- ^ Серж Э. Халлин, Рам Пай (17 сентября 2007 г.). «Применение пространств имен монтирования» . IBM DeveloperWorks.
- ^ Майкл Керриск (27 февраля 2013 г.). «Пространства имен в работе, часть 5: Пользовательские пространства имен» . lwn.net Информация о Linux из источника.
- ^ «LKML: Линус Торвальдс: Linux 4.6-rc1» .
- ^ Джанак Десаи (11 января 2006 г.). «Документация ядра Linux по unshare» .
- ^ «Использование пространств имен в Plan 9» . 1992. Архивировано из оригинала 6 сентября 2014 года . Проверено 15 февраля 2015 г.
- ^ «kernfs, sysfs, driver-core: реализовать синхронное самоудаление» . LWN.net . 3 февраля 2014 года . Проверено 7 апреля 2014 г.
- ^ «Дерево исходного кода ядра Linux: kernel/git/torvalds/linux.git: cgroups: преобразовать в kernfs» . ядро.орг . 11 февраля 2014 года . Проверено 23 мая 2014 г.
- ^ «memcg: инфраструктура контроллера kmem» . kernel.org Исходный код . 18 декабря 2012 г.
- ^ «memcg: базовая инфраструктура учета kmem» . kernel.org Исходный код . 18 декабря 2012 г.
- ^ «memcg: добавить документацию о контроллере kmem» . ядро.орг . 18 декабря 2012 г.
- ^ «Linux_4.19 — новички в ядре Linux» .
- ^ Jump up to: Перейти обратно: а б «Мезосфера перенесет Google Kubernetes в Месос» . Мезосфера.io. 10 июля 2014 года. Архивировано из оригинала 6 сентября 2015 года . Проверено 13 июля 2014 г.
- ^ «Примечания к выпуску 6.0» (PDF) . redhat.com . Проверено 12 сентября 2023 г.
- ^ «1732114 – Измените Fedora 31, чтобы использовать CgroupsV2 по умолчанию» .
Внешние ссылки [ править ]
- Официальная документация ядра Linux по cgroups v1 и cgroups v2.
- Руководство по управлению ресурсами Red Hat в cgroups
- Справочная страница Ubuntu по cgroups. Архивировано 9 августа 2021 г. на Wayback Machine.
- Пространства имен и контрольные группы ядра Linux, Рами Розен (2013).
- Пространства имен и cgroups, основа контейнеров Linux (включая cgroups v2) , слайды доклада Рами Розена, Netdev 1.1, Севилья, Испания, 2016
- Понимание нового API групп управления , LWN.net , Рами Розен, март 2016 г.
- Крупномасштабное управление кластерами в Google с Боргом , апрель 2015 г., Абхишек Верма, Луис Педроса, Мадукар Коруполу, Дэвид Оппенгеймер, Эрик Тьюн и Джон Уилкс.
- Объекты заданий , аналогичная функция в Windows.