第37回で説明した通り、cgroup v1には様々な問題点が指摘されており、その問題を解決すべくcgroup v2が実装されました。
cgroup v1では、各コントローラがバラバラに実装されており、コントローラ間の連携が取れませんでした。これが原因で、リソースを制限するにあたって一番表面化していた問題が、ディスクI/
LinuxでのI/O
コントローラ間で連携ができないため、blkioコントローラを使ったI/
ご存知の通り、CPUからメモリにアクセスする速度に比べて、ディスクへのアクセスは非常に遅いです。最近はストレージデバイスがSSDなどの高速なデバイスになりましたが、それでもメモリにアクセスする速度に比べると非常に遅いです。
このためLinuxでは、ページキャッシュという仕組みを使い、なるべく高速にファイルへアクセスできるようにしています。キャッシュというとおり、図1のように一度メモリ上にファイルのデータをコピーして、そこからファイルデータへアクセスします。
ページキャッシュにデータがある状態で、システム上のプロセスがこのデータにアクセスすると、図2のようにページキャッシュから直接データを読み込み、ディスクへのアクセスは行われません。
プロセスがファイルに書き込んだ場合は、図3のようにページキャッシュにのみデータが書き込まれます。このとき、ディスクとページキャッシュ上のデータが異なるという印がつけられます。
ページキャッシュからディスクへのデータの書き込みは、書き込んだプロセスとは関係なく行われます。これはカーネルが行う仕事です。
つまり、ファイルを読み込む際はメモリを介して読み込みますし、書き込む際はメモリへの書き込みしか行いません。このため、memoryコントローラーとioコントローラが連携していないときちんとI/
そもそも、cgroup v1は複数の階層を持てますので、memoryコントローラとblkioコントローラが別々にマウントされ、階層内の構造が異なる可能性があります。あるプロセスが、memoryコントローラとblkioコントローラそれぞれの階層内で、異なる位置にあるcgroupに属している可能性があります。このような場合、技術的に連携ができたとしても、連携ができない状態でcgroupに属している可能性がありますので、連携させることができません。
通常のファイルI/
以上のように、cgroup v1ではダイレクトI/
ライトバック処理
図4で説明した、ページキャッシュからディスクへの書き込みについても少し説明しておきます。このようなページキャッシュからディスクへの書き込みをライトバック処理といいます。
図3のように、ページキャッシュにデータが書かれると、ページキャッシュ上のデータとディスク上のデータ間に相違が生じます。つまりページキャッシュ上のデータはディスクに書き戻さなければいけないデータということになります。このような状態をダーティ
ダーティなデータは、図4で説明したようにファイルへの書き込みを行ったプロセスとは関係なく、カーネルが定期的にメモリ上に存在するファイルデータをディスクに書き込みます。
つまり、明示的にcgroupに属するように指定したプロセスとは異なるカーネルのタスクがディスクへ書き込みます。このため、memoryコントローラとioコントローラが連携する必要があるわけです。memoryコントローラ側で、ファイルのキャッシュとして存在するどこのメモリ領域がどのcgroupに属しているかを管理しておく必要があるためです。
このあたりの仕組みについては、カーネル付属のcgroup v2ドキュメント内の"Writeback"というセクションに書かれています。
ページキャッシュからディスクへの書き込みは、次のようなカーネルパラメータに設定されている値を使いながら行われます。設定や参照はsysctl
コマンドで行えます。ここでは、今回の説明に関係するパラメータだけを紹介します。
パラメータ名 | 役割 | 単位 |
---|---|---|
vm. |
ダーティなデータの割合がこの値に達したときにバックグラウンドでディスクへ書き出される。使用可能なメモリに対する割合 | % |
vm. |
ダーティなデータがこの値に達したときにバックグラウンドでディスクへ書きだされる | バイト |
vm. |
ダーティなデータの割合がこの値に達したときにプロセス自身がディスクに書きだし始める | % |
vm. |
ダーティなデータがこの値に達したときにプロセス自身がディスクに書きだし始める | バイト |
_ratio
で終わるファイルと_bytes
で終わるファイルはどちらか一方しか設定できません。どちらかに値が設定されると、対応するもう1つの設定は"0"に設定され、無効化されます。background
のほうは、設定値に達するとカーネルがバックグラウンドで書き込みを始めます。background
でないほうは、設定値に達すると書き込みを行っているプロセス自体が書き込みするようになります。
なぜ、このような説明をしたかというと、ディスクI/
このためあとで紹介する実行例では、実際に制限が効いていることがわかりやすいように、vm.
に設定する値を調整して実行します。
cgroup v1でblkioコントローラを使ったI/O制限
cgroup v1のblkioコントローラをこの連載で紹介したのは第5回でした。cgroup v2でのI/
cgroup v1のblkioコントローラ用ファイル
cgroup v1で制限値を設定する場合に使うファイルは、表2のファイルでした。
ファイル名 | 機能 |
---|---|
blkio. |
デバイスからの読み込みの制限値の設定と確認 |
blkio. |
デバイスへの書き込みの制限値の設定と確認 |
blkio. |
デバイスからの読み込みの制限値の設定と確認 |
blkio. |
デバイスへの書き込みの制限値の設定と確認 |
これらのファイルにメジャー番号:マイナー番号 制限値
のフォーマットで書き込みます。ファイルの設定値を確認する場合もこのフォーマットで表示されます。
cgroup v1のblkioコントローラを使ったダイレクトI/Oに対する制限
ここでは、test01
というcgroupを作成し、そこに/dev/
として認識されているディスクに制限値を設定します。blkio.
とblkio.
で制限値を設定します。
blkioコントローラに制限値を設定する場合は、デバイスのメジャー番号とマイナー番号が必要ですので、それも調べておきましょう。
$ sudo mkdir /sys/fs/cgroup/blkio/test01 (test01 cgroupの作成) $ ls -l /dev/vdb brw-rw---- 1 root disk 252, 16 Feb 23 16:20 /dev/vdb (/dev/vdbのメジャー番号は252、マイナー番号は16) $ sudo mount /dev/vdb /mnt (/mntに/dev/vdbをマウント)
/dev/
に1Mバイト/秒の制限値を設定するには、252:16 1048576
という文字列をファイルに書き込みます。
$ echo "252:16 1048576" | sudo tee /sys/fs/cgroup/blkio/test01/blkio.throttle.read_bps_device (読み込みの制限値の設定) 252:16 1048576 $ echo "252:16 1048576" | sudo tee /sys/fs/cgroup/blkio/test01/blkio.throttle.write_bps_device (書き込みの制限値の設定) 252:16 1048576 $ cat /sys/fs/cgroup/blkio/test01/blkio.throttle.{read,write}_bps_device 252:16 1048576 252:16 1048576 (設定できた) $ echo $$ | sudo tee /sys/fs/cgroup/blkio/test01/cgroup.procs (シェルのPIDをtest01に登録) 1024
それでは/dev/
に対して書き込んでみましょう。I/-direct=1
でダイレクトI/
$ sudo fio -filename=/mnt/testfile -direct=1 -rw=randwrite -bs=1M -size=16M -name=testfile testfile: (g=0): rw=randwrite, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 fio-3.16 Starting 1 process Jobs: 1 (f=1): [w(1)][94.1%][w=1024KiB/s][w=1 IOPS][eta 00m:01s] :(略) Run status group 0 (all jobs): WRITE: bw=1024KiB/s (1048kB/s), 1024KiB/s-1024KiB/s (1048kB/s-1048kB/s), io=16.0MiB (16.8MB), run=16008-16008msec :(略) (設定通り1Mバイト/秒に制限されている)
続いて読み込みも行ってみます。
$ sudo fio -filename=/mnt/testfile -direct=1 -rw=randread -bs=1M -size=16M -name=testfile testfile: (g=0): rw=randread, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 fio-3.16 Starting 1 process Jobs: 1 (f=1): [r(1)][94.1%][r=1024KiB/s][r=1 IOPS][eta 00m:01s] :(略) Run status group 0 (all jobs): READ: bw=1024KiB/s (1048kB/s), 1024KiB/s-1024KiB/s (1048kB/s-1048kB/s), io=16.0MiB (16.8MB), run=16005-16005msec :(略) (設定通り1Mバイト/秒に制限されている)
いずれも1Mバイト/秒
cgroup v1のblkioを使った通常のI/Oに対する制限
それでは、cgroup v1のblkioコントローラで、ダイレクトI/-direct
オプションを与えなくてもデフォルトでダイレクトI/-direct=0
とオプション指定しています。
書き込みのとき
まずは書き込みです。
$ sudo fio -filename=/mnt/testfile -direct=0 -rw=write -bs=1M -size=128M -name=testfile testfile: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 fio-3.16 Starting 1 process :(略) Run status group 0 (all jobs): WRITE: bw=1662MiB/s (1743MB/s), 1662MiB/s-1662MiB/s (1743MB/s-1743MB/s), io=128MiB (134MB), run=77-77msec :(略)
図3で説明したように、書き込みは一度メモリ上のページキャッシュに対して行われ、その後図4のように書き込んだプロセスとは別にディスクに書き込まれます。つまり、コマンドの結果は、速度は実際にはディスクに書き込んでいる速度ではありませんので、別に起動したシェルでiostat
コマンドを実行し、制限が効いているか確認してみましょう。
$ iostat -p /dev/vdb 1 | grep vdb :(略) vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 48.00 0.00 53280.00 0.00 0 53280 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 30.00 0.00 34056.00 0.00 0 34056 0 vdb 39.00 0.00 43780.00 0.00 0 43780 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 0.00 0.00 0.00 0.00 0 0 0 :(略)
上のiostat
の出力を見ると、その際の書き込みでは制限がかかっていません。常時ライトバック処理が行われているわけではない様子もうかがえます。
あとで行うcgroup v2での書き込み制限での例と比較できるように、なるべく書き込みが起こった直後にライトバック処理が行われるように設定をして試してみます。
ダーティなデータが使用できるメモリの1%に達したときに、カーネルがライトバック処理を行うように、vm.
を1に設定します。このように設定するとかなりダイレクトI/background
のほうのパラメータに設定しましたので、書き込みを行ったプロセスとは別にカーネルが書き込むはずです。
$ sudo sysctl -w vm.dirty_background_ratio=1 (vm.dirty_background_ratioを1に設定する) $ sysctl vm.dirty_background_ratio vm.dirty_background_ratio = 1 (設定されたことを確認)
別のシェルでiostat
コマンドを実行した状態でさきほどと同じコマンドを実行してみましょう。
$ sudo fio -filename=/mnt/testfile -direct=0 -rw=write -bs=1M -size=16M -name=testfile testfile: (g=0): rw=randwrite, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 fio-3.16 Starting 1 process :(略) Run status group 0 (all jobs): WRITE: bw=615MiB/s (645MB/s), 615MiB/s-615MiB/s (645MB/s-645MB/s), io=16.0MiB (16.8MB), run=26-26msec :(略)
このとき、iostat
の出力は次のようになりました。
$ iostat -p /dev/vdb 1 | grep vdb :(略) vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 86.00 0.00 106496.00 0.00 0 106496 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 21.00 0.00 24584.00 0.00 0 24584 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 1.00 0.00 4.00 0.00 0 4 0 :(略)
さきほどの例と同じように制限は効いていません。
このように、cgroup v1ではダイレクトI/
読み込みのとき
読み込みはどうでしょう? 図1のように、メモリ上にファイルのデータがない状態だと、ディスクから読み込む必要がありますので、読み込みでは制限が効きそうです。試してみましょう。
$ sudo fio -filename=/mnt/testfile -direct=0 -rw=read -bs=1M -size=128M -name=testfile testfile: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 fio-3.16 Starting 1 process :(略) Run status group 0 (all jobs): READ: bw=1024KiB/s (1048kB/s), 1024KiB/s-1024KiB/s (1048kB/s-1048kB/s), io=128MiB (134MB), run=128022-128022msec :(略)
1Mバイト/秒
さきほど行った書き込みのテストの直後に、このように読み込みのテストを行うと、ページキャッシュからデータが読まれて一瞬で終わるはずではないか?
ここで、上の読み込みテストを行った直後に、再度fioでキャッシュをクリアしないように指定して同じ処理を実行すると、メモリからデータを読むので制限と関係なく処理が終わるはずです。キャッシュのクリアを無効化するには-invalidate=0
を指定します。
$ sudo fio -filename=/mnt/testfile -direct=0 -rw=read -bs=1M -size=128M -name=testfile -invalidate=0 testfile: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 fio-3.16 :(略) Run status group 0 (all jobs): READ: bw=7111MiB/s (7457MB/s), 7111MiB/s-7111MiB/s (7457MB/s-7457MB/s), io=128MiB (134MB), run=18-18msec :(略)
実行が一瞬で終わり、結果も制限値を大きく上回っています。キャッシュからデータが読み込まれたことがわかります。
以上のように、cgroup v1のblkioコントローラでは、次のような動きになることが確認できました。
- ダイレクトI/
Oに対しては設定どおりにI/ O制限がかかる - ダイレクトI/
Oではない場合、書き込みでは設定通りにI/ O制限がかからない
cgroup v2でのioコントローラを使ったI/O制限
それでは、いよいよcgroup v2のioコントローラを紹介していきましょう。ここではUbuntu 22.
cgroup v2のioコントローラ用ファイル
cgroup v2のioコントローラでI/io.
ファイルを使います。カーネルの設定によっては、保証値を設定するためのio.
というファイルが出現していることもあります。このファイルはカーネルの設定次第で出現します。Ubuntu 22.io.
ファイルはありません。
ファイル名 | 機能 |
---|---|
io. |
デバイスごとのI/ |
v1では秒あたりのバイト数での制限、IOPSでの制限それぞれの読み書きすべてで別々にファイルが存在していましたが、v2では1つのファイルにすべてを設定します。
書式は、v1と同じくデバイスのメジャー番号とマイナー番号を使います。そして、デバイスを指定したあとに制限値を設定します。その際には表4のキーを使います。また、設定値を確認する際にも同じキーを使って設定値が表示されます。
キー名 | 設定内容 |
---|---|
rbps | 読み込みの制限値 |
wbps | 書き込みの制限値 |
riops | 読み込みの制限値 |
wiops | 書き込みの制限値 |
設定はメジャー番号:マイナー番号 [設定値]...
」io.
に書き込みます。設定値は表4のキー名と制限値をイコール=
)
このように、io.
は、第49回で紹介したインターフェースファイルのフォーマットのうち、8:16
のデバイスに対して読み込みの制限を2Mバイト/秒に、書き込みの制限を120IOPSに設定するには、次のように実行します。
$ echo "8:16 rbps=2097152 wiops=120" | sudo tee io.max
上記のように設定したあと、設定値を確認するためにファイルを読み取ると次のように表示されます。
8:16 rbps=2097152 wbps=max riops=max wiops=120
設定しなかった項目については、デフォルト値であるmax
が表示されています。デフォルト値については第49回をご覧ください。
cgroup v2のioコントローラを使ったダイレクトI/Oに対する制限
それでは、cgroup v2のioコントローラを使ってI/
ここでもtest01
cgroupを作成します。そして、子cgroupでioコントローラが使えるようになっているかどうかを、root cgroup内に存在するcgroup.
ファイルで確認します。Ubuntu 22.cgroup.
ファイルにioコントローラが登録されています。
cgroup.
ファイルなどの、cgroup v2を操作するファイルに関する詳細については第38回をご覧ください。
$ sudo mkdir /sys/fs/cgroup/test01 (test01 cgroupの作成) $ cat /sys/fs/cgroup/cgroup.subtree_control (子cgroupでioコントローラが使えるようになっていることを確認) cpuset cpu io memory pids (ioが含まれているので使えるようになっている)
/dev/
を/mnt
にマウントし、そこに対する制限値を1Mバイト/秒に設定します。
$ sudo mount /dev/vdb /mnt (/dev/vdbを/mntにマウント) $ ls -l /dev/vdb brw-rw---- 1 root disk 252, 16 Mar 7 13:33 /dev/vdb (/dev/vdbのメジャー番号、マイナー番号を確認) $ echo "252:16 rbps=1048576 wbps=1048576" | sudo tee /sys/fs/cgroup/test01/io.max (/dev/vdbに対してI/Oの制限値を読み書きともに1MB/secに設定) 252:16 rbps=1048576 wbps=1048576 $ cat /sys/fs/cgroup/test01/io.max 252:16 rbps=1048576 wbps=1048576 riops=max wiops=max (読み書きともに1MB/secに設定されている) $ echo $$ | sudo tee /sys/fs/cgroup/test01/cgroup.procs (シェルのPIDをcgroupに登録) 1108
それではfio
コマンドでダイレクトI/
$ sudo fio -filename=/mnt/testfile -direct=1 -rw=write -bs=1M -size=128M -name=testfile (ダイレクトI/Oで書き込み) testfile: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 fio-3.28 Starting 1 process Jobs: 1 (f=1): [W(1)][99.2%][w=1024KiB/s][w=1 IOPS][eta 00m:01s] :(略) Run status group 0 (all jobs): WRITE: bw=1024KiB/s (1048kB/s), 1024KiB/s-1024KiB/s (1048kB/s-1048kB/s), io=128MiB (134MB), run=128015-128015msec :(略) (設定通り1Mバイト/秒に制限されている)
次に読み込みです。
$ sudo fio -filename=/mnt/testfile -direct=1 -rw=read -bs=1M -size=128M -name=testfile (ダイレクトI/Oで読み込み) testfile: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 fio-3.28 Starting 1 process Jobs: 1 (f=1): [R(1)][99.2%][r=1024KiB/s][r=1 IOPS][eta 00m:01s] :(略) Run status group 0 (all jobs): READ: bw=1024KiB/s (1049kB/s), 1024KiB/s-1024KiB/s (1049kB/s-1049kB/s), io=128MiB (134MB), run=128004-128004msec :(略) (設定通り1Mバイト/秒に制限されている)
設定通り1Mバイト/秒での読み書きに制限されています。ダイレクトI/
cgroup v2のioコントローラを使った通常のI/Oに対する制限
それでは、いよいよcgroup v2のioコントローラを使った、通常のI/
先に紹介した、cgroup v2のダイレクトI/
$ sudo mkdir /sys/fs/cgroup/test01 (test01 cgroupの作成) $ cat /sys/fs/cgroup/cgroup.subtree_control (子cgroupでioコントローラが使えるようになっていることを確認) cpuset cpu io memory pids $ mount /dev/vdb /mnt (/dev/vdbを/mntにマウント) $ echo "252:16 rbps=1048576 wbps=1048576" | sudo tee /sys/fs/cgroup/test01/io.max (/dev/vdbに対してI/Oの制限値を読み書きともに1MB/secに設定) 252:16 rbps=1048576 wbps=1048576 $ cat /sys/fs/cgroup/test01/io.max 252:16 rbps=1048576 wbps=1048576 riops=max wiops=max (読み書きともに1MB/secに設定されている)
次に、
$ sudo sysctl -w vm.dirty_background_ratio=1 (vm.dirty_background_ratioを1に設定する) $ sysctl vm.dirty_background_ratio vm.dirty_background_ratio = 1 (設定されたことを確認)
それでは実際にディスクへの書き込みを行ってみます。cgroup v1のところで試した際と同じようにfioコマンドを使用しています。
$ sudo fio -filename=/mnt/testfile -direct=0 -rw=randwrite -bs=1M -size=256M -name=testfile testfile: (g=0): rw=randwrite, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 fio-3.28 Starting 1 process Jobs: 1 (f=1): [w(1)][100.0%][w=1025KiB/s][w=1 IOPS][eta 00m:00s] :(略) Run status group 0 (all jobs): WRITE: bw=3413MiB/s (3579MB/s), 3413MiB/s-3413MiB/s (3579MB/s-3579MB/s), io=256MiB (268MB), run=75-75msec Disk stats (read/write): vdb: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
-direct=0
でダイレクトI/fio
コマンドはすぐに実行が終了します。
ここであらかじめ別に起動したシェルでiostat
コマンドを実行しておくと、次のようにバックグラウンドでゆっくり書き込まれていることがわかります。
$ iostat -p /dev/vdb 1 | grep 'vdb ' :(略) vdb 1.00 0.00 1024.00 0.00 0 1024 0 vdb 1.00 0.00 1024.00 0.00 0 1024 0 vdb 1.00 0.00 1024.00 0.00 0 1024 0 vdb 1.00 0.00 40.00 0.00 0 40 0 vdb 1.00 0.00 4.00 0.00 0 4 0 vdb 3.00 0.00 3072.00 0.00 0 3072 0 vdb 1.00 0.00 1024.00 0.00 0 1024 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 2.00 0.00 2048.00 0.00 0 2048 0 vdb 5.00 0.00 1052.00 0.00 0 1052 0 vdb 3.00 0.00 1040.00 0.00 0 1040 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 0.00 0.00 0.00 0.00 0 0 0 vdb 3.00 0.00 3072.00 0.00 0 3072 0 vdb 1.00 0.00 1024.00 0.00 0 1024 0 vdb 1.00 0.00 1024.00 0.00 0 1024 0 vdb 1.00 0.00 1024.00 0.00 0 1024 0 :(略)
ところどころ制限値を超えたりはしていますが、1024.
という値が表示されており、設定通りに制限が効いている様子が観察できました。
読み込み時も確認しておきましょう。
$ sudo fio -filename=/mnt/testfile -direct=0 -rw=read -bs=1M -size=16M -name=testfile testfile: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 fio-3.28 Starting 1 process Jobs: 1 (f=1): [R(1)][94.1%][r=1025KiB/s][r=1 IOPS][eta 00m:01s] :(略) Run status group 0 (all jobs): READ: bw=1023KiB/s (1048kB/s), 1023KiB/s-1023KiB/s (1048kB/s-1048kB/s), io=16.0MiB (16.8MB), run=16010-16010msec Disk stats (read/write): vdb: ios=39/0, merge=0/0, ticks=31/0, in_queue=31, util=0.95% (設定通りおよそ1Mバイト/秒に制限されている)
読み込みについては、cgroup v1のところで試した際と同様で、実際にディスクからデータが読み込まれますので、設定通りに制限が効いています。
以上のように、cgroup v2では、ダイレクトI/
まとめ
今回は、実行例を紹介している部分が長く、機能の説明については少しだけになってしまいましたが、cgroup v2一番の目玉となる改良点を紹介しました。
最初に説明したとおり、LinuxではメモリとI/
今回紹介したとおり、cgroup v2では、memoryコントローラとioコントローラが連携して、I/
参考文献
[試して理解] (技術評論社)Linuxのしくみ - Control Group v2 (カーネル付属文書)
- Writeback and control groups (LWN.
net)