Что такое cgroupfs и как он используется с Docker?

16

В документации Docker обсуждаются варианты встроенного execdriver ( https://docs.docker.com/engine/reference/commandline/daemon/ ). В документации сказано

Опция native.cgroupdriver определяет управление cgroups контейнера. Вы можете указать cgroupfs или systemd. Если вы укажете systemd, а он недоступен, система использует cgroupfs. По умолчанию, если опция не указана, execdriver сначала пытается использовать systemd и возвращается к cgroupfs. Этот пример устанавливает execdriver в cgroupfs:

Мой вопрос: что это такое cgroupfsи как оно сравнивается systemdв этом случае? Погуглил информацию о cgroupfsпривел к твиту :

--exec-opt native.cgroupdriver = cgroupfs FTW. серьезно @docker, откажитесь от поддержки cgroups, управляемых systemd, это катастрофа

Но я надеюсь, что кто-то может предоставить более подробную информацию о том, что это на самом деле делает, вместо того, чтобы просто сказать, использовать параметр, который отличается от значения по умолчанию.

Габриэль Южный
источник
Вы понимаете, что все это связано с распределением системных ресурсов (ЦП) контейнера, верно? В systemd встроена интеграция cgroup. Cgroupfs - это представление файловой системы интерфейса cgroup ядра. Если это то, что вы ищете, я отвечу. Но если вы уже знаете это, мне придется копаться в коде.
Отей
@ Otheus Я не ставил награду за этот вопрос, поэтому я не уверен, что заинтересовавший его человек заинтересовался. Главное, что побудило меня задать вопрос, было желание понять, почему кто-то рекомендовал использовать эту опцию --exec-opt native.cgroupdriver=cgroupfs. Но я подозреваю, что если вы напишете ответ, объясняющий настройку, которую новичку будет легче понять, чем то, что содержится в документации Docker, вы получите несколько голосов, и это может быть полезно для людей, которые найдут вопрос в Google в будущем.
Габриэль Южный

Ответы:

1

Как я могу видеть из комментариев в источниках в: vendor/src/github.com/opencontainers/runc/libcontainer/factory_linux.go

// Cgroupfs is an options func to configure a LinuxFactory to return
// containers that use the native cgroups filesystem implementation to
// create and manage cgroups.

cgroupfsКажется, это собственная реализация docker ( libcontainer), которая настраивает контейнеры, cgroupsзаписывающие файлы напрямую cgroups-file-system(например, смонтированные в /sys/fs/cgroup/).

Snorch
источник