cgroup测试存储设备IOPS分配

1 使用:创建树并且attach子系统

  • 首先要创建文件系统的挂载点作为树的根

   mkdir /cgroup/name

   mkdir /cgroup/cpu_and_mem

  • Mount这个挂载点到一个或者多个子系统

    mount -t cgroup -o subsystems name /cgroup/name

    mount -t cgroup -o cpu,cpuset,memory cpu_and_mem /cgroup/cpu_and_mem

  • 这个时候查看子系统

    ~]# lssubsys -am

  cpu,cpuset,memory /cgroup/cpu_and_mem

  net_cls

  ns

  cpuacct

  devices

  freezer

  blkio

  • 重新mount

    mount -t cgroup -o remount,cpu,cpuset,cpuacct,memory cpu_and_mem /cgroup/cpu_and_mem

  • 查看子系统

~]# lssubsys -am

cpu,cpuacct,cpuset,memory /cgroup/cpu_and_mem

net_cls

ns

devices

freezer

blkio

  • 创建子group: mkdir /cgroup/hierarchy/name/child_name
  • mkdir /cgroup/cpuset/lab1/group1

使用:Process Behavior in the Root Control Group

对于blkio和cpu子系统来说,在root cgroup下的进程和在子cgroup下的进程,对资源的分配不同

例如有一个root cgroup,文件夹为/rootgroup,有两个子cgroup,/rootgroup/red/ and /rootgroup/blue/

在这三个cgroup下面都创建cpu.shares,并且值设为1 如果在三个cgroup下面各创建一个进程,则每个进程CPU占有率为三分之一

然而当子cgroup里面添加更多的进程,则整个子cgroup还是占有三分之一的CPU

如果在root cgroup里面再创建两个进程,则变成了按照进程数来分,也即每个进程五分之一

所以在使用blkio和cpu的时候,尽量使用子cgroup

 

子系统:blkio

子系统控制并监控cgroup中的任务对块设备的I/O访问。

blkio.weight

指定cgroup默认可用访问块I/O的相对比例(加权),范围在100到1000

blkio.weight_device

指定对cgroup中可用的具体设备I/O访问的相对比例(加权),范围是100到 1000。

blkio.throttle.read_bps_device

the upper limit on the number of read operations a device can perform. Entries have three fields: major, minor, and bytes_per_second.

blkio.throttle.write_bps_device

the upper limit on the number of write operations a device can perform.

随着包括存储设备在内服务器的能力越来越高,特别是用上了PCIe存储卡后,IOPS能力通常有10几万,马上过剩。在这种情况下,一台服务器可以干很多事情,在上面跑很多服务。那么如何保证系统的服务质量是个很重要的事情了。

我们在下来的的项目中倾向于用cgroup来做资源的隔离和限制,原因是cgroup的开销很小,而且很易用。cgroup 可以参考这里

我们特别关心cgroup的blkio子模块,他有2种限制模式:
1. throttle,限制每个进程能使用的IOPS或者吞吐量。
2. weight,现在每个进程能使用的IOPS的能力的比例,必须通过CFQ调度器来实现。
文档和具体的参数可以看上面提到的cgroup文档。

要使用blkio的weight限制需要注意几个事情:
1. 必须走directio, 如果buffered io因为最终写IO的进程不是发起IO的进程,结果会有很大的偏差。
2. 调度器必须是CFQ。
3. 测试工具必须支持cgroup的相关限制。
4. 最好是随机的IO。

这里只是粗粗演示下如何用fio按照比例来限制进程使用的IO, 我们来构造下场景:

我们在创建2个1g大小的文件,进行随机的混合读写,一个给500的比例,一个给100的比例,总的比例是1000。那么理论上可以看到A进程可以得到多于B进程5倍的IO能力。

操作如下:

$ cat test.fio
[global]
bs=4k
ioengine=libaio
iodepth=32
direct=1
rw=randrw
rwmixread=90
time_based
runtime=180
cgroup_nodelete=1

[test1]
filename=test1.dat
size=1G
cgroup_weight=500
cgroup=test1

[test2]
filename=test2.dat
size=1G
cgroup_weight=100
cgroup=test2

$ cat /sys/block/sda/queue/scheduler
noop deadline [cfq] 

$ sudo fio test.fio
test1: (g=0): rw=randrw, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=32
test2: (g=0): rw=randrw, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=32
fio 2.0
Starting 2 processes
Jobs: 2 (f=2): [mm] [5.5% done] [618K/90K /s] [151 /22  iops] [eta 02m:51s]
...

我们从另外一个终端可以看到IO能力的分配情况:

$ sudo lssubsys -am
cpuset
net_cls
perf_event
cpu /sys/fs/cgroup/cpu
cpuacct /sys/fs/cgroup/cpuacct
memory /sys/fs/cgroup/memory
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
blkio /sys/fs/cgroup/blkio
$ pgrep -x fio
3837
3839
3840
$ cat /sys/fs/cgroup/blkio/test1/tasks
3839
$ cat /sys/fs/cgroup/blkio/test2/tasks
3840
$ sudo iotop

差不多是5:1的比例,符合预期。

我们在使用的时候会担心kernel的稳定性,所以用fio能够大压力,长时间的来测试cgroup模块的可靠性,收集数据作为应用的参考。

祝玩得开心!

时间: 2024-10-27 00:57:27

cgroup测试存储设备IOPS分配的相关文章

实战DeviceIoControl 之五:列举已安装的存储设备

Q 前几次我们讨论的都是设备名比较清楚的情况,有了设备名(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了.如果事先并不能确切知道设备名,如何去访问设备呢? A 访问设备必须用设备句柄,而得到设备句柄必须知道设备路径,这个套路以你我之力是改变不了的.每个设备都有它所属类型的GUID,我们顺着这个GUID就能获得设备路径. GUID是同类或同种设备的全球唯一识别码,它是一个128 bit(16字节)的整形数,真实面目为 typedef struct _GUID {  

LFCS 系列第四讲:对存储设备分区、格式化文件系统和配置交换分区

LFCS 系列第四讲:对存储设备分区.格式化文件系统和配置交换分区 去年八月份,Linux 基金会发起了 LFCS(Linux 基金会认证系统管理员Linux Foundation Certified Sysadmin)认证,给所有系统管理员一个展现自己的机会.通过基础考试后,他们可以胜任在 Linux 上的整体运维工作:包括系统支持.一流水平的诊断和监控以及在必要之时向其他支持团队提交帮助请求等. LFCS 系列第四讲 需要注意的是,Linux 基金会认证是非常严格的,通过与否完全要看个人能力

第三代Oracle Sun ZFS存储设备提供最佳性能和效率

甲骨文公司在旧金山举行的2011甲骨文全球大会上宣布,推出第三代Sun ZFS存储设备,该产品可提供企业级NAS功能,同时可提供同类最佳的性能.效率.数据完整性,以及与Oracle软件的集成. Oracle Sun ZFS 7420存储设备在NAS市场展现了绝对的性能领先优势,在SPC-1基准测试中与NetApp FAS 3270A相比,以不到其一半的每SPC-1 IOPS费用实现了较之高2倍的性能(1). Sun ZFS 7420存储设备的测试结果为137,066 SPC-1每秒输入/输出操作

存储设备与分布式存储的选择

集中存储的优缺点是,物理介质集中布放;视频流上传到中心对机房环境要求高,要求机房空间大,承重.空调等都是需要考虑的问题. 分布存储,集中管理的优缺点是,物理介质分布到不同的地理位置;视频流就近上传,对骨干网带宽没有什么要求;可采用多套低端的小容量的存储设备 分布部署,设备价格和维护成本较低;小容量设备分布部署,对机房环境要求低. 对于城市监控系统的监控数据,各个区域是否集中,怎么集中很多时候和一个城市的行政划分有关,一个城市的区域大小和可用的网络状况有关.城市越小,网络条件越好,越容易实现集中存

《微软System Center 2012 R2私有云部署实战》——2.2 存储设备选型

2.2 存储设备选型 存储系统就虚拟化而言,会对性能和数据安全带来影响.一套好的存储系统,可以保障数据安全以及系统的稳健运行,也可以为私有云带来更大的数据吞吐量. 基于存储级别的迁移,Window Server 2012 R2支持3种"共享存储",分别是直连存储.iSCSI存储.光纤存储.因此用户选购"共享存储",也只能在这3种存储中进行选择. ** 2.2.1 存储接口类型** 如表2-1所示,直连存储的价格是最低的,传输速率也还不错,但它有一个很大的缺陷,就是所

如何使用自平衡功能在多个DataPower设备上分配负载

文中还将演示后端 http://www.aliyun.com/zixun/aggregation/13387.html">WebSphere Application Server 实例的智能工作负载分配. IBM WebSphere DataPower Option for Application Optimization (AO) 旨在为最严苛的情形提供动态负载平衡功能.通过跨 WebSphere DataPower 设备均匀分配负载,然后基于应用程序可用性智能地将流量路由到所选的后端服

Oracle Sun ZFS存储设备性能卓越巩固存储领导地位

甲骨文日前宣布其Sun ZFS 存储 7320 设备在SPECsfs2008_nfs基准测试中,击败了NetApp FAS3270,处理量高出32%,整体响应时间(ORT)加快9%(1). Sun ZFS存储7320设备,为混合工作负载环境的文件服务,在一个1.51毫秒整体响应时间内(1),实现了134140 SPEC SFS2008_nfs ops/sec的好成绩. Sun ZFS存储设备配置使用了不到一半的机架空间,且价格不到NetApp FAS3270测试配置(2)标价的五分之一. Ora

虚拟化技术节省存储设备采购

       不是新玩具的虚拟化(virtualization)技术,将有机会在大环境不理想的经济情势下趁势而起.原因很现实--在企业开始删减IT支出的同时,能够降低硬件采购成本的技术,自然就能获得用户青睐. 虚拟化技术涵盖了服务器和存储设备端,但是此处强调的是存储设备虚拟化.原因即在于在不景气的情况下,裁员.业务量下滑等情事均有可能发生,需要的运算资源自然就会减少,服务器端的虚拟化技术尚无用武之地. 然而在企业普遍不会有删除旧有数据的习惯下,需要的存储空间势必与日俱增.在能省就省的前提下,能够

甲骨文ZFS存储设备现代云和虚拟服务器环境的理想选择

北京, 2014年7月7日--甲骨文ZFS存储器ZS3系列的 增强功能为加快虚拟机部署和监测提供了快速.高效的新方式,最终帮助客户有效减少引导风暴.中 端的ZFS存储器ZS3-2能够在7分钟内同时启动16,000个虚拟机,增加OpenStack Cinder驱动来简化云配置和协调,集成的RESTful management APIs可以让客户使用通用的方式来部署公有云和私有云,并提供IT服务.甲骨文 ZFS存储设备甲骨文公有云和私有云产品提供了超过200 PB的存储.   拥有甲骨文ZFS St