一尘不染

选择Linux I / O调度程序

linux

我读到,据说可以通过写入/ sys / block / [disk] / queue / scheduler来更改正在运行的内核上特定设备的I /
O调度程序。例如,我可以在系统上看到:

anon@anon:~$ cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq]

默认值是完全公平的队列调度程序。我想知道的是,在自定义内核中包括所有四个调度程序是否有用。除非内核足够聪明地为正确的硬件选择正确的调度程序,特别是基于闪存的驱动器的“
noop”调度程序,以及针对传统驱动器的其他调度程序,否则编译一个以上的调度程序似乎没有多大意义。硬盘。

是这样吗


阅读 296

收藏
2020-06-03

共1个答案

一尘不染

如中所述/usr/src/linux/Documentation/block/switching- sched.txt,可以在运行时更改任何特定块设备上的I /
O调度程序。可能会有一些延迟,因为在使用新的调度程序之前,所有先前的调度程序的请求都已清除,但是即使设备使用过多,也可以毫无问题地对其进行更改。

# cat /sys/block/hda/queue/scheduler
noop deadline [cfq]
# echo anticipatory > /sys/block/hda/queue/scheduler
# cat /sys/block/hda/queue/scheduler
noop [deadline] cfq

理想情况下,将有一个调度程序来满足所有需求。它似乎还不存在。内核通常没有足够的知识来为您的工作负载选择最佳的调度程序:

  • noop 通常是内存支持的块设备(例如ramdisk)和其他非旋转介质(闪存)的最佳选择,在这些设备中尝试重新计划I / O会浪费资源
  • deadline 是一个轻量级的调度程序,它试图对延迟进行严格限制
  • cfq 尝试维护I / O带宽在系统范围内的公平性

默认设置anticipatory很长时间,它进行了很多调整,但在 2.6.33 (2010年初)中已被删除。
cfq成为前一段时间的默认设置,因为它的性能合理且公平是多用户系统(甚至单用户桌面)的一个好目标。在某些情况下-
数据库经常被用作示例,因为它们往往已经具有自己独特的调度和访问模式,并且通常是 重要的服务(所以谁在乎公平性?)-
anticipatory具有可调性的悠久历史以在这些工作负载上获得最佳性能,并deadline很快将所有请求传递到基础设备。

2020-06-03