更改I/O scheduler有两种方式:
1./sys/block/device_name/queue/scheduler (IOscheduler); /sys/block/device_name/queue/nr_request(queuesize)2.永久修改?启动时,grup->edit->elevator =scheduler_name
Linux的IO调度策略包括:Deadline scheduler,Anticipatory scheduler,Completely Fair Queuing(CFQ),NOOP
详细介绍参考:Linux I/O调度策略
CFQ是一种通用方案,deadline适用对响应要求高的情景,而NOOP适用SSD、fusion IO。
1.CFQ(completely fair queuing)
完全公平队列,实现了请求的sort和merge。
劣势:会存在请求响应时间很长或者被饿死的情况。[1]
2.Deadline
deadline是为了解决请求响应时间太长,被饿死这种情况而出现的。它也实现了请求的sort和merge
3.NOOP
NOOP的全称是no operations,它就是一个简单的FIFO,不过它实现了merge(没有sort),也就是说如果两个请求访问的额磁道地址在一起,那么就会合并它们。适用于寻道时间极小或者没有所谓的寻道时间代价的存储设备
适用SSD、fusion IO,而不适应HDD。
4.Anticipatory scheduler
不过现在已经被CFQ取代
Queue size 用来存在IO请求的队列的大小,理论上来说queue size越大,提升的性能更大,因为有更多的请求被优化了。但是这里需要注意几种情况。
1. 在SSD、Fusion IO这种不需要寻道时间(seek time)的情景下,增大了size并没有多大益处,因为对队列的维护而带来负面影响。
2. 在使用innodb的时候,无论是CFQ还是deadline,都不要设置为太大的queue size。
有人说innodb内部也对io请求做了根os一样的优化(实际上应该指的就是insert buffer),那么如果在os层把queue size设得太大的话会与innodb内部重复,导致额外的代价,性能或许会更低
疑问:innodb内部在做IO请求合并时是根据什么标准来合并排序的呢?比如LBA?或是真正的物理地址CHS?)
INSERT BUFFER安装主键顺序进行排序
3. Linux的文档中说deadline比CFQ更适合数据库这种情况,但是貌似只有在极大地系统压力情况下deadline才会比CFQ有比较大的性能优势。
参考
http://blog.csdn.net/zbszhangbosen/article/details/7434070