我在 ubuntu24.04 中使用 cgroups v2,我对根控制组感到困惑,因为与非根控制组相比缺少一些项目,以 cpu 控制器为例:
$ ll /sys/fs/cgroup/
...
-rw-r--r-- 1 root root 0 Nov 27 16:46 cpu.pressure
-r--r--r-- 1 root root 0 Nov 27 16:46 cpu.stat
-r--r--r-- 1 root root 0 Nov 27 16:46 cpu.stat.local
...
CPU 控制器只有三项,但有十项:
$ ll /sys/fs/cgroup/test/
...
-rw-r--r-- 1 root root 0 Dec 2 20:41 cpu.idle
-rw-r--r-- 1 root root 0 Dec 2 20:41 cpu.max
-rw-r--r-- 1 root root 0 Dec 2 20:41 cpu.max.burst
-rw-r--r-- 1 root root 0 Dec 2 20:41 cpu.pressure
-r--r--r-- 1 root root 0 Dec 2 20:41 cpu.stat
-r--r--r-- 1 root root 0 Dec 2 20:41 cpu.stat.local
-rw-r--r-- 1 root root 0 Dec 2 20:41 cpu.uclamp.max
-rw-r--r-- 1 root root 0 Dec 2 20:41 cpu.uclamp.min
-rw-r--r-- 1 root root 0 Dec 2 20:41 cpu.weight
-rw-r--r-- 1 root root 0 Dec 2 20:41 cpu.weight.nice
...
所有控制器均在根控制组中启用:
$ cat /sys/fs/cgroup/cgroup.controllers
cpuset cpu io memory hugetlb pids rdma misc
为什么cpu控制器的根控制组里只有三项?是什么让根对照组如此特别?
根 cgroup 充当所有其他 cgroup 的父级,并且是管理入口点。它专注于为子 cgroup 中的资源控制启用分层结构。 并且它不管理任务或对其自身应用资源限制等;相反,它会聚合所有子 cgroup 的数据和控制,就像我已经提到的那样。