linux的qos机制 - dm-ioband篇 (1)

dm-ioband并没有集成在mainstream kernel里,需要打patch才能用,而且,必须是kernel社区的源码,像我用红帽子的kernel打patch是会报错的。。。

http://sourceforge.net/apps/trac/ioband/wiki/dm-ioband

下载patch完了之后打上,然后make menuconfig,这时在lvm/raid/devicemapper下面把ioband模块勾选上,重新编译安装内核,重启之后lsmod | grep ioband,如果能看到ioband,说明安装成功了,下面我们用几个例子来说明如何使用这个dm-ioband功能,下几篇会对device mapper, ioband的实现原理做详细分析

e.g.

对于虚拟化场景下的IO QoS,采用uid, gid都是不合适的,比较靠谱的是采用process id, 或者 cgroup 的方式,而QoS策略可以基于

IOPS --> "weight-iosize" 

BW --> "weight"

IO Throttle --> "range-bw"


example 1

通过dmsetup创建两个ioband设备,把权重比例设为80:20,用dd来测试,发现没有任何效果;改用fio测试发现效果也不明显 (后续研究需要对这些问题给出解释)

#echo "0 $(blockdev --getsize /dev/sdf1) ioband /dev/sdf1 1 0 0 none weight 0 :80" | dmsetup create ioband1

#echo "0 $(blockdev --getsize /dev/sdf2) ioband /dev/sdf2 1 0 0 none weight 0 :20" | dmsetup create ioband2

通过fio分别用随机写和顺序写来测试,顺序写的

IOPS比例基本为  6388 : 8992 ,BW比例基本为 25556 :  35968,基本上都为 1.4 : 1,和 4 : 1 的要求差很远呐


example 2

通过attach pid的方法测试,效果依旧不理想

# dmsetup message ioband1 0 type pid
# dmsetup message ioband1 0 attach 15011
# dmsetup message ioband1 0 weight 15011:80
# dmsetup message ioband1 0 attach 15276
# dmsetup message ioband1 0 weight 15276:40

查了下ioband官方wiki,上面提到

Run 128 processes issuing random read/write direct I/O with 4KB data on each virtual machine at the same time respectively.

但是大量小文件的操作依旧效果不明显。。。


最后验证下使用device mapper和直接操作设备对性能的影响

由于device mapper对每一个sector,通过查找btree得到真正设备的物理sector,因此性能会有一定损失,随机读写约为8%,顺序读写约为3%


-------------------------------------------------- 华丽的分割线 --------------------------------------------------------------


今天重新用fio测试,其中filename选定为设备 ,e.g. /dev/mapper/ioband1, /dev/sdf1 ,测试放弃指定文件size, name的方式,采用设置time_base, runtime=30,这一次没有问题了,个人认为,ioband是否work,跟测试方法关系很大,比如用dd,用基于文件的fio测试都无法测出准确的数据


dm设备和物理设备的损耗约为2%




你可能感兴趣的:(存储技术)