cgroup v2 - arosh/arosh.github.com GitHub Wiki
mount を見てみると分かるが、デフォルトでも cgroup v2 はマウントされている。しかし cgroup v1 と cgroup v2 で同じコントローラーを使うことはできない。よって cgroup v2 側でなにも使うことができない。
$ echo "+io" | sudo tee /sys/fs/cgroup/unified/cgroup.controllers
+io
tee: /sys/fs/cgroup/unified/cgroup.controllers: Invalid argument
$
よってブートオプションを設定する。GRUB_CMDLINE_LINUX_DEFAULT
は通常起動モード(≠ リカバリーモード)で追加するオプションを指定する。
https://askubuntu.com/a/780545
sudoedit /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT に systemd.unified_cgroup_hierarchy=1 を追加
sudo update-grub
sudo reboot
これで io コントローラーが有効になった。
$ cat /sys/fs/cgroup/cgroup.controllers
cpuset cpu io memory pids rdma
$
$ sudo mkdir /sys/fs/cgroup/foo
$ echo $$ | sudo tee /sys/fs/cgroup/foo/cgroup.procs
824
$ echo '253:0 wbps=1000000' | sudo tee /sys/fs/cgroup/foo/io.max
253:0 wbps=1000000
$ dd if=/dev/zero of=foo bs=4096 count=2560 conv=fsync
2560+0 records in
2560+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 10.5144 s, 997 kB/s
$
$ echo '253:0 rbps=1000000' | sudo tee /sys/fs/cgroup/foo/io.max
253:0 rbps=1000000
$ cat /sys/fs/cgroup/foo/io.max
253:0 rbps=1000000 wbps=1000000 riops=max wiops=max
$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3
$ dd if=foo of=/dev/null bs=4096 count=2560
2560+0 records in
2560+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 10.7862 s, 972 kB/s
$
関連情報
- https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html
- https://gihyo.jp/admin/serial/01/linux_containers/0037
- https://gihyo.jp/admin/serial/01/linux_containers/0038
- https://gihyo.jp/admin/serial/01/linux_containers/0039
- https://gihyo.jp/admin/serial/01/linux_containers/0040
- https://gihyo.jp/admin/serial/01/linux_containers/0041
- https://gihyo.jp/admin/serial/01/linux_containers/0045
- https://gihyo.jp/admin/serial/01/linux_containers/0046
- https://qiita.com/kakinaguru_zo/items/ed5941639daafa3ef9d9
- https://qiita.com/kakinaguru_zo/items/cb18bd8f7aa92c11f6bf
- https://facebookmicrosites.github.io/cgroup2/docs/io-controller.html
- https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/setting-limits-for-applications_managing-monitoring-and-updating-the-kernel
- https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/resource_management_guide/index
- https://tenforward.hatenablog.com/entry/20160414/1460560309
- https://blog.kit494way.dev/2020/05/linux-cgroup-v2/