本文将测试一下使用cgroup的blkio组来控制IO吞吐量 :

测试环境CentOS 7.x x64

创建一个继承组

[root@150 rg1]# cd /sys/fs/cgroup/blkio/
[root@150 blkio]# mkdir rg1

继承组自动创建对应的限制文件

[root@150 blkio]# cd rg1
[root@150 rg1]# ll
total 0
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_merged
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_merged_recursive
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_queued
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_queued_recursive
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_service_bytes
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_service_bytes_recursive
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_serviced
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_serviced_recursive
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_service_time
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_service_time_recursive
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_wait_time
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.io_wait_time_recursive
-rw-r--r-- 1 root root 0 Dec 4 00:26 blkio.leaf_weight
-rw-r--r-- 1 root root 0 Dec 4 00:26 blkio.leaf_weight_device
--w------- 1 root root 0 Dec 4 00:26 blkio.reset_stats
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.sectors
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.sectors_recursive
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.throttle.io_service_bytes
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.throttle.io_serviced
-rw-r--r-- 1 root root 0 Dec 4 00:29 blkio.throttle.read_bps_device
-rw-r--r-- 1 root root 0 Dec 4 00:26 blkio.throttle.read_iops_device
-rw-r--r-- 1 root root 0 Dec 4 00:26 blkio.throttle.write_bps_device
-rw-r--r-- 1 root root 0 Dec 4 00:26 blkio.throttle.write_iops_device
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.time
-r--r--r-- 1 root root 0 Dec 4 00:26 blkio.time_recursive
-rw-r--r-- 1 root root 0 Dec 4 00:26 blkio.weight
-rw-r--r-- 1 root root 0 Dec 4 00:26 blkio.weight_device
-rw-r--r-- 1 root root 0 Dec 4 00:26 cgroup.clone_children
--w--w--w- 1 root root 0 Dec 4 00:26 cgroup.event_control
-rw-r--r-- 1 root root 0 Dec 4 00:26 cgroup.procs
-rw-r--r-- 1 root root 0 Dec 4 00:26 notify_on_release
-rw-r--r-- 1 root root 0 Dec 4 00:27 tasks

继承组的tasks为空.

找一个块设备作为测试目标, 注意现在只能控制块设备, 不能控制单个分区.

[root@150 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 40G 2.0G 38G 6% /
devtmpfs 48G 0 48G 0% /dev
tmpfs 48G 0 48G 0% /dev/shm
tmpfs 48G 25M 48G 1% /run
tmpfs 48G 0 48G 0% /sys/fs/cgroup
/dev/sda3 95G 2.8G 87G 4% /opt

例如我这里要控制/dev/sda这个块设备 :

[root@150 opt]# ll /dev/sda
brw-rw---- 1 root disk 8, 0 Nov 27 19:03 /dev/sda

将文件写入/dev/sda的一个文件系统中.

[root@150 rg1]# cd /opt
[root@150 opt]# dd if=/dev/zero of=./test.img bs=1k count=102400
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 0.350907 s, 299 MB/s

直接从块设备读取到/dev/null, 不限制的话, 速度是14MB/S

[root@150 opt]# dd if=./test.img of=/dev/null bs=1k count=102400 iflag=direct
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 7.43936 s, 14.1 MB/s

限制读吞吐量是1MB/s :

- Specify a bandwidth rate on particular device for root group. The format
for policy is "<major>:<minor> <bytes_per_second>".
[root@150 opt]# echo "8:0 1048576" > /sys/fs/cgroup/blkio/rg1/blkio.throttle.read_bps_device

将当前shell PID放到该组中

[root@150 opt]# echo $$ > /sys/fs/cgroup/blkio/rg1/tasks

再次读取, 速度被限制到1MB/S

[root@150 opt]# dd if=./test.img of=/dev/null bs=1k count=102400 iflag=direct
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 100.001 s, 1.0 MB/s

清除限制

[root@150 opt]# echo "8:0  0" > /sys/fs/cgroup/blkio/rg1/blkio.throttle.read_bps_device

清除后速度恢复

[root@150 opt]# dd if=./test.img of=/dev/null bs=1k count=102400 iflag=direct
102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 7.32235 s, 14.3 MB/s

RC: blkio throttle 测试的更多相关文章

  1. Cgroup blkio简介和测试(使用fio测试)

    Cgroup blkio简介和测试(使用fio测试) 因需要对docker镜像内的进程对磁盘读写的速度进行限制,研究了下Cgroup blkio,并使用fio对其iops/bps限速进行测试. Cgr ...

  2. cgroup测试存储设备IOPS分配

    1 使用:创建树并且attach子系统 首先要创建文件系统的挂载点作为树的根 mkdir /cgroup/name mkdir /cgroup/cpu_and_mem Mount这个挂载点到一个或者多 ...

  3. Windows RC版、RTM版、OEM版、RTL版、VOL版的区别

    Windows 版本号标识区别一览表: 版本缩写 版本全称 版本意义 Alpha版 Alpha 内部测试版,一般不会向外部发布,会有很多Bug,只供测试人员使用,如果您看到Alpha版本了,一般来讲对 ...

  4. webdriver介绍&与Selenium RC的比较

    什么是webdriver? webdriver是一个web自动化测试框架,不同于selenium IDE只能运行在firefox上,webdriver能够在不同的浏览器上执行你的web测试用例.其支持 ...

  5. Selenium私房菜系列6 -- 深入了解Selenium RC工作原理(1)

    前一篇已经比较详细讲述了如何使用Selenium RC进行Web测试,但到底Selenium RC是什么?或者它由哪几部分组成呢?? 一.Selenium RC的组成: 关于这个问题,我拿了官网上的一 ...

  6. 理解Docker(4):Docker 容器使用 cgroups 限制资源使用

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  7. Cgroups控制cpu,内存,io示例

    Cgroups是control groups的缩写,最初由Google工程师提出,后来编进linux内核. Cgroups是实现IaaS虚拟化(kvm.lxc等),PaaS容器沙箱(Docker等)的 ...

  8. [转载] linux cgroup

    原文: http://coolshell.cn/articles/17049.html 感谢左耳朵耗子的精彩文章. 前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要 ...

  9. Docker基础技术:Linux CGroup

    前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离.也就是说,虽然你通过Name ...

随机推荐

  1. npm won't install packages “npm ERR! network tunneling socket could not be established, cause=Parse Error”

    昨天在使用npm安装react-native的时候一直报网络不能connection,可是在浏览器中直接访问时是成功,搜索百度无果,最后在google中找到了这个解决方案:http://stackov ...

  2. c# GDI+绘制不同字体的字符串

    一段字符串中可能既有汉字又有字母,对于汉字和字母分别采用不同的字体进行绘制直接po代码了 Bitmap bmp = new Bitmap(iWidth, iHeight); Graphics g = ...

  3. 2016/1/1 运算符 笔记整理 接2015/12/30 Java 语法

    ④运算符 1,赋值运算符:实现从右向左的赋值,符号= 2,算术运算符:符号 + - * / %(求余或求模),结果自动转成最大的                      类型,自动升级. 3, 比较 ...

  4. Node.js+Express搭建博客系统基本环境安装

    1.下载安装node.js 官网下载地址:https://nodejs.org/en/download/ 2.安装express. 打开node命令行工具,在命令行中输入:npm install -g ...

  5. 【前端】jQuery的animate在火狐浏览器上不支持backgroundPosition的解决方法

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/4375678.html jQuery的animate是一个非常好用的东东,但某些动画效果支持得不够好,比如back ...

  6. 使用vue-cli启动项目出错

    Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 API 实现响应的数据 ...

  7. Ubuntu 14.04 台式机锐捷使用:

    1.解压文件:RG_Supplicant_For_Linux_V1.31.zip2.sudo chmod -R 777 rjsupplicant3.进入文件夹(./rjsupplicant.sh -a ...

  8. iOS组件化开发入门 —— 提交自己的私有库

    前言:本人也是初次接触组件化开发,感觉现有的资料太繁杂,就简单整理了一下,在此跟大家分享一些入手的经验,主要就是描述cocoapods的私有库封装和提交.组件化开发是个大的议题,涉及到架构思路.设计模 ...

  9. MySQL 目录结构信息

    bin 目录,存储可执行文件. data 目录,存储数据文件. docs 目录,文档. include 目录,存储包含的头文件. lib 目录,存储库文件. share 目录,错误信息和字符集文件.

  10. poj 1201 Intervals【差分约束+spfa】

    设s为前缀和,首先显然的条件是\[ s_{bi}-s_{ai-1}>=c \],然后隐含的是\[ s_i-s_{i-1}>=0 s_i-s_{i-1}<=1 \] 然后根据差分约束, ...