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