Cgroups - Cgroups
| Оригинальный автор (ы) | v1: Пол Менедж, Рохит Сет v2: Теджун Хео |
|---|---|
| Разработчики) | Теджун Хео, Йоханнес Вайнер, Михал Хоко, Вайман Лонг, Роман Гущин, Крис Даун и др. |
| изначальный выпуск | 2007 |
| Написано в | C |
| Операционная система | Linux |
| Тип | Программное обеспечение |
| Лицензия | GPL и LGPL |
| Интернет сайт | www |
cgroups (сокращенно от контрольные группы) это Ядро Linux функция, которая ограничивает, учитывает и изолирует использование ресурсов (ЦП, память, дисковый ввод-вывод, сеть и т. Д.) Коллекции процессы.
Инженеры на Google (в первую очередь Пол Менедж и Рохит Сет ) начали работу над этой функцией в 2006 году под названием «контейнеры процессов».[1] В конце 2007 года номенклатура была изменена на «контрольные группы», чтобы избежать путаницы, вызванной множеством значений термина «контейнер "в контексте ядра Linux, а функции контрольных групп были объединены в Ядро Linux mainline в версии ядра 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 - предоставить единый интерфейс для множества различных сценарии использования, от управления отдельными процессами (с помощью отлично, например) на полную виртуализация на уровне операционной системы (как предусмотрено 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" позволяет изменить имя хоста.
- устанавливать пространство имен позволяет создать другую структуру файловой системы или сделать определенные точки монтирования доступными только для чтения.[25]
- Пространство имен IPC изолирует Систему V межпроцессного взаимодействия между пространствами имен.
- Пространство имен пользователя изолирует идентификаторы пользователей между пространствами имен.[26]
- Cgroup пространство имен[27]
Пространства имен создаются с помощью команды "unshare" или системный вызов, или как новые флаги в системном вызове "clone".[28]
Подсистема "ns" была добавлена на раннем этапе разработки cgroups для интеграции пространств имен и групп управления. Если была смонтирована контрольная группа "ns", каждое пространство имен также создавало бы новую группу в иерархии контрольных групп. Это был эксперимент, который позже был признан плохо подходящим для cgroups API и удален из ядра.
Пространства имен Linux были вдохновлены более общей функциональностью пространства имен, широко используемой повсюду. План 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 убийца реализация, которая добавляет возможность уничтожить контрольную группу как единое целое и тем самым гарантировать целостность рабочей нагрузки.[35]
Принятие
Различные проекты используют контрольные группы в качестве основы, в том числе CoreOS, Докер (в 2013), Hadoop, Jelastic, Kubernetes,[36] lmctfy (Позвольте мне содержать это для вас), LXC (Контейнеры LinuX), systemd, Mesos и мезосфера,[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.
- ^ а б Джонатан Корбет (29 октября 2007 г.). «Записки из контейнера». LWN.net. Получено 14 апреля 2015.
Первоначальное название «контейнеров» было сочтено слишком общим - этот код является важной частью контейнерного решения, но это далеко не все. Таким образом, контейнеры были переименованы в «контрольные группы» (или «cgroups») и объединены для версии 2.6.24.
- ^ "cgroup: преобразовать в kernfs". lkml. 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.
- ^ Балбир Сингх, Вайдинатан Сринивасан (июль 2007 г.). «Контейнеры: проблемы с контроллером ресурсов памяти и его производительностью» (PDF). Оттавский симпозиум по Linux.
- ^ Джонатан Корбет (23 октября 2007 г.). «Пространство ядра: справедливое планирование пользователей для Linux». Сетевой мир. Архивировано из оригинал 19 октября 2013 г.. Получено 22 августа 2012.
- ^ Камкамэдзава Хирою (19 ноября 2008 г.). Cgroup и контроллер ресурсов памяти (PDF). Симпозиум по Linux в Японии. Архивировано из оригинал (Слайды презентации в формате PDF) 22 июля 2011 г.
- ^ а б Дэйв Хансен. Управление ресурсами (Слайды презентации в формате PDF). Linux Foundation.
- ^ Мэтт Хелсли (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.
- ^ Серж Э. Халлин, Рам Пай (17 сентября 2007 г.). «Применение пространств имен монтирования». IBM developerWorks.
- ^ Майкл Керриск (27 февраля 2013 г.). «Действующие пространства имен, часть 5: Пространства имен пользователей». lwn.net Информация о Linux из источника.
- ^ https://lkml.org/lkml/2016/3/26/132/
- ^ Джанак Десаи (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
- ^ а б «Мезосфера принесет 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, Рами Розен
- Пространства имен и cgroups, основа контейнеров Linux (включая cgroups v2), слайды выступления Рами Розена, Netdev 1.1, Севилья, Испания, 2016
- Понимание нового API групп управления, LWN.net, Рами Розен, март 2016 г.
- Управление крупномасштабным кластером в Google с помощью Borg, Апрель 2015 г., Абхишек Верма, Луис Педроса, Мадукар Коруполу, Дэвид Оппенгеймер, Эрик Тьюн и Джон Уилкс
- Объекты работы, аналогичная функция в Windows