影响IO性能的request queue

 

最近一段时间在做IO性能对比测试分析的时候发现Linux-3.2的IO性能要比Linux-2.6.23差。在内核中,并发顺序读的情况下(绕过设备的buffer cache),Linux-3.2的性能比Linux-2.6.23有很大差别,性能降低了15%左右。这是为什么呢?
 
首先看一下 Linux-3.2中测试的IO Stack模型,如下图所示:

 

这个IO Stack由DM设备和SD设备堆叠而成,DM设备完成multipath的功能,SD设备是一个SCSI块设备。从这个模型中可以看出Linux-3.2的DM-Multipath设备层拥有一个磁盘SD设备相同的request Queue,BIO达到该层之后需要进行IO的调度处理。这个request Queue是Linux-3.2与Linux-2.6.23不同的地方。Linux-2.6.23中的device mapper机制仅仅起到转发BIO的作用,具体功能由device mapper的target完成。不同之处在于Linux-3.2中的device mapper机制提供了两种类型的转发机制:一种是REQUEST_BASED的转发机制;另一种是BIO_BASED的转发机制。这两种转发机制的差别在于REQUEST_BASED类型会采用request queue进行IO调度,然后统一处理request中的BIO。BIO_BASED类型和传统的device mapper中的转发机制是一样的。
 
在一般的存储设备上,如果在DM层再做一层request queue进行IO调度,必然会导致读请求处理比Linux-2.6.23中的延迟长,因此,会导致读IO性能的剧降。我的测试结果是在并发多流顺序读的情况下,Linux-3.2内核的读性能降低了15%左右。写性能的影响并不十分明显,但是,如果调度算法选择不好,写性能还是有一定影响。
 
由于我采用的是系统默认的DM-multipath驱动,在Linux-3.2中该multipath只支持REQUEST_BASED类型,因此,如果想要把这一层的request Queue移除,那么只能修改Linux-3.2中的代码将DM-multipath改成BIO_BASED类型。个人认为Linux中的Multipath驱动应该保留BIO_BASED的模式,这样对基于磁盘的multipath应用会有一定的性能提升。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值