web-dev-qa-db-ja.com

マシンに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

しかし、「echo:write error:Invalid argument」と表示されました。この手順の前提条件が不足していますか?

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

docker -v
Docker version 17.09.1-ce, build aedabb7
7
user3397467

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

mount -t cgroup2 none $MOUNT_POINT

上記のドキュメントを引用しているようです。見当たらない点の1つは、パスを作成する必要があることです。理由はありません理由あなたmust特定の場所でcgroupリソースを管理します。それは単なる慣習です。

たとえば、ディレクトリ/usr/monkeysが存在する限り、procfs/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
Brian Redbeard

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

grep cgroup /proc/filesystems

システムがcgroupv2をサポートしている場合は、次のように表示されます。

nodev   cgroup
nodev   cgroup2

Cgroupv1のみのシステムでは、次のように表示されます。

nodev   cgroup
10
Wadih M.