Kernel RBD的QOS配置方案
前言
关于qos的讨论有很多,ceph内部也正在实现着一整套的基于dmclock的qos的方案,这个不是本篇的内容,之前在社区的邮件列表看过有研发在聊qos的相关的实现的,当时一个研发就提出了在使用kernel rbd的时候,可以直接使用linux的操作系统qos来实现,也就是cgroup来控制读取写入
cgroup之前也有接触过,主要测试了限制cpu和内存相关的,没有做io相关的测试,这个当然可以通过ceph内部来实现qos,但是有现成的解决方案的时候,可以减少很多开发周期,以及测试的成本
本篇将介绍的是kernel rbd的qos方案
时间过长
首先介绍下几个测试qos相关的命令,用来比较设置前后的效果
验证写入IOPS命令
fio -filename=/dev/rbd0 -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=4K -size=1G -numjobs=1 -runtime=60 -group_reporting -name=mytest
验证写入带宽的命令
fio -filename=/dev/rbd0 -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=4M -size=1G -numjobs=1 -runtime=60 -group_reporting -name=mytest
验证读取IOPS命令
fio -filename=/dev/rbd0 -direct=1 -iodepth 1 -thread -rw=read -ioengine=libaio -bs=4K -size=1G -numjobs=1 -runtime=60 -group_reporting -name=mytest
验证读取带宽命令
fio -filename=/dev/rbd0 -direct=1 -iodepth 1 -thread -rw=read -ioengine=libaio -bs=4M -size=1G -numjobs=1 -runtime=60 -group_reporting -name=mytest
上面为什么会设置不同的块大小,这个是因为测试的存储是会受到带宽和iops的共同制约的,当测试小io的时候,这个时候的峰值是受到iops的限制的,测试大io的时候,受到的是带宽限制,所以在做测试的时候,需要测试iops是否被限制住的时候就使用小的bs=4K,需要测试大的带宽的限制的时候就采用bs=4M来测试
测试的时候都是,开始不用做qos来进行测试得到一个当前不配置qos的性能数值,然后根据需要进行qos设置后通过上面的fio去测试是否能限制住
启用cgroup的blkio模块
mkdir -p /cgroup/blkio/
mount -t cgroup -o blkio blkio /cgroup/blkio/
获取rbd磁盘的major/minor numbers
[root@lab211 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
rbd0 252:0 0 19.5G 0 disk
sda 8:0 1 238.4G 0 disk
├─sda4 8:4 1 1K 0 part
├─sda2 8:2 1 99.9G 0 part
├─sda5 8:5 1 8G 0 part [SWAP]
├─sda3 8:3 1 1G 0 part /boot
├─sda1 8:1 1 100M 0 part
└─sda6 8:6 1 129.4G 0 part /
通过lsblk命令可以获取到磁盘对应的major number和minor number,这里可以看到rbd0对应的编号为252:0
设置rbd0的iops的qos为10
echo "252:0 10" > /cgroup/blkio/blkio.throttle.write_iops_device
如果想清理这个规则,把后面的数值设置为0就清理了,后面几个配置也是相同的方法
echo "252:0 0" > /cgroup/blkio/blkio.throttle.write_iops_device
限制写入的带宽为10MB/s
echo "252:0 10485760" > /cgroup/blkio/blkio.throttle.write_bps_device
限制读取的qos为10
echo "252:0 10" > /cgroup/blkio/blkio.throttle.read_iops_device
限制读取的带宽为10MB/s
echo "252:0 10485760" > /cgroup/blkio/blkio.throttle.read_bps_device
以上简单的设置就完成了kernel rbd的qos设置了,我测试了下,确实是生效了的
总结
这个知识点很久前就看到了,一直没总结,现在记录下,个人观点是能快速,有效,稳定的实现功能是最好的,所以使用这个在kernel rbd方式下可以不用再进行qos的开发了
变更记录
Why | Who | When |
---|---|---|
创建 | 武汉-运维-磨渣 | 2018-01-05 |