cgroup v2 为空的控制器列表

Abh*_*nda 5 linux cgroup

我正在尝试了解 cgroups v2 是如何工作的。我这样做了:

mount -t cgroup2 none /mnt/cgroup2
Run Code Online (Sandbox Code Playgroud)

这给了我一个对象列表 /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
Run Code Online (Sandbox Code Playgroud)

但是,该文件/mnt/cgroup2/cgroup.controllers是空的。我认为它应该有控制器列表,这不正确吗?在这里阅读文档:http : //man7.org/linux/man-pages/man7/cgroups.7.html

Lek*_*eyn 7

cgroup 控制器只能安装在一个层次结构中(v1 或 v2)。如果您的控制器安装在旧版 v1 层次结构上,则它不会出现在 cgroup2 层次结构中。此限制记录在cgroup-v2 - Mounting以及cgroups(7)手册页中:

不可能针对多个 cgroup 层次结构安装相同的控制器。例如,不可能针对一个层次结构同时安装 cpu 和 cpuacct 控制器,也无法针对另一个层次结构单独安装 cpu 控制器。可以使用完全相同的一组共同安装的控制器创建多个安装点。但是,在这种情况下,所有结果都是多个挂载点提供相同层次结构的视图。

请注意,在许多系统上,v1 控制器会自动挂载在 /sys/fs/cgroup 下;特别是,systemd(1) 会自动创建这样的挂载点。

为避免这种传统行为,请使用该systemd.unified_cgroup_hierarchy=1选项启动。根据systemd v233NEWS 条目,此选项将来可能会成为默认选项。

为了说明,这些 cgroup 文件系统使用 systemd 239 挂载在 Arch Linux 系统上:

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)
Run Code Online (Sandbox Code Playgroud)

只读/sys/fs/cgroup/unified/cgroup.controllers文件最初是空的。卸载cpu控制器 ( cpu,cpuacct) 后,cpu控制器变为可用。不幸的是,memory即使卸载了所有 v1cgroup文件系统,也并非所有控制器(如)都可用。可用的有:

cpu io rdma
Run Code Online (Sandbox Code Playgroud)

使用 启动时systemd.unified_cgroup_hierarchy=1,不会挂载 v1 文件系统:

cgroup2  on  /sys/fs/cgroup           type  cgroup2  (rw,nosuid,nodev,noexec,relatime,nsdelegate)
Run Code Online (Sandbox Code Playgroud)

现在有更多的控制器可用:

cpu io memory pids rdma
Run Code Online (Sandbox Code Playgroud)