前言

关于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

Kernel RBD的QOS配置方案的更多相关文章

  1. Atitit.兼具兼容性和扩展性的配置方案attilax总结

    Atitit.兼具兼容性和扩展性的配置方案attilax总结 文件配置法1 Jdbc多数据源文件配置发1 Bat文件配置法1 改进的文件配置法(采用类似i18n技术) 推荐1 使用自动化pc_id的方 ...

  2. Spring MVC之视图解析器和URL-Pattern的配置方案

    上期讲解了第一入门案例之后接下来了解一下视图解析器与URL-Pattern的配置方案 先来说视图解析器,在上次博客文章中我们完成了入门案例,接下来我们就在上一个例子中完善一下体出视图解析器 <? ...

  3. Apache安全配置方案

    Apache安全配置方案 from:http://drops.wooyun.org/%e8%bf%90%e7%bb%b4%e5%ae%89%e5%85%a8/2727 apache的一些配置主要是通过 ...

  4. web.config中sessionState节点的配置方案

    web.config中sessionState节点的配置方案 web.config关于sessionState节点的配置方案,sessionState有五种模式:Custom,off,inProc,S ...

  5. gVim 配置方案 采用Vundle管理插件

    在Linux下配置vim非常简单,尤其是采用Vundle来管理插件,使得一切用起来得心应手. Maple大神在github上公布了自己的vim配置方案,相当方便好用.详见 https://github ...

  6. mysql cluster 安装配置方案

    mysql cluster (mysql 集群)安装配置方案   一.准备 1.准备服务器 计划建立有5个节点的MySQL CLuster体系,需要用到5台服务器,但是我们做实验时没有这么多机器,可以 ...

  7. wlan的QOS配置

    WLAN QoS配置 1.1  WLAN QoS简介 802.11网络提供了基于竞争的无线接入服务,但是不同的应用需求对于网络的要求是不同的,而原始的网络不能为不同的应用提供不同质量的接入服务,所以已 ...

  8. Windows环境下python多版本配置方案

    系统环境 Windows,安装了msys2,windows和msys2都安装了python,且版本比较多,使用shell/bash聚合工具conemu64 配置方案 配置msys2环境用户目录下的.b ...

  9. openwrt l7过滤qos配置

    openwrt l7过滤qos配置     电梯直达 1# 本帖最后由 木鸟 于 2010-7-27 10:22 编辑 openwrt的qos基于hsfc.提供了分类标记,流量控制等功能,可能还有整形 ...

随机推荐

  1. PostgreSQL查询表名称及表结构

    1. 查询表名称 在psql状态下查询表名称 \dt SQL方式查看表名称 SELECT viewname FROM pg_views WHERE schemaname ='public' Postg ...

  2. spring boot:spring security+oauth2+sso+jwt实现单点登录(spring boot 2.3.3)

    一,sso的用途 ? 1,如果有多个应用系统,用户只需要登录一次就可以访问所有相互信任的应用系统. 不需要每次输入用户名称和用户密码, 也不需要创建并记忆多套用户名称和用户密码. 2,系统管理员只需维 ...

  3. Centos6.X 手动升级gcc

    操作环境 CentOS6.5 64bit,gcc原版本为4.4.7,不能支持C++11的特性,所以需要升级 [root@zengxj ~]# wget http://ftp.gnu.org/gnu/g ...

  4. C++ Primer第5版 第一章课后练习

    练习1.9 #include <iostream> int main() { int sum = 0, val = 50; while (val <= 100) { sum += v ...

  5. 【API管理 APIM】APIM集成内部VNet后,自我访问出现(Unable to connect to the remote server)问题,而Remote Server正是APIM它自己

    问题描述 在使用APIM配置内部VNET后,如API-1正常配置访问后端服务器的一个接口,而API-2则是通过调用APIM中的API-1来作为backendUrl,会出现500错误. 经过测试,目前这 ...

  6. C++ std::thread 多线程中的异常处理

    环境: VS2019 包含头文件: #include <iostream>#include<thread>#include<exception> 线程函数采用try ...

  7. MySQL开启日志记录执行过的SQL语句

    当需要分析执行过的SQL语句来判断问题,可以通过打开查询日志功能,但是重启MySQL服务后需要重新配置. 查询日志查询功能: SHOW VARIABLES LIKE 'general%'; gener ...

  8. Docker学习笔记之-部署.Net Core 3.1项目到Docker容器,并使用Nginx反向代理(CentOS7)(一)

    上一节演示如何安装Docker,链接:Docker学习笔记之-在CentOS中安装Docker 本节演示 将.net core 3.1 部署到docker容器当中,并使用 Nginx反向代理,部署平台 ...

  9. 利用ADB命令强制卸载oppo自带浏览器

    前言 oppo手机是自带oppo浏览器的,这个自带的浏览器带有oppo推荐的负面新闻很多,而且有时也自动推送一些消息给用户,页面不够简洁,打开浏览器负面内容比较多,所以想要强制卸载oppo浏览器,然后 ...

  10. golang开发:http请求redirect的问题

    这两天在开发项目的时候遇到了一个问题,请求了一个URL,它会302到另一个地址,本意上只是想检查这个URL是否会做3XX的redirect跳转,结果每次reqeust都会返回最后一跳的结果.后来就看了 ...