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 コントローラーは 1 つの階層 (v1 または v2) にのみマウントできます。レガシー v1 階層にコントローラーをマウントした場合、cgroup2 階層には表示されません。この制限については、cgroup-v2 - マウントマニュアルページも同様ですcgroups(7):

複数の cgroup 階層に対して同じコントローラーをマウントすることはできません。たとえば、1 つの階層に対して 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をアンマウントすると、コントローラが使用可能になります。残念ながら、すべての v1 ファイルシステムをアンマウントした後でも、すべてのコントローラ ( など) が使用可能になるわけではありません。使用可能なコントローラは次のとおりです。cpucpu,cpuacctcpumemorycgroup

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

関連情報