Исходный автор (ы) | v1: Пол Менедж, Рохит Сет. v2: Теджун Хео |
---|---|
Разработчик (и) | Теджун Хео, Йоханнес Вайнер, Михал Хоко, Вайман Лонг, Роман Гущин, Крис Даун и др. |
Первый выпуск | 2007 г.; 13 лет назад (2007) |
Написано на | C |
Операционная система | Linux |
Тип | Системное программное обеспечение |
Лицензия | GPL и LGPL |
Веб-сайт | www.kernel.org / doc / Documentation / cgroup-v1 / для v1 и www.kernel.org / doc / Documentation / cgroup-v2.txt для v2 |
cgroups (сокращенно от control groups ) - это функция ядра Linux, которая ограничивает, учитывает и изолирует использование ресурсов (ЦП, память, дисковый ввод-вывод, сеть и т. д.) коллекции процессы.
Инженеры Google (в первую очередь и) начали работу над этой функцией в 2006 году под названием «контейнеры процессов». В конце 2007 года номенклатура была изменена на «контрольные группы», чтобы избежать путаницы, вызванной множеством значений термина «контейнер » в контексте ядра Linux, а функциональные возможности контрольных групп были объединены в Linux. kernel mainline в версии ядра 2.6.24, выпущенной в январе 2008 года. С тех пор разработчики добавили много новых функций и контроллеров, таких как поддержка kernfs в 2014 году, firewalling и единой иерархии. cgroup v2 была объединена с ядром Linux 4.5 со значительными изменениями интерфейса и внутренней функциональности.
Есть две версии контрольных групп.
Cgroups были первоначально написаны Полом Менеджем и Рохитом Сетом и включены в ядро Linux в 2007 году. Впоследствии это называется cgroups version 1.
Затем разработка и обслуживание cgroups были взяты на себя. Теджун Хо переработал и переписал контрольные группы. Эта перезапись теперь называется версией 2, документация по cgroups-v2 впервые появилась в ядре Linux 4.5, выпущенном 14 марта 2016 года.
В отличие от v1, cgroup v2 имеет только одну иерархию процессов и различает процессы, а не потоки.
Одна из целей разработки контрольных групп - предоставить единый интерфейс для множества различных вариантов использования, от управления отдельными процессами (с помощью nice, например) до полной виртуализации на уровне операционной системы (как предусмотрено OpenVZ, Linux-VServer или LXC, для пример). Cgroups обеспечивает:
Контрольная группа (сокращенно cgroup) - это совокупность процессов, которые связаны одними и теми же критериями и связаны с набором параметров или ограничений. Эти группы могут быть иерархическими, что означает, что каждая группа наследует ограничения от своей родительской группы. Ядро предоставляет доступ к нескольким контроллерам (также называемым подсистемами) через интерфейс cgroup; например, контроллер «памяти» ограничивает использование памяти, «cpuacct» учитывает использование ЦП и т. д.
Управляющие группы могут использоваться несколькими способами:
Linux Документация ядра содержит некоторые технические подробности настройки и использования групп управления версии 1 и версии 2. Команда systemd-cgtop
может использоваться для отображения верхних групп управления по их использованию ресурсов.
Редизайн cgrou ps начался в 2013 году, с дополнительными изменениями, внесенными в версии ядра Linux 3.15 и 3.16.
Хотя технически это не является частью работы cgroups, связанная функция ядра Linux - это изоляция пространства имен, когда группы процессов разделены так, что они не могут «видеть» ресурсы в других группах. Например, пространство имен PID предоставляет отдельное перечисление идентификаторов процессов в каждом пространстве имен. Также доступны пространства имен mount, user, UTS, network и SysV IPC.
Пространства имен создаются с помощью команды «unshare» или системного вызова, или как новые флаги в системном вызове "clone".
Подсистема "ns" была добавлена на ранней стадии разработки cgroups для интеграции пространств имен и групп управления. Если была смонтирована контрольная группа "ns", каждое пространство имен также создавало бы новую группу в иерархии контрольных групп. Это был эксперимент, который позже был признан плохо подходящим для cgroups API и удален из ядра.
Пространства имен Linux были вдохновлены более общей функциональностью пространств имен, широко используемой в Plan 9 от Bell Labs.
Kernfs была введена в ядро Linux с версией 3.14 в марте 2014 г., главный автор - Теджун Хео. Одним из главных мотиваторов для отдельного kernfs является файловая система cgroups. Kernfs в основном создается путем разделения части логики sysfs на независимый объект, что упрощает для других подсистем ядра реализацию собственной виртуальной файловой системы с обработкой подключения и отключения устройств, динамического создания и удаления, и другие атрибуты. Редизайн продолжился в версии 3.15 ядра Linux.
Группы управления памятью ядра (kmemcg) были объединены в версию 3.8 (18 февраля 2013 г.; 7 лет назад ( 18-02-2013)) основной ветки ядра Linux. Контроллер kmemcg может ограничивать объем памяти, который ядро может использовать для управления собственными внутренними процессами.
ядро Linux 4.19 (октябрь 2018 г.) представила cgroup осведомленность о реализации OOM killer, которая добавляет возможность убивать cgroup как единое целое, что гарантирует целостность рабочей нагрузки.
Различные проекты используют cgroups в качестве своей основы, включая CoreOS, Docker (в 2013 г.), Hadoop, Jelastic, Kubernetes, lmctfy (Позвольте мне содержать это для вас), LXC (Контейнеры LinuX), systemd, Mesos и Mesosphere и HTCondor. Основные дистрибутивы Linux также приняли его, например, Red Hat Enterprise Linux (RHEL) 6.0 в ноябре 2010 года, три года спустя принятие основным ядром Linux.
29 октября 2019 года Проект Fedora модифицировал Fedora 31 для использования CgroupsV2 по умолчанию