cgroups - cgroups

редактировать
Метод ограничения ресурсов в Linux
cgroups
Исходный автор (ы) 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 со значительными изменениями интерфейса и внутренней функциональности.

Содержание
  • 1 Версии
  • 2 Функции
  • 3 Использование
  • 4 Редизайн
    • 4.1 Изоляция пространства имен
    • 4.2 Единая иерархия
    • 4.3 Группы управления памятью ядра (kmemcg)
    • 4.4 Осведомленность cgroup об убийце OOM
  • 5 Принятие
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки
Версии

Есть две версии контрольных групп.

Cgroups были первоначально написаны Полом Менеджем и Рохитом Сетом и включены в ядро ​​Linux в 2007 году. Впоследствии это называется cgroups version 1.

Затем разработка и обслуживание cgroups были взяты на себя. Теджун Хо переработал и переписал контрольные группы. Эта перезапись теперь называется версией 2, документация по cgroups-v2 впервые появилась в ядре Linux 4.5, выпущенном 14 марта 2016 года.

В отличие от v1, cgroup v2 имеет только одну иерархию процессов и различает процессы, а не потоки.

Возможности

Одна из целей разработки контрольных групп - предоставить единый интерфейс для множества различных вариантов использования, от управления отдельными процессами (с помощью nice, например) до полной виртуализации на уровне операционной системы (как предусмотрено OpenVZ, Linux-VServer или LXC, для пример). Cgroups обеспечивает:

Ограничение ресурсов
группы могут быть настроены так, чтобы не превышать сконфигурированный предел памяти, который также включает кэш файловой системы
Приоритизация
некоторые группы могут получить большую долю использования ЦП или пропускной способности дискового ввода-вывода
Учет
измеряет использование ресурсов группой, что может использоваться, например, для выставления счетов
Управление
замораживание групп процессов, их контрольная точка и перезапуск
Использование
В качестве примера косвенного использования systemd предполагает монопольный доступ к средству cgroups

Контрольная группа (сокращенно cgroup) - это совокупность процессов, которые связаны одними и теми же критериями и связаны с набором параметров или ограничений. Эти группы могут быть иерархическими, что означает, что каждая группа наследует ограничения от своей родительской группы. Ядро предоставляет доступ к нескольким контроллерам (также называемым подсистемами) через интерфейс cgroup; например, контроллер «памяти» ограничивает использование памяти, «cpuacct» учитывает использование ЦП и т. д.

Управляющие группы могут использоваться несколькими способами:

  • путем доступа к виртуальной файловой системе cgroup вручную.
  • Создавая группы и управляя ими на лету с помощью таких инструментов, как cgcreate, cgexecи cgclassify(из libcgroup).
  • Через «демон механизма правил», который может автоматически перемещать процессы определенных пользователей, групп или команд в контрольные группы, как указано в его конфигурации.
  • Косвенно через другое программное обеспечение, использующее контрольные группы, такое как Docker, LXC, libvirt, systemd, Open Grid Scheduler / Grid Engine и несуществующий lmctfy.

Linux Документация ядра содержит некоторые технические подробности настройки и использования групп управления версии 1 и версии 2. Команда systemd-cgtopможет использоваться для отображения верхних групп управления по их использованию ресурсов.

Редизайн

Редизайн cgrou ps начался в 2013 году, с дополнительными изменениями, внесенными в версии ядра Linux 3.15 и 3.16.

Изоляция пространства имен

Хотя технически это не является частью работы cgroups, связанная функция ядра Linux - это изоляция пространства имен, когда группы процессов разделены так, что они не могут «видеть» ресурсы в других группах. Например, пространство имен PID предоставляет отдельное перечисление идентификаторов процессов в каждом пространстве имен. Также доступны пространства имен mount, user, UTS, network и SysV IPC.

  • Пространство имен PID обеспечивает изоляцию для выделения идентификаторов процессов (PID), списков процессов и их деталей. Хотя новое пространство имен изолировано от других братьев и сестер, процессы в его «родительском» пространстве имен по-прежнему видят все процессы в дочерних пространствах имен, хотя и с разными номерами PID.
  • Сетевое пространство имен изолирует контроллеры сетевого интерфейса (физический или виртуальный), iptables правила брандмауэра, таблицы маршрутизации и т. д. Сетевые пространства имен могут быть связаны друг с другом с помощью виртуального устройства Ethernet "veth".
  • Пространство имен "UTS" позволяет изменять hostname.
  • Mount пространство имен позволяет создать другую структуру файловой системы или сделать определенные точки монтирования доступными только для чтения.
  • Пространство имен IPC изолирует межпроцессное взаимодействие System V между пространствами имен.
  • Пространство имен пользователя изолирует идентификаторы пользователей между пространствами имен.
  • Пространство имен Cgroup

Пространства имен создаются с помощью команды «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)

Группы управления памятью ядра (kmemcg) были объединены в версию 3.8 (18 февраля 2013 г.; 7 лет назад ( 18-02-2013)) основной ветки ядра Linux. Контроллер kmemcg может ограничивать объем памяти, который ядро ​​может использовать для управления собственными внутренними процессами.

осведомленность cgroup об убийце OOM

ядро ​​Linux 4.19 (октябрь 2018 г.) представила cgroup осведомленность о реализации OOM killer, которая добавляет возможность убивать cgroup как единое целое, что гарантирует целостность рабочей нагрузки.

Adoption

Различные проекты используют 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 по умолчанию

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
  • icon Портал Linux
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-14 04:06:42
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте