Estoy intentando aprender cómo funciona cgroups v2. Hice esto:
mount -t cgroup2 none /mnt/cgroup2
Eso me dio una lista de objetos en/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
Sin embargo, el archivo /mnt/cgroup2/cgroup.controllers
está vacío. Pensé que debería tener la lista de controladores, ¿no es correcto? Leyendo documentos aquí:http://man7.org/linux/man-pages/man7/cgroups.7.html
Respuesta1
Los controladores cgroup solo se pueden montar en una jerarquía (v1 o v2). Si tiene un controlador montado en una jerarquía v1 heredada, no aparecerá en la jerarquía cgroup2. Esta limitación está documentada encgroup-v2 - Montajeasí como la cgroups(7)
página del manual:
No es posible montar el mismo controlador en varias jerarquías de cgroup. Por ejemplo, no es posible montar los controladores de CPU y CPUacct en una jerarquía, ni montar el controlador de CPU solo en otra jerarquía. Es posible crear múltiples puntos de montaje con exactamente el mismo conjunto de controladores montados. Sin embargo, en este caso todo lo que resulta son múltiples puntos de montaje que brindan una vista de la misma jerarquía.
Tenga en cuenta que en muchos sistemas, los controladores v1 se montan automáticamente en /sys/fs/cgroup; en particular, systemd(1) crea automáticamente dichos puntos de montaje.
Para evitar este comportamiento heredado, inicie con la systemd.unified_cgroup_hierarchy=1
opción. Esta opción podría convertirse en la predeterminada en el futuro según laEntrada de NOTICIAS para systemd v233.
Para ilustrar, estos sistemas de archivos cgroup están montados en un 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)
El archivo de sólo lectura /sys/fs/cgroup/unified/cgroup.controllers
está inicialmente vacío. Después de desmontar el cpu
controlador ( cpu,cpuacct
), el cpu
controlador pasa a estar disponible. Desafortunadamente, no todos los controladores (como memory
) están disponibles incluso después de desmontar todos cgroup
los sistemas de archivos v1. Los que están disponibles son:
cpu io rdma
Al arrancar con systemd.unified_cgroup_hierarchy=1
, no se montan sistemas de archivos v1:
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
Y ahora hay más controladores disponibles:
cpu io memory pids rdma