I'm recompiling my kernel, and I want to choose an I/O scheduler. What's the difference between these?
2 回答
如果将它们全部编译,则可以在启动时或按设备选择要使用的调度程序。无需在编译时进行选择,除非您的目标是每个字节都很重要的嵌入式设备。有关Documentation/block/switching-sched.txt
在启动时切换每个设备或系统范围的详细信息,请参阅。
CFQ 调度程序允许您通过ionice(1)
工具或ioprio_set(2)
系统调用设置优先级。这允许仅在系统的块设备相对空闲时才为某些进程提供优先权或强制其他进程执行其 IO。队列是通过将进程中的 IO 请求分离到队列中来实现的,并像 CPU 调度一样处理来自每个队列的请求。可以在 中找到有关配置的详细信息Documentation/block/cfq-iosched.txt
。
相比之下,deadline 调度程序同时查看来自所有进程的所有写入;它按扇区号对写入进行排序,并以线性方式将它们全部写入。截止日期意味着它尝试在截止日期到期之前写入每个块,但在这些截止日期内,它可以自由地重新排列它认为合适的块。可以在 中找到有关配置的详细信息Documentation/block/deadline-iosched.txt
。
在实践中可能很少。
在我的测试中,我发现如果你有一个聪明的 RAID 控制器,通常 NOOP 会更好一些。其他人报告了类似的结果,但您的工作量可能会有所不同。
但是,您可以在运行时选择它们(无需重新启动),因此在编译时不必担心。
我的理解是,“聪明的”调度程序(CFQ 和截止日期)仅对没有 RAID 控制器的传统“旋转磁盘”设备真正有帮助。