傻瓜化说明
简单地说,对于磁盘I/O,Linux提供了cfq, deadline和noop三种调度策略
- cfq: 这个名字是Complete Fairness Queueing的缩写,它是一个复杂的调度策略,按进程创建多个队列,试图保持对多个进程的公平(这就没考虑读操作和写操作的不同耗时)
- deadline: 这个策略比较简单,只分了读和写两个队列(这显然会加速读取量比较大的系统),叫这个名字是内核为每个I/O操作都给出了一个超时时间
- noop: 这个策略最简单,只有单个队列,只有一些简单合并操作
考虑到硬件配置、实际应用场景(读写比例、顺序还是随机读写)的差异,上面的简单解释对于实际选择没有太大帮助,实际该选择哪个基本还是要实测来验证。不过下面几条说明供参考:
- 根据多篇文章的说法,
deadline
和noop
差异不是太大,但它们俩与cfq
差异就比较大 - MySQL这类数据存储系统不要使用
cfq
(时序数据库可能会有所不同。不过也有说从来没见过deadline
比cfq
差的情况) - 对于虚拟机上面的磁盘,建议采用比较简单的
noop
,毕竟数据实际上怎么落盘取决于虚拟化那一层 - 我手边几个vm的默认值是:centos6是cfq,ubuntu12.04是xxxx,centos7和ubuntu14.04是deadline ÿ