Linux CFQ、截止日期和NOOP之间有什么区别?

Linux CFQ、截止日期和NOOP之间有什么区别?,linux,io,linux-kernel,kernel,recompile,Linux,Io,Linux Kernel,Kernel,Recompile,我正在重新编译内核,我想选择一个I/O调度程序。这两者之间有什么区别?如果您全部编译它们,您可以在启动时或每个设备上选择要使用的调度程序。无需在编译时选择,除非您针对的是每个字节都有计数的嵌入式设备。请参阅文档/block/switching sched.txt,了解引导时每个设备或系统范围切换的详细信息 CFQ调度程序允许您通过ionice(1)工具或ioprio\u set(2)系统调用设置优先级。这允许仅当系统的块设备相对空闲时,优先考虑某些进程或强制其他进程执行IO。队列由实现,并处理来

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

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

CFQ调度程序允许您通过
ionice(1)
工具或
ioprio\u set(2)
系统调用设置优先级。这允许仅当系统的块设备相对空闲时,优先考虑某些进程或强制其他进程执行IO。队列由实现,并处理来自每个队列的请求,类似于CPU调度。有关配置它的详细信息,请参见
文档/block/cfq iosched.txt


相比之下,截止期调度器一次查看来自所有进程的所有写入;它按扇区号对写操作进行排序,并以线性方式全部写入。截止日期意味着它试图在截止日期到期前编写每个块,但在这些截止日期内,它可以根据自己的需要自由地重新安排块。有关配置它的详细信息,请参见
文档/block/deadline iosched.txt

实践中可能很少

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

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


我的理解是,“聪明”的调度程序(CFQ和deadline)只在没有RAID控制器的传统“旋转磁盘”设备上真正有用。

No op也适用于SSD