自分のコンピュータにcgroup v2がインストールされていることをどうやって確認できますか?

自分のコンピュータにcgroup v2がインストールされていることをどうやって確認できますか?

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 

フォローアップの質問 助けてくれたブライアンに感謝します。新しい質問を作成する必要があるかどうか教えてください。ただここに質問をすれば他の人に役立つと思いました。

1)マニュアルのコマンドに従ってcgroupコントローラを追加することはできません。

>> echo "+cpu +memory -io" > cgroup.subtree_control

ただし、「エコー:書き込みエラー:無効な引数」というメッセージが表示されます。この段階の前提条件がありませんか?

2)Dockerコンテナを実行しましたが、Dockerデーモンログに「/sys/fs/cgroup/cpuset/docker/cpuset.cpus」が見つからないと文句を言いました。 dockerがまだcgroupv1を期待しているようです。私のdockerデーモンでcgroupv2サポートを有効にする最良の方法は何ですか?

docker -v
Docker version 17.09.1-ce, build aedabb7

答え1

次のコマンドを実行できます。

grep cgroup /proc/filesystems

システムが cgroupv2 をサポートしている場合は、以下が表示されます。

nodev   cgroup
nodev   cgroup2

cgroupv1 のみを持つシステムでは、以下のみが表示されます。

nodev   cgroup

答え2

最も簡単な方法は、偽のファイルシステムをマウントすることです。どこかにインストールできる場合は、次のインターフェイスを使用してプロセスを管理できます。

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

答え3

cgroups v2 がサポートされているかどうかだけでなく、次の機能を使用して有効になっているかどうかを確認することは関係ありません。

stat -fc %T /sys/fs/cgroup/

出力状態cgroup2fsがcgroup v2tmpfsの場合、cgroup v1です。システムがcgroups v2をサポートしているがデフォルトで有効になっていない場合は、systemd.unified_cgroup_hierarchy=1カーネルパラメータを設定して有効にできます(GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=1"GRUBを使用するシステムなど)。

答え4

一部のシステムはデフォルトでcgroup v1とcgroup v2をマウントしますが、場所は異なります。次の点がどこにあるかを確認するのに役立ちます。

grep ^cgroup /etc/mtab

出力例(Ubuntu 20.04 LTS):

cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0

しかし、これはあなたのシステムが次のようなものであるかどうかを厳密に伝えません。サポートするcgroup v2.0 別の答えで述べたように、grep cgroup /proc/filesystemsこれは非常に便利です。

関連情報