私は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
cgroupコントローラーは1つの階層(v1またはv2)にのみマウントできます。レガシーv1階層にマウントされているコントローラーがある場合、cgroup2階層には表示されません。この制限は cgroup-v2-Mounting およびcgroups(7)
のマニュアルページに記載されています。
複数のcgroup階層に対して同じコントローラーをマウントすることはできません。たとえば、cpuコントローラーとcpuacctコントローラーの両方を1つの階層にマウントしたり、cpuコントローラーだけを別の階層にマウントしたりすることはできません。まったく同じコントローラセットを使用して、複数のマウントポイントを作成できます。ただし、この場合、結果はすべて同じ階層のビューを提供する複数のマウントポイントになります。
多くのシステムでは、v1コントローラーは/ sys/fs/cgroupの下に自動的にマウントされることに注意してください。特に、systemd(1)はそのようなマウントポイントを自動的に作成します。
この従来の動作を回避するには、systemd.unified_cgroup_hierarchy=1
オプションを使用して起動します。このオプションは systemd v233のNEWSエントリ に従って将来的にデフォルトになる可能性があります。
説明のために、これらの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