我正在尝试了解 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
答案1
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 文件系统使用 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)
只读/sys/fs/cgroup/unified/cgroup.controllers
文件最初是空的。卸载cpu
控制器 ( cpu,cpuacct
) 后,cpu
控制器将可用。遗憾的是,memory
即使卸载所有 v1cgroup
文件系统,也并非所有控制器 (如 ) 都可用。可用的控制器包括:
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