我正在重新编译我的内核,我想选择一个I/O调度器。它们之间的区别是什么?
发布于 2012-02-18 12:12:00
如果将它们全部编译,则可以在引导时或在每个设备上选择要使用的调度器。不需要在编译时进行选择,除非您的目标是每一个字节都很重要的嵌入式设备。有关在引导时按设备或在系统范围内进行切换的详细信息,请参阅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。
发布于 2012-02-18 15:22:53
在实践中可能很少。
在我的测试中,我发现一般来说,如果你有一个聪明的RAID控制器,NOOP会更好一些。其他人也报告了类似的结果,但您的工作负载可能不同。
但是,您可以在运行时选择它们(无需重启),因此不用担心编译时的问题。
我的理解是,“聪明的”调度程序(CFQ和deadline)只有在没有RAID控制器的传统“旋转磁盘”设备上才是真正有用的。
https://stackoverflow.com/questions/9338378
复制相似问题