Estou tentando aprender como funciona o cgroups v2. Eu fiz isso:
mount -t cgroup2 none /mnt/cgroup2
Isso me deu uma lista de objetos em/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
No entanto, o arquivo /mnt/cgroup2/cgroup.controllers
está vazio. Achei que deveria ter a lista de controladores, não é correto? Lendo documentos aqui:http://man7.org/linux/man-pages/man7/cgroups.7.html
Responder1
Os controladores cgroup só podem ser montados em uma hierarquia (v1 ou v2). Se você tiver um controlador montado em uma hierarquia legada v1, ele não aparecerá na hierarquia cgroup2. Esta limitação está documentada emcgroup-v2 - Montagembem como a cgroups(7)
página de manual:
Não é possível montar o mesmo controlador em múltiplas hierarquias de cgroups. Por exemplo, não é possível montar os controladores cpu e cpuacct em uma hierarquia e montar o controlador de cpu sozinho em outra hierarquia. É possível criar vários pontos de montagem exatamente com o mesmo conjunto de controladores montados. No entanto, neste caso, tudo o que resulta são vários pontos de montagem, fornecendo uma visão da mesma hierarquia.
Observe que em muitos sistemas, os controladores v1 são montados automaticamente em /sys/fs/cgroup; em particular, o systemd(1) cria automaticamente esses pontos de montagem.
Para evitar esse comportamento legado, inicialize com a systemd.unified_cgroup_hierarchy=1
opção. Esta opção poderá se tornar o padrão no futuro, de acordo com oEntrada NEWS para systemd v233.
Para ilustrar, estes sistemas de arquivos cgroup são montados em um sistema Arch Linux usando 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 somente leitura /sys/fs/cgroup/unified/cgroup.controllers
está inicialmente vazio. Após desmontar o cpu
controlador ( cpu,cpuacct
), o cpu
controlador fica disponível. Infelizmente, nem todos os controladores (como memory
) ficam disponíveis mesmo após a desmontagem de todos cgroup
os sistemas de arquivos v1. 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 estão disponíveis:
cpu io memory pids rdma