blkioサブシステム
blkio
では,/sys/
というサブシステム専用のディレクトリを作成してから,blkio
サブシステムを指定してマウントし,test1
を作成します。その後,test1
グループに対して現在のシェルのPIDを登録します。
$ sudo mount -n -t cgroup -o blkio cgroup /sys/fs/cgroup/blkio/ (blkioサブシステムのマウント)
$ sudo mkdir /sys/fs/cgroup/blkio/test1
$ echo $$ | sudo tee -a /sys/fs/cgroup/blkio/test1/tasks
25462
ここでは/dev/
に対して単位時間辺りに書き込める量に制限をかけてみます。この時使用するファイルは以下のファイルです。
- blkio.
throttle. read_ bps_ device - デバイスからの読み込みの制限値
(バイト/ 秒) - blkio.
throttle. write_ bps_ device - デバイスへの書き込みの制限値
(バイト/ 秒)
制限をかけるにはデバイスのノード番号が必要です。このノード番号と制限値を以上のファイルに書き込むことで制限できます。またblkio
で制限ができないデバイスのノード番号を指定したり,/dev/
などのパーティションを指定したりするとエラーで書き込めません。
$ ls -l /dev/vdb brw-rw---- 1 root disk 253, 16 Jun 16 15:03 /dev/vdb
/dev/
のノード番号は 253:16 ですので,
$ echo "253:16 1048576" | sudo tee /sys/fs/cgroup/blkio/test1/blkio.throttle.write_bps_device 253:16 1048576 $ cat /sys/fs/cgroup/blkio/test1/blkio.throttle.write_bps_device 253:16 1048576
無事書き込めていますね。複数のデバイスに対する設定を行う場合は,
$ echo "253:0 1048576" | sudo tee /sys/fs/ cgroup/ blkio/ test1/ blkio. throttle. write_ bps_ device 253:0 1048576 $ cat /sys/ fs/ cgroup/ blkio/ test1/ blkio. throttle. write_ bps_ device 253:0 1048576 253:16 1048576
/dev/
のノード番号である253:0
に対する制限を書き込むと,
制限を取り消したい場合は制限値として0
を書き込みます。
$ echo "253:0 0" | sudo tee /sys/fs/cgroup/blkio/test1/blkio.throttle.write_bps_device 253:0 0 $ cat blkio.throttle.write_bps_device 253:16 1048576
先ほど存在していた/dev/
に対する制限が消えていますね。
さて,
$ sudo dd if=/dev/zero of=/data/testfile bs=4K count=1024 oflag=direct 1024+0 records in 1024+0 records out 4194304 bytes (4.2 MB) copied, 4.00925 s, 1.0 MB/s
きちんと設定通りの値になっていますね。同様に読み込みの制限を設定してみましょう。
$ echo "253:16 1048576" | sudo tee /sys/fs/cgroup/blkio/test1/blkio.throttle.read_bps_device 253:16 1048576 $ dd if=/data/testfile of=/dev/null bs=4K count=1024 iflag=direct 1024+0 records in 1024+0 records out 4194304 bytes (4.2 MB) copied, 4.00191 s, 1.0 MB/s
書き込みと同様に制限がされているのがわかりますね。ここでは単位時間あたりのバイト数で制限しましたが,
上記のような設定を行うと,
- blkio.
throttle. io_ serviced - IO操作の回数
- blkio.
throttle. io_ service_ bytes - 転送されたバイト数
これも確認しておきましょう。
$ cat /sys/fs/cgroup/blkio/test1/blkio.throttle.io_serviced 253:16 Read 1027 253:16 Write 1024 253:16 Sync 2051 253:16 Async 0 253:16 Total 2051 Total 2051 $ cat /sys/fs/cgroup/blkio/test1/blkio.throttle.io_service_bytes 253:16 Read 4206592 253:16 Write 4194304 253:16 Sync 8400896 253:16 Async 0 253:16 Total 8400896 Total 8400896
I/
補足 (2015/ 07)
現時点では,
これは,
perf_ eventサブシステム
perf_
カーネル付属文書のperf-record.
net_ prioサブシステム
net_
優先度の設定と設定の確認にはnet_
ファイルを使います。ここまでの例と同様に/sys/
ディレクトリにマウントして試してみましょう。
ここの例はUbuntu 12.
$ sudo modprobe netprio_cgroup (net_prioのモジュールをロード)
$ sudo mount -n -t cgroup -o net_prio cgroup /sys/fs/cgroup/net_prio
$ sudo mkdir /sys/fs/cgroup/net_prio/test1
$ sudo mkdir /sys/fs/cgroup/net_prio/test2
ここではcgroupfsをマウントしたあと,test1
とtest2
という2つのグループを作成しました。まずはどのように制限値が設定されているか,
$ cat /sys/fs/cgroup/net_prio/test1/net_prio.ifpriomap lo 0 eth0 0 $ cat /sys/fs/cgroup/net_prio/test2/net_prio.ifpriomap lo 0 eth0 0
このようにインターフェースごとの優先度の値が書かれています。cgroupを作成した時のデフォルト値は親グループのnet_
の値が使われます。
それではここで作成した2つのグループに優先度を設定してみます。test1
グループに1を,test2
グループに10を設定します。数字が大きい方が優先度が高くなります。
$ echo "eth0 1" | sudo tee /sys/fs/cgroup/net_prio/test1/net_prio.ifpriomap eth0 1 $ echo "eth0 10" | sudo tee /sys/fs/cgroup/net_prio/test2/net_prio.ifpriomap eth0 10 $ cat /sys/fs/cgroup/net_prio/test1/net_prio.ifpriomap lo 0 eth0 1 $ cat /sys/fs/cgroup/net_prio/test2/net_prio.ifpriomap lo 0 eth0 10
それぞれのグループのnet_
ファイルを見ると,test2
グループの方が優先度が高く設定されました。
net_
- ※1)
- 執筆時点では
linux-image-3.
というカーネルがインストールされました。13. 0-30-generic
hugetlbサブシステム
HugeTLBはメモリを管理する単位であるページのサイズを大きくすることで,
nsサブシステム
nsサブシステムは前回の表1では紹介しませんでした。なぜかと言いますと,
元々は名前空間機能と連携してcgroupを作成する機能でした。2.cgroup.
機能が実装されるとともに,
2.