# 概述 cgroup的blkio.weight可以控制磁盘IO权重。 > blkio.weight:此参数用于指定一个 cgroup 在默认情况下可存取块 I/O 的相对比例(加权),范围是 100 到1000。该值可被指定设备的 blkio.weight_device 参数覆盖。 注意:该功能仅适用于CFQ磁盘调度算法(Linux内核磁盘IO电梯算法) # 测试 ## 查询与修改磁盘调度算法 查询磁盘调度算法,以下以sda盘为例: ```bash [yz@bogon ~]$ cat /sys/block/sda/queue/scheduler noop [deadline] cfq ``` 修改调度算法: ```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 切换当前目录: ```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: ```bash [yz@bogon yz]$ echo 1000 > hi/blkio.weight [yz@bogon yz]$ echo 100 > lo/blkio.weight ``` ## dd测试 分别从两个终端执行dd,对sda盘执行写操作: 终端1(高权重组): ```bash [yz@bogon ~]$ cgexec -g "blkio:yz/hi" dd if=/dev/zero of=./big.txt bs=10M oflag=direct ``` 终端2(低权重组): ```bash [yz@bogon ~]$ cgexec -g "blkio:yz/lo" dd if=/dev/zero of=./low.txt bs=10M oflag=direct ``` 执行一段时间后,查看两个dd的统计情况: ```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资源。 # 参考 * [Cgroup blkio简介和测试(使用fio测试)](https://www.cnblogs.com/jimbo17/p/8145582.html)