FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
您的足迹: cgroup blkio测试
cgroup blkio测试

一、准备

术语

  • IOPS, Input/Output Per Second, 每秒钟磁盘IO次数。
  • bps, Byte Per Second, 每秒种磁盘读写数据量。

内核配置要求

首先内核配置必须要满足如下要求:

CONFIG_BLK_CGROUP=y
CONFIG_BLK_DEV_THROTTLING=y

配置在/boot/config-XXX文件,例如:/boot/config-3.10.0-957.el7.x86_64

查询磁盘设备号

使用 ls -l 命令,或者 lsblk 命令。例如,下图中/dev/sda1的设备号(major:minor)为 8:1 。

img

或者使用其它方法获取,例如:

snippet.bash
[root@yz219 blkio]# cat /proc/partitions
major minor  #blocks  name
 
   8        0  209715200 sda
   8        1    1048576 sda1
   8        2  208665600 sda2
  11        0    4391936 sr0
 253        0   52428800 dm-0
 253        1    5111808 dm-1
 253        2  151117824 dm-2

准备cgroup

假设blkio挂载点在:

snippet.bash
[yz@yz219 blkio]$ pwd
/sys/fs/cgroup/blkio

准备测试将使用的层级:

snippet.bash
[yz@yz219 blkio]$ sudo mkdir yz
[yz@yz219 blkio]$ sudo chown yz:yz -R yz
[yz@yz219 blkio]$ cd yz/
[yz@yz219 yz]$ mkdir 1
[yz@yz219 yz]$ mkdir 2
[yz@yz219 yz]$ ll
drwxrwxr-x 2 yz yz 0 621 09:38 1
drwxrwxr-x 2 yz yz 0 621 09:38 2
……
-r--r--r-- 1 yz yz 0 621 09:37 blkio.throttle.io_service_bytes
-r--r--r-- 1 yz yz 0 621 09:37 blkio.throttle.io_serviced
-rw-r--r-- 1 yz yz 0 621 09:37 blkio.throttle.read_bps_device
-rw-r--r-- 1 yz yz 0 621 09:37 blkio.throttle.read_iops_device
-rw-r--r-- 1 yz yz 0 621 09:37 blkio.throttle.write_bps_device
-rw-r--r-- 1 yz yz 0 621 09:37 blkio.throttle.write_iops_device
-rw-r--r-- 1 yz yz 0 621 09:37 cgroup.clone_children
-rw-r--r-- 1 yz yz 0 621 09:37 cgroup.procs
-rw-r--r-- 1 yz yz 0 621 09:37 tasks

清缓存

在每次IO读写之前必须清理缓存:

snippet.bash
sync
echo 3 > /proc/sys/vm/drop_caches

二、测试

本文以rhel-home设备为例,设备号为253:2。

全系统限制测试

全系统限制设备的bps读速率为1M/s:

snippet.bash
[root@yz219 ~]# cd /sys/fs/cgroup/blkio
[root@yz219 blkio]# echo "253:2  1048576" > blkio.throttle.read_bps_device
[root@yz219 blkio]# cat blkio.throttle.read_bps_device
253:2 1048576

dd读盘:

snippet.bash
# 准备一个24M的文件:
[root@yz219 blkio]# ll -h /home/yz/customer.tbl
-rwxr-xr-x 1 root root 24M 621 10:07 /home/yz/customer.tbl
 
# 为保证测试准确,务必清缓存:
[root@yz219 blkio]# sync
[root@yz219 blkio]# echo 3 > /proc/sys/vm/drop_caches
 
# dd读文件
[root@yz219 blkio]# dd if=/home/yz/customer.tbl of=/dev/null bs=1M count=512
记录了23+1 的读入
记录了23+1 的写出
24196144字节(24 MB)已复制,23.3716 秒,1.0 MB/

进程限速

使用以下资源组做测试:

snippet.bash
# 先解除全系统的限制:
[root@yz219 blkio]# pwd
/sys/fs/cgroup/blkio
[root@yz219 blkio]# echo "253:2  0" > blkio.throttle.read_bps_device
[root@yz219 blkio]# cat blkio.throttle.read_bps_device
 
# 在资源组1做限制:
[root@yz219 blkio]# cd yz/1
[root@yz219 1]# pwd
/sys/fs/cgroup/blkio/yz/1
[root@yz219 1]# echo "253:2  1048576" > blkio.throttle.read_bps_device
[root@yz219 1]# cat blkio.throttle.read_bps_device
253:2 1048576

准备一个测试脚本:

snippet.bash
[root@yz219 1]# vim ~/ioblk_demo.sh
sync
echo 3 > /proc/sys/vm/drop_caches
 
dd if=/home/yz/customer.tbl of=/dev/null bs=1M count=512 &
echo $! > /sys/fs/cgroup/blkio/yz/1/tasks

执行脚本,大约24秒后会在终端输出dd结果:

snippet.bash
[root@yz219 1]# ~/ioblk_demo.sh 
[root@yz219 1]# 记录了23+1 的读入
记录了23+1 的写出
24196144字节(24 MB)已复制,23.0069 秒,1.1 MB/秒
^C

在脚本执行过程中,我们可以检查以下资源组1中的PID是否为预期值:

snippet.bash
[root@yz219 ~]# cat /sys/fs/cgroup/blkio/yz/1/cgroup.procs 
68246
[root@yz219 ~]# cat /sys/fs/cgroup/blkio/yz/1/tasks 
68246
[root@yz219 ~]# ps ux | grep customer.tbl
root      68246  0.0  0.0 109132  1408 pts/4    D    10:35   0:00 dd if=/home/yz/customer.tbl of=/dev/null bs=1M count=512

三、参考



打赏作者以资鼓励: