Linux

如何檢查我的機器上是否安裝了 cgroup v2?

  • October 21, 2021

我想嘗試 cgroup v2 但不確定它是否安裝在我的 linux 機器上

>> uname -r
4.14.66-041466-generic

由於 cgroup v2 在 4.12.0-rc5 中可用,我認為它應該在我使用的核心版本中可用。

https://www.infradead.org/~mchehab/kernel_docs/unsorted/cgroup-v2.html

但是,我的系統似乎沒有 cgroup v2,因為其文件中提到的記憶體介面文件在我的系統上不可用。

https://www.kernel.org/doc/Documentation/cgroup-v2.txt

好像我還有 cgroup v1。

/sys/fs/cgroup/memory# ls
cgroup.clone_children  memory.kmem.failcnt                 memory.kmem.tcp.usage_in_bytes   memory.memsw.usage_in_bytes      memory.swappiness
cgroup.event_control   memory.kmem.limit_in_bytes          memory.kmem.usage_in_bytes       memory.move_charge_at_immigrate  memory.usage_in_bytes
cgroup.procs           memory.kmem.max_usage_in_bytes      memory.limit_in_bytes            memory.numa_stat                 memory.use_hierarchy
cgroup.sane_behavior   memory.kmem.slabinfo                memory.max_usage_in_bytes        memory.oom_control               notify_on_release
docker                 memory.kmem.tcp.failcnt             memory.memsw.failcnt             memory.pressure_level            release_agent
memory.failcnt         memory.kmem.tcp.limit_in_bytes      memory.memsw.limit_in_bytes      memory.soft_limit_in_bytes       tasks
memory.force_empty     memory.kmem.tcp.max_usage_in_bytes  memory.memsw.max_usage_in_bytes  memory.stat 

後續問題 感謝 Brian 的幫助。如果我應該創建一個新問題,請告訴我,但我認為如果我只是在這裡問我的問題可能對其他人有幫助。

  1. 我無法按照文件中的命令添加 cgroup 控制器
>> echo "+cpu +memory -io" > cgroup.subtree_control

但是,我得到“迴聲:寫入錯誤:無效參數”。我是否缺少此步驟的先決條件?

  1. 我執行了一個 docker 容器,但 docker 守護程序日誌抱怨找不到“/sys/fs/cgroup/cpuset/docker/cpuset.cpus”。似乎 docker 仍在期待 cgroupv1。在我的 docker 守護程序上啟用 cgroupv2 支持的最佳方法是什麼?
docker -v
Docker version 17.09.1-ce, build aedabb7

最簡單的方法是嘗試掛載偽文件系統。如果您可以將其掛載到某個位置,那麼您可以嘗試使用該界面管理程序:

mount -t cgroup2 none $MOUNT_POINT

我看到您引用了上面的文件。您可能缺少的一點是仍然需要創建路徑。沒有理由必須任何特定位置管理 cgroup 資源。這只是慣例。

例如,只要目錄存在,您就可以完全呈現procfs在…/usr/monkeys``/usr/monkeys

$ sudo mkdir /usr/monkeys
$ sudo mount -t proc none /usr/monkeys
$ ls -l /usr/monkeys
...
...
-r--r--r--.  1 root        root                      0 Sep 25 19:00 uptime
-r--r--r--.  1 root        root                      0 Sep 25 23:17 version
-r--------.  1 root        root                      0 Sep 25 23:17 vmallocinfo
-r--r--r--.  1 root        root                      0 Sep 25 18:57 vmstat
-r--r--r--.  1 root        root                      0 Sep 25 23:17 zoneinfo
$ sudo umount /usr/monkeys

以同樣的方式,我可以使用 cgroup v2 偽文件系統執行此操作:

$ sudo mount -t cgroup2 none /usr/monkeys
$ ls -l /usr/monkeys
total 0
-r--r--r--.  1 root root 0 Sep 23 16:58 cgroup.controllers
-rw-r--r--.  1 root root 0 Sep 23 16:58 cgroup.max.depth
-rw-r--r--.  1 root root 0 Sep 23 16:58 cgroup.max.descendants
-rw-r--r--.  1 root root 0 Sep 23 16:58 cgroup.procs
-r--r--r--.  1 root root 0 Sep 23 16:58 cgroup.stat
-rw-r--r--.  1 root root 0 Sep 23 16:58 cgroup.subtree_control
-rw-r--r--.  1 root root 0 Sep 23 16:58 cgroup.threads
drwxr-xr-x.  2 root root 0 Sep 23 16:58 init.scope
drwxr-xr-x.  2 root root 0 Sep 23 16:58 machine.slice
drwxr-xr-x. 59 root root 0 Sep 23 16:58 system.slice
drwxr-xr-x.  4 root root 0 Sep 23 16:58 user.slice
$ sudo umount /usr/monkeys

您可以執行以下命令:

grep cgroup /proc/filesystems

如果您的系統支持 cgroupv2,您會看到:

nodev   cgroup
nodev   cgroup2

在只有 cgroupv1 的系統上,您只會看到:

nodev   cgroup

引用自:https://unix.stackexchange.com/questions/471476