本文共 1015 字,大约阅读时间需要 3 分钟。
简介
IO调度是决定读或写请求执行的内核部分。 Linux内核有四个选择[noop] anticipatory deadline cfq ,但大多数发行版使用默认的“CFQ”(完全公平队列)调度,它自2.6.18版本后一直是Linux的默认情况下的调度策略。这通常是一个很好的全面调度,并应提供良好的性能,同时共享访问驱动器“完全公平”这是试图在同一时间访问一个驱动器之间的所有不同的进程。在硬盘驱动器上,它似乎不辜负它的名字。
修改调度策略
更改的IO调度是很容易的。你并不需要更新到一个新的内核,甚至不必重新启动。这意味着你可以随时改变这个值并且看到他的效果;
比如
echo noop > /sys/block/sdb/queue/scheduler
less /sys/block/sdb/queue/scheduler
[noop] anticipatory deadline cfq
修改为另外一个调度策略
echo cfq > /sys/block/sdb/queue/scheduler
当你下一次进入时,调度策略就生效了;
修改为默认的调度策略
如上所说,只是修改调度策略很容易,但是如果重启后,修改的调度策略就会失效,要想修改默认的调度策略,需要修改内核参数
如要修改为默认的deadline
elevator=deadline
哪一个调度策略是最好的?
光说无用,只能通过实验来说明结论,本人没有测试,不能心乱下结论;所有的调度策略(除了noop)都有相关的knobs参数可以调整来达到他们的最佳性能,他们通常放在
/sys/block/sdX/queue/iosched/下面
比如闪存的一个有效调整如下
echo 1 > /sys/block/sdb/queue/iosched/fifo_batch
有些linux内核并没有内置所有的调度策略,他们可能作为一个模块被编译,如果作为一个模块编译需要调用相关的模块才能改变调度策略;
简要说明4种调度策略;
NOOP:将所有的写入放入一个简单的FIFO队列并且合并请求来提供性能;
The NOOP scheduler inserts all incoming I/O requests into a simple FIFO queue and implements request merging.
CFQ:给所有同步进程分配时间片,然后才排队访问磁盘;
转载地址:http://oqodl.baihongyu.com/