cgroup v2コアで使用する4.14カーネルで追加されたファイル
第38回でcgroup v2コアで使用するファイルについて紹介しました。いずれもcgroup.
で始まるファイルでした。
その後,
いずれも4.
表1 cgroup v2コアで使用するファイル
ファイル名 | 説明 | 可能な操作 | デフォルト値 |
---|---|---|---|
cgroup. |
そのcgroupの現在のタイプ。root以外に存在 | 読み書き | - |
cgroup. |
そのcgroupに属するスレッドの登録, |
読み書き | - |
cgroup. |
そのcgroupが持てる子孫の深さ | 読み書き | max |
cgroup. |
そのcgroupが持てる子孫の最大数 | 読み書き | max |
cgroup. |
cgroupのステータス | 読み込み | - |
表1が4.
$ uname -r 4.14.44-plamo64 $ sudo mount -t cgroup2 cgroup2 /sys/fs/cgroup/ $ ls /sys/fs/cgroup/ (cgroup rootにあるファイルを確認) cgroup.controllers cgroup.procs cgroup.threads cgroup.max.depth cgroup.stat cgroup.max.descendants cgroup.subtree_control (cgroup.threads, cgroup.max.depth, cgroup.max.descendants, cgroup.statが存在) $ sudo mkdir /sys/fs/cgroup/test01 $ ls /sys/fs/cgroup/test01 cgroup.controllers cgroup.max.descendants cgroup.subtree_control io.max cgroup.events cgroup.procs cgroup.threads io.stat cgroup.max.depth cgroup.stat cgroup.type (cgroup rootでなければcgroup.typeファイルが存在)
それでは,
スレッドモード
4.
表1で紹介した,
- cgroup.
type - cgroup.
threads
cgroup.
ファイルは,
cgroup.
ファイルは,cgroup.
ファイルのスレッド版で,tasks
ファイルと同様のファイルです。
スレッドモードを説明すると長くなりますので,
cgroupの子孫の制御
4.
これは,
cgroup.max.depth
cgroup.
ファイルは,max
であり,
"test1" cgroupを作成し,cgroup.
ファイルに2
を書き込み,
$ sudo mkdir /sys/fs/cgroup/test1 (cgroupの作成) $ echo 2 | sudo tee /sys/fs/cgroup/test1/cgroup.max.depth (子孫の深さを2に制限) 2 $ cat /sys/fs/cgroup/test1/cgroup.max.depth (設定を確認) 2
制限を2に設定しました。設定が確認できましたので,
$ sudo mkdir /sys/fs/cgroup/test1/test2 (子cgroupを作成) $ sudo mkdir /sys/fs/cgroup/test1/test2/test3 (孫cgroupを作成) $ sudo mkdir /sys/fs/cgroup/test1/test2/test3/test4 mkdir: cannot create directory ‘/sys/fs/cgroup/test1/test2/test3/test4’: Resource temporarily unavailable (ひ孫cgroupを作成しようとするとエラーになる)
"test1" cgroupの子として"test2",
cgroup.
の制限にひっかかった場合は,EAGAIN
が返ります。
ここで"test2",cgroup.
ファイルはどうなっているのか確認してみましょう。
$ cat /sys/fs/cgroup/test1/test2/cgroup.max.depth
max
$ cat /sys/fs/cgroup/test1/test2/test3/cgroup.max.depth
max
(制限値を書き込んでいないcgroupではmaxのまま)
このように特に設定していないcgroupの制限は"max"となっています。この場合でも上位の"test1"で設定した制限が効いていますので,
cgroup.max.descendants
cgroup.
ファイルは,cgroup.
と同じく"max"であり,
"test1"のcgroup.
ファイルに2
を書き込み,
$ sudo mkdir /sys/fs/cgroup/test1 (cgroupの作成) $ echo 2 | sudo tee /sys/fs/cgroup/test1/cgroup.max.descendants (子孫の数を2に制限) 2 $ cat /sys/fs/cgroup/test1/cgroup.max.descendants (設定を確認) 2
制限を2に設定しました。設定が確認できましたので,
$ sudo mkdir /sys/fs/cgroup/test1/test2 (ひとつめの子cgroupを作成) $ sudo mkdir /sys/fs/cgroup/test1/test3 (ふたつめの子cgroupを作成) $ sudo mkdir /sys/fs/cgroup/test1/test4 mkdir: cannot create directory '/sys/fs/cgroup/test1/test4': Resource temporarily unavailable (3つめの子cgroupを作成しようとするとエラーになる)
3つめのcgroupを作るところでエラーになりました。cgroup.
と同様にEAGAIN
が返ります。
cgroup.stat
cgroupの統計情報が含まれているファイルで,
nr_
descendants - 利用できる子孫cgroupの数
nr_
dying_ descendants - 消滅途中の子孫cgroupの数
「消滅途中」
先のcgroup.
の例で,cgroup.
ファイルを確認してみましょう。
$ cat /sys/fs/cgroup/test1/cgroup.stat nr_descendants 2 nr_dying_descendants 0
子cgroupをふたつ作成したので,nr_
が2となっています。
まとめ
今回はcgroup v2に追加された新機能を紹介しました。
nsdelegateマウントオプションは,
そして,
次回からは,