cgroup v2 的控制器列表為空

cgroup v2 的控制器列表為空

我正在嘗試了解 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控制器即可使用。不幸的是,即使卸載所有 v1 檔案系統後,並非所有控制器(如memory)都可用cgroup。可用的有:

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

相關內容