Os controladores cgroup só podem ser montados em uma hierarquia (v1 ou v2). Se você tiver um controlador montado em uma hierarquia legacy v1, ele não será exibido na hiearchy cgroup2. Essa limitação está documentada em cgroup-v2 - montagem também como a página de manual cgroups(7)
:
It is not possible to mount the same controller against multiple cgroup hierarchies. For example, it is not possible to mount both the cpu and cpuacct controllers against one hierarchy, and to mount the cpu controller alone against another hierarchy. It is possible to create multiple mount points with exactly the same set of comounted controllers. However, in this case all that results is multiple mount points providing a view of the same hierarchy.
Note that on many systems, the v1 controllers are automatically mounted under /sys/fs/cgroup; in particular, systemd(1) automatically creates such mount points.
Para evitar esse comportamento herdado, inicialize com a opção systemd.unified_cgroup_hierarchy=1
. Essa opção pode se tornar o padrão no futuro, de acordo com a entrada NEWS do systemd v233 .
Para ilustrar, esses sistemas de arquivos cgroup são montados em um sistema Arch Linux usando o 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)
O arquivo /sys/fs/cgroup/unified/cgroup.controllers
somente leitura está inicialmente vazio. Depois de desmontar o controlador cpu
( cpu,cpuacct
), o controlador cpu
fica disponível. Infelizmente, nem todos os controladores (como memory
) ficam disponíveis mesmo após a desmontagem de todos os sistemas de arquivos v1 cgroup
. Os que estão disponíveis são:
cpu io rdma
Ao inicializar com systemd.unified_cgroup_hierarchy=1
, nenhum sistema de arquivos v1 é montado:
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
E agora, mais alguns controladores ficam disponíveis:
cpu io memory pids rdma