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%