如何提高Linux下块设备IO的整体性能?(5)
只有当starved >= writes_starved的时候,deadline才回去处理写请求.可以认为这个值是用来平衡deadline对读写请求处理优先级状态的,这个值越大,则写请求越被滞后处理,越小,写请求就越可以获得趋近于读请求的优先级. front_merges:当一个新请求进入队列的时候,如果其请求的扇区距离当前扇区很近,那么它就是可以被合并处理的. 而这个合并可能有两种情况:
在某些场景下,向前合并是不必要的,那么我们就可以通过这个参数关闭向前合并.默认deadline支持向前合并,设置为0关闭. 3、noop调度器noop调度器是最简单的调度器.它本质上就是一个链表实现的fifo队列,并对请求进行简单的合并处理.调度器本身并没有提供任何可疑配置的参数. ?4、各种调度器的应用场景选择根据以上几种io调度算法的分析,我们应该能对各种调度算法的使用场景有一些大致的思路了. 从原理上看,cfq是一种比较通用的调度算法,它是一种以进程为出发点考虑的调度算法,保证大家尽量公平. deadline是一种以提高机械硬盘吞吐量为思考出发点的调度算法,尽量保证在有io请求达到最终期限的时候进行调度.非常适合业务比较单一并且IO压力比较重的业务,比如数据库. 而noop呢?其实如果我们把我们的思考对象拓展到固态硬盘,那么你就会发现,无论cfq还是deadline,都是针对机械硬盘的结构进行的队列算法调整,而这种调整对于固态硬盘来说,完全没有意义. 对于固态硬盘来说,IO调度算法越复杂,额外要处理的逻辑就越多,效率就越低. 所以,固态硬盘这种场景下使用noop是最好的,deadline次之,而cfq由于复杂度的原因,无疑效率最低. get运维新技能,怎么总是抢先一步?
文/邹立巍来自高效运维微信公众号
(编辑:ASP站长网) |