Я пытаюсь узнать, как работают cgroups v2. Я сделал это:
mount -t cgroup2 none /mnt/cgroup2
Это дало мне список объектов в /mnt/cgroup2
root@ubuntu-s-1vcpu-1gb-lon1-01:~# ls -la /mnt/cgroup2/
total 4
dr-xr-xr-x 5 root root 0 Sep 2 16:04 .
drwxr-xr-x 3 root root 4096 Sep 2 16:05 ..
-r--r--r-- 1 root root 0 Sep 2 16:04 cgroup.controllers
-rw-r--r-- 1 root root 0 Sep 2 16:04 cgroup.max.depth
-rw-r--r-- 1 root root 0 Sep 2 16:04 cgroup.max.descendants
-rw-r--r-- 1 root root 0 Sep 2 16:04 cgroup.procs
-r--r--r-- 1 root root 0 Sep 2 16:04 cgroup.stat
-rw-r--r-- 1 root root 0 Sep 2 16:07 cgroup.subtree_control
-rw-r--r-- 1 root root 0 Sep 2 16:04 cgroup.threads
drwxr-xr-x 2 root root 0 Sep 2 16:04 init.scope
drwxr-xr-x 59 root root 0 Sep 2 16:00 system.slice
drwxr-xr-x 3 root root 0 Sep 2 15:59 user.slice
Однако файл /mnt/cgroup2/cgroup.controllers
пусто. Я думал, что там должен быть список контроллеров, не так ли? Чтение документации здесь: http://man7.org/linux/man-pages/man7/cgroups.7.html
Контроллеры cgroup могут быть смонтированы только в одной иерархии (v1 или v2). Если у вас есть контроллер, смонтированный в устаревшей иерархии v1, он не будет отображаться в иерархии cgroup2. Это ограничение задокументировано в cgroup-v2 - Установка так же хорошо как cgroups(7)
страница руководства:
Невозможно подключить один и тот же контроллер к нескольким иерархиям cgroup. Например, невозможно смонтировать оба контроллера cpu и cpuacct против одной иерархии, и смонтировать только контроллер cpu против другой иерархии. Можно создать несколько точек монтирования с одним и тем же набором подключенных контроллеров. Однако в этом случае в результате получается несколько точек монтирования, обеспечивающих представление одной и той же иерархии.
Обратите внимание, что во многих системах контроллеры v1 автоматически монтируются в / sys / fs / cgroup; в частности, systemd (1) автоматически создает такие точки монтирования.
Чтобы избежать этого устаревшего поведения, загрузитесь с systemd.unified_cgroup_hierarchy=1
вариант. Эта опция может стать в будущем по умолчанию в соответствии с НОВОСТИ запись для systemd v233.
Для иллюстрации, эти файловые системы cgroup смонтированы в системе Arch Linux с использованием systemd 239:
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
Только для чтения /sys/fs/cgroup/unified/cgroup.controllers
файл изначально пуст. После размонтирования cpu
контроллер (cpu,cpuacct
), cpu
контроллер становится доступным. К сожалению, не все контроллеры (например, memory
) становятся доступными даже после размонтирования всех v1 cgroup
файловые системы. Доступны следующие:
cpu io rdma
При загрузке с systemd.unified_cgroup_hierarchy=1
, файловые системы v1 не смонтированы:
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
А теперь стало доступно еще несколько контроллеров:
cpu io memory pids rdma