zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    对结构体的快速排序问题(用库函数)
    图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
    Linux root 密码重置与用户管理
    Linux command’s Array
    linux command intro2 vi
    Linux Commands intro1
    Beeline known issues
    spark加载hadoop本地库的时候出现不能加载的情况要怎么解决呢?
    spark Basic code demo
    HADOOP cluster some issue for installation
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575436.html
Copyright © 2011-2022 走看看