CFQ,截止日期和NOOP有什么区别?

时间:2012-02-18 03:54:53

标签: linux io linux-kernel kernel recompile

我正在重新编译我的内核,我想选择一个I / O调度程序。这些之间有什么区别?

2 个答案:

答案 0 :(得分:12)

如果全部编译它们,您可以在引导时或每个设备上选择要使用的调度程序。无需在编译时选择,除非您的目标是每个字节都重要的嵌入式设备。有关在启动时切换每个设备或系统范围的详细信息,请参阅Documentation/block/switching-sched.txt

CFQ调度程序允许您通过ionice(1)工具或ioprio_set(2)系统调用设置优先级。这允许优先于某些进程或强制其他人仅在系统的块设备相对空闲时才执行其IO。队列由segregating the IO requests from processes into queues实现,并处理来自每个队列的请求,类似于CPU调度。有关配置的详细信息,请参阅Documentation/block/cfq-iosched.txt

相比之下,截止日期调度程序会同时查看所有进程的所有写入;它按扇区号对写入进行排序,并以线性方式将它们全部写入。截止日期意味着它尝试在截止日期到期之前编写每个块,但在这些期限内,可以自由地重新排列块,因为它认为合适。有关配置的详细信息,请参阅Documentation/block/deadline-iosched.txt

答案 1 :(得分:3)

在实践中可能很少。

在我的测试中,我发现如果你有一个聪明的RAID控制器,通常NOOP会好一点。其他人报告了类似的结果,但您的工作量可能不同。

但是,您可以在运行时选择它们(无需重新启动),因此在编译时不必担心它。

我的理解是“聪明”的调度程序(CFQ和截止日期)仅对没有RAID控制器的传统“旋转盘”设备有用。