cgroup之blkio.weight测试
概述
cgroup的blkio.weight可以控制磁盘IO权重。
blkio.weight:此参数用于指定一个 cgroup 在默认情况下可存取块 I/O 的相对比例(加权),范围是 100 到1000。该值可被指定设备的 blkio.weight_device 参数覆盖。
注意:该功能仅适用于CFQ磁盘调度算法(Linux内核磁盘IO电梯算法)
测试
查询与修改磁盘调度算法
查询磁盘调度算法,以下以sda盘为例:
- snippet.bash
[yz@bogon ~]$ cat /sys/block/sda/queue/scheduler noop [deadline] cfq
修改调度算法:
- snippet.bash
[yz@bogon ~]$ sudo sh -c "echo cfq > /sys/block/sda/queue/scheduler" [yz@bogon ~]$ cat /sys/block/sda/queue/scheduler noop deadline [cfq]
配置cgroup
切换当前目录:
- snippet.bash
[yz@bogon ~]$ cd /sys/fs/cgroup/blkio/yz/ [yz@bogon yz]$ mkdir hi [yz@bogon yz]$ mkdir lo
hi(高权重组)和lo(低权重组)的blkio.weight分别配置为1000和100:
- snippet.bash
[yz@bogon yz]$ echo 1000 > hi/blkio.weight [yz@bogon yz]$ echo 100 > lo/blkio.weight
dd测试
分别从两个终端执行dd,对sda盘执行写操作:
终端1(高权重组):
- snippet.bash
[yz@bogon ~]$ cgexec -g "blkio:yz/hi" dd if=/dev/zero of=./big.txt bs=10M oflag=direct
终端2(低权重组):
- snippet.bash
[yz@bogon ~]$ cgexec -g "blkio:yz/lo" dd if=/dev/zero of=./low.txt bs=10M oflag=direct
执行一段时间后,查看两个dd的统计情况:
- snippet.bash
[yz@bogon ~]$ cgexec -g "blkio:yz/hi" dd if=/dev/zero of=./big.txt bs=10M oflag=direct ^C记录了4993+0 的读入 记录了4993+0 的写出 52355399680字节(52 GB)已复制,250.286 秒,209 MB/秒 [yz@bogon ~]$ cgexec -g "blkio:yz/lo" dd if=/dev/zero of=./low.txt bs=10M oflag=direct ^C记录了224+0 的读入 记录了224+0 的写出 2348810240字节(2.3 GB)已复制,78.0385 秒,30.1 MB/秒
总体上两个优先级的IO速度差异很明显。
需要说明的是,两个组的速度比并不是10:1,主要原因是blkio.weight是当IO发生争抢时的优先级,当IO比较空闲时,两个组不按照上述权重分配IO资源。
参考
打赏作者以资鼓励: