Автор (ы) оригинала | v1: Пол Менедж, Рохит Сет v2: Теджун Хео |
---|---|
Разработчики) | Теджун Хео, Йоханнес Вайнер, Михал Хоко, Вайман Лонг, Роман Гущин, Крис Даун и др. |
Первый выпуск | 2007 |
Написано в | C |
Операционная система | Linux |
Тип | Программное обеспечение |
Лицензия | GPL и LGPL |
Веб-сайт | www |
cgroups (сокращенно от контрольных групп ) - это функция ядра Linux, которая ограничивает, учитывает и изолирует использование ресурсов (ЦП, память, дисковый ввод-вывод, сеть и т. д.) коллекцией процессов .
Инженеры Google (в первую очередь Пол Менедж и Рохит Сет ) начали работу над этой функцией в 2006 году под названием «контейнеры процессов». [1] В конце 2007 года номенклатура была изменена на «группы управления», чтобы избежать путаницы, вызванной множеством значений термина « контейнер » в контексте ядра Linux, а функции групп управления были объединены в основную линию ядра Linux в версии ядра 2.6. .24, который был выпущен в январе 2008 года. [2] С тех пор разработчики добавили много новых функций и контроллеров, таких как поддержка kernfs в 2014 году, [3] межсетевой экран , [4] и унифицированная иерархия.[5] cgroup v2 была объединена с ядром Linux 4.5 со значительными изменениями интерфейса и внутренней функциональности. [6]
Версии [ править ]
Этот раздел может потребовать очистки для соответствия стандартам качества Википедии . Конкретная проблема: неполные описания и отсутствие ссылок. ( Июнь 2016 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Есть две версии контрольных групп.
Изначально Cgroups были написаны Полом Менеджем и Рохитом Сетом и включены в ядро Linux в 2007 году. Впоследствии это называется cgroups версии 1. [7]
Затем разработку и поддержку групп взял на себя Теджун Хео . Теджун Хео переработал и переписал контрольные группы. Это переписывание теперь называется версией 2, документация по cgroups-v2 впервые появилась в ядре Linux 4.5, выпущенном 14 марта 2016 года. [8]
В отличие от v1, cgroup v2 имеет только одну иерархию процессов и различает процессы, а не потоки.
Особенности [ править ]
Одна из целей разработки cgroups - предоставить унифицированный интерфейс для множества различных сценариев использования , от управления отдельными процессами (например, с помощью nice ) до полной виртуализации на уровне операционной системы (предоставляемой OpenVZ , Linux-VServer или LXC , Например). Cgroups предоставляет:
- Ограничение ресурсов
- группы можно настроить так, чтобы они не превышали установленный предел памяти , который также включает кеш файловой системы [9] [10]
- Приоритезация
- некоторые группы могут получить большую долю использования ЦП [11] или пропускной способности дискового ввода-вывода [12]
- Бухгалтерский учет
- измеряет использование ресурсов группой, которое может быть использовано, например, для выставления счетов [13]
- Контроль
- замораживание групп процессов, их контрольная точка и перезапуск [13]
Используйте [ редактировать ]
Контрольная группа (сокращенно cgroup) - это совокупность процессов, которые связаны одними и теми же критериями и связаны с набором параметров или ограничений. Эти группы могут быть иерархическими, что означает, что каждая группа наследует ограничения от своей родительской группы. Ядро предоставляет доступ к нескольким контроллерам (также называемым подсистемами) через интерфейс cgroup; [2] например, контроллер «памяти» ограничивает использование памяти, «cpuacct» учитывает использование ЦП и т. Д.
Группы управления можно использовать несколькими способами:
- Получив доступ к виртуальной файловой системе cgroup вручную.
- Создавая группы и управляя ими на лету, используя такие инструменты, как cgcreate , cgexec и cgclassify (из libcgroup ).
- Через «демон механизма правил», который может автоматически перемещать процессы определенных пользователей, групп или команд в cgroups, как указано в его конфигурации.
- Косвенно через другое программное обеспечение , которое использует контрольные группы, такие как Докер , Firejail , LXC , [14] Libvirt , Systemd , Open Grid Scheduler / Grid Engine , [15] и развитием несуществующей компании Google lmctfy .
Документация ядра Linux содержит некоторые технические детали установки и использования групп управления версии 1 [16] и версии 2. Команда [17] systemd-cgtop
[18] может использоваться для отображения основных групп управления по их использованию ресурсов.
Редизайн [ править ]
Редизайн контрольных групп начался в 2013 году [19] с дополнительными изменениями, внесенными версиями 3.15 и 3.16 ядра Linux. [20] [21] [22]
Изоляция пространства имен [ править ]
Хотя технически это не является частью работы cgroups, связанная функция ядра Linux - это изоляция пространства имен , когда группы процессов разделены так, что они не могут «видеть» ресурсы в других группах. Например, пространство имен PID предоставляет отдельное перечисление идентификаторов процессов в каждом пространстве имен. Также доступны пространства имен mount, user, UTS, network и SysV IPC.
- Пространство имен PID обеспечивает изоляцию для распределения идентификаторов процессов (PID), списков процессов и их деталей. Хотя новое пространство имен изолировано от других братьев и сестер, процессы в его «родительском» пространстве имен по-прежнему видят все процессы в дочерних пространствах имен, хотя и с разными номерами PID. [23]
- Сетевое пространство имен изолирует контроллеры сетевого интерфейса (физические или виртуальные), правила межсетевого экрана iptables , таблицы маршрутизации и т. Д. Сетевые пространства имен могут быть связаны друг с другом с помощью виртуального устройства Ethernet «veth». [24]
- Пространство имен «UTS» позволяет изменять имя хоста .
- Пространство имен Mount позволяет создать другую структуру файловой системы или сделать определенные точки монтирования доступными только для чтения. [25]
- Пространство имен IPC изолирует межпроцессное взаимодействие System V между пространствами имен.
- Пространство имен пользователей изолирует идентификаторы пользователей между пространствами имен. [26]
- Пространство имен Cgroup [27]
Пространства имен создаются с помощью команды «unshare» или системного вызова , или как новые флаги в системном вызове «clone». [28]
Подсистема "ns" была добавлена на раннем этапе разработки cgroups для интеграции пространств имен и групп управления. Если была смонтирована контрольная группа "ns", каждое пространство имен также создаст новую группу в иерархии контрольных групп. Это был эксперимент, который позже был признан плохо подходящим для cgroups API и удален из ядра.
Пространства имен Linux были вдохновлены более общей функциональностью пространств имен, широко используемой в Plan 9 от Bell Labs . [29]
Единая иерархия [ править ]
Kernfs был введен в ядро Linux с версией 3.14 в марте 2014 года, основным автором является Теджун Хео. [30] Одним из основных мотиваторов для отдельного kernfs является файловая система cgroups. Kernfs в основном создается путем разделения некоторой логики sysfs на независимый объект, что упрощает для других подсистем ядра реализацию собственной виртуальной файловой системы с обработкой подключения и отключения устройств, динамическим созданием и удалением и другими атрибутами. Редизайн продолжился до версии 3.15 ядра Linux. [31]
Группы управления памятью ядра (kmemcg) [ править ]
Группы управления памятью ядра ( kmemcg ) были объединены в версию 3.8 (18 февраля 2013 г .
) основной ветки ядра Linux . [32] [33] [34] Контроллер kmemcg может ограничивать объем памяти, который ядро может использовать для управления собственными внутренними процессами.осведомленность cgroup об убийце OOM [ править ]
Ядро Linux 4.19 (октябрь 2018 г.) представило cgroup осведомленность о реализации OOM killer, которая добавляет возможность уничтожать cgroup как единое целое и тем самым гарантировать целостность рабочей нагрузки. [35]
Принятие [ править ]
Различные проекты используют контрольные группы в качестве основы, включая CoreOS , Docker (в 2013 году), Hadoop , Jelastic , Kubernetes , [36] lmctfy (Let Me Contain That For You), LXC (LinuX Containers), systemd , Mesos и Mesosphere , [36] ] и HTCondor . Основные дистрибутивы Linux также приняли его, например, Red Hat Enterprise Linux (RHEL) 6.0 в ноябре 2010 года, спустя три года после принятия основным ядром Linux. [37]
29 октября 2019 года проект Fedora модифицировал Fedora 31, чтобы по умолчанию использовать CgroupsV2 [38]
См. Также [ править ]
- Реализации виртуализации на уровне операционной системы
- Группа процессов
- Tc (Linux) - утилита управления трафиком, которая имеет небольшое функциональное перекрытие с сетевыми настройками контрольной группы.
Ссылки [ править ]
- ↑ Джонатан Корбет (29 мая 2007 г.). «Технологические контейнеры» . LWN.net.
- ^ a b Джонатан Корбет (29 октября 2007 г.). «Записки из тары» . LWN.net . Проверено 14 апреля 2015 года .
Первоначальное название «контейнера» было сочтено слишком общим - этот код является важной частью контейнерного решения, но это далеко не все.
Таким образом, контейнеры были переименованы в «контрольные группы» (или «контрольные группы») и объединены для версии 2.6.24.
- ^ "cgroup: преобразовать в kernfs" . Список рассылки ядра Linux . 28 января 2014 г.
- ^ "netfilter: x_tables: облегченное сопоставление групп управления процессом" . 23 апреля 2014. Архивировано из оригинала 24 апреля 2014 года.
- ^ "cgroup: подготовьтесь к единой иерархии по умолчанию" . 13 марта 2014 г.
- ^ "cgroup v2: Несколько иерархий" .
- ^ "разница между ядром Linux 4.4 и 4.5" . 14 марта 2016 г.
- ^ «Документация / cgroup-v2.txt в том виде, в каком она появилась в ядре Linux 4.5» . 14 марта 2016 г.
- ↑ Джонатан Корбет (31 июля 2007 г.). «Контроль использования памяти в контейнерах» . LWN.
- ^ Balbir Сингх, Vaidynathan Srinivasan (июль 2007). «Контейнеры: проблемы с контроллером ресурсов памяти и его производительностью» (PDF) . Оттавский симпозиум по Linux.
- ↑ Джонатан Корбет (23 октября 2007 г.). «Пространство ядра: справедливое планирование пользователей для Linux» . Сетевой мир. Архивировано из оригинального 19 октября 2013 года . Проверено 22 августа 2012 года .
- ^ Kamkamezawa Hiroyu (19 ноября 2008). Cgroup и контроллер ресурсов памяти (PDF) . Симпозиум по Linux в Японии. Архивировано из оригинала (слайды презентации в формате PDF) 22 июля 2011 года.
- ^ a b Дэйв Хансен. Управление ресурсами (слайды презентации в формате PDF) . Linux Foundation.
- ^ Matt Helsley (3 февраля 2009). «LXC: контейнерные инструменты Linux» . IBM developerWorks.
- ^ "Интеграция cgroups Grid Engine" . Масштабируемая логика. 22 мая 2012 г.
- ^ "cgroups" . kernel.org.
- ^ https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/cgroup-v2.rst
- ^ https://www.freedesktop.org/software/systemd/man/systemd-cgtop.html
- ^ «Все о ядре Linux: редизайн Cgroup» . Linux.com . 15 августа 2013 . Проверено 19 мая 2014 .
- ^ "Единая иерархия групп управления в 3.16" . LWN.net . 11 июня 2014 г.
- ^ "Получите обновления cgroup для 3.15 от Tejun Heo" . kernel.org . 3 апреля 2014 г.
- ^ "Получите обновления cgroup для 3.16 от Tejun Heo" . kernel.org . 9 июня 2014 г.
- ↑ Павел Емельянов, Кир Колышкин (19 ноября 2007 г.). «Пространства имен PID в ядре 2.6.24» . LWN.net.
- ↑ Джонатан Корбет (30 января 2007 г.). «Сетевые пространства имен» . LWN.net.
- ^ Serge Е. Hallyn, Ram Пай (17 сентября 2007). «Применение пространств имен монтирования» . IBM developerWorks.
- ^ Майкл Керриск (27 февраля 2013 г.). «Действующие пространства имен, часть 5: Пространства имен пользователей» . lwn.net Linux Информация из источника.
- ^ https://lkml.org/lkml/2016/3/26/132/
- ^ Janak Десаи (11 января 2006). «Документация ядра Linux на нераспространении» .
- ^ «Использование пространств имен в плане 9» . 1992. Архивировано из оригинала на 6 сентября 2014 года . Проверено 15 февраля 2015 года .
- ^ "kernfs, sysfs, ядро драйвера: реализовать синхронное самоудаление" . LWN.net . 3 февраля 2014 . Проверено 7 апреля 2014 года .
- ^ "Дерево исходных текстов ядра Linux: kernel / git / torvalds / linux.git: cgroups: convert to kernfs" . kernel.org . 11 февраля 2014 . Дата обращения 23 мая 2014 .
- ^ "memcg: инфраструктура контроллера kmem" . Исходный код kernel.org . 18 декабря 2012 г.
- ^ "memcg: базовая инфраструктура учета kmem" . Исходный код kernel.org . 18 декабря 2012 г.
- ^ "memcg: добавить документацию о контроллере kmem" . kernel.org . 18 декабря 2012 г.
- ^ https://kernelnewbies.org/Linux_4.19#Memory_management
- ^ a b «Мезосфера, чтобы перенести Kubernetes Google в Мезос» . Mesosphere.io. 10 июля 2014. Архивировано из оригинала 6 сентября 2015 года . Проверено 13 июля 2014 года .
- ^ https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/pdf/6.0_Release_Notes/Red_Hat_Enterprise_Linux-6-6.0_Release_Notes-en-US.pdf
- ^ https://bugzilla.redhat.com/show_bug.cgi?id=1732114
Внешние ссылки [ править ]
- Документация ядра Linux в cgroups
- Пространства имен и контрольные группы ядра Linux, Рами Розен
- Пространства имен и контрольные группы, основа контейнеров Linux (включая cgroups v2) , слайды выступления Рами Розена, Netdev 1.1, Севилья, Испания, 2016 г.
- Понимание нового API групп управления , LWN.net , Рами Розен, март 2016 г.
- Управление крупномасштабным кластером в Google с Borg , апрель 2015 г., Абхишек Верма, Луис Педроса, Мадукар Коруполу, Дэвид Оппенгеймер, Эрик Тьюн и Джон Уилкс.
- Объекты заданий , аналогичная функция в Windows