cgroupはキーと値のペアのリストですか、それともプロセスグループですか?

cgroupはキーと値のペアのリストですか、それともプロセスグループですか?

私はcgroupが特定の条件を満たすプロセスグループだと思います。http://man7.org/linux/man-pages/man7/cgroups.7.html

cグループはプロセス収集cgroupファイルシステムによって定義された制限またはパラメータセットにバインドされます。

与えられたPIDを持つプロセスのcgroupを見つけるのは正しいですか?ただ実行してください。

$ cat /proc/11/cgroup
12:perf_event:/
11:blkio:/
10:hugetlb:/
9:freezer:/
8:pids:/
7:cpuset:/
6:devices:/
5:cpu,cpuacct:/
4:rdma:/
3:memory:/
2:net_cls,net_prio:/
1:name=systemd:/
0::/

cgroupがID番号であることがわかりました。ただし、これはキーと値のペアのリストです。上記のKey-Valueペアのリストはプロセスのリストを表していますか?

同じcgroup内のすべてのプロセスを見つけることはできますか?

ありがとうございます。

答え1

引用したマニュアルページに記載されているように、cgroupはプロセスグループです。

の内容は、/proc/11/cgroupプロセス11が属する全ての制御グループを記述する。 v1グループの場合、各行の最初のフィールドは階層ID、2番目のフィールドはコントローラのリスト、3番目のフィールドは階層内のcgroupのパス名です。 v2 グループの場合、最初のフィールドは 0 で、2 番目のフィールドは空で、3 番目のフィールドはパス名です。

特定のcgroup内のすべてのプロセスを見つけ、tasksそのsysfsディレクトリのファイルを表示します。例えば

cat /sys/fs/cgroup/perf_event/tasks

以下に該当します12:perf_event:/

| /sys/fs/cgroup/ | perf_event | / | tasks
|                 |            |   |
|<  mountpoint   >|<controller>| ^ |
                                 |
               cgroup pathname --+

答え2

Stephen Kittは悪い例のためのパス構造を説明するあなたを嘲笑します。ここに良い例があります。プロセスPID 1595に関連するCPUコントローラcgroupのタスクをリストします。cat /proc/1595/cgroup私たちに与える

12:hugetlb:/
11:rdma:/
10:net_cls,net_prio:/
9:freezer:/
8:blkio:/system.slice/containerd.service
7:cpuset:/
6:cpu,cpuacct:/system.slice/containerd.service
5:devices:/system.slice/containerd.service
4:pids:/system.slice/containerd.service
3:memory:/system.slice/containerd.service
2:perf_event:/
1:name=systemd:/system.slice/containerd.service
0::/system.slice/containerd.service

したがって、CPUコントローラの行は、6:cpu,cpuacct:/system.slice/containerd.serviceグループ内のプロセスを読み取ることができるリストです/sys/fs/cgroup/cpu/system.slice/containerd.service/tasks。ファイルにはtasksスレッドもリストされています。このパスはcgroupリソース割り当ての階層構造を表し、親system.sliceグループに属しますcontainerd.service。 Stephenは、ルートパスの例では、/パス内に1つのパスしかありませんが、実際には言葉ではないと説明しています。

階層をすばやく調べたい場合は、systemd-cgls cpuそれを呼び出してこの下位レベルのprocfsファイルを調べて素敵なツリーを描画できます。

関連情報