在 Linux 上设置默认 IO 调度程序的推荐方法是什么?

Tot*_*tor 6 scheduling io debian configuration

我想deadline成为我系统的默认 IO 调度程序,并且我不想在重新启动时丢失该配置。这样做的正确方法是什么?(我正在使用 Debian)

一些提示:

  • 有一个启动脚本在做echo deadline >| /sys/block/sda/queue/scheduler
  • 在 GRUB 启动配置中使用内核参数 elevator=deadline
  • 使用udev类似的规则SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline"
  • 等等。

什么是“首选”解决方案?

编辑:我可以有一个配置,将 iosched 设置为deadline仅适用于启动时存在的驱动器,而不适用于后续的热插拔驱动器(如 USB 密钥)?

Gra*_*eme 4

确实要看情况。在所有条件相同的情况下,我更喜欢 GRUB 方法,纯粹是因为它很简单,并且您可以在启动时立即获得所选的调度程序。

它的主要问题是它是一个系统范围的设置,如果您有多个磁盘并且希望每个磁盘上有不同的调度程序,那么它是没有用的。在这种情况下,该udev方法更好,它提供了最细粒度的控制。您甚至可以为外部磁盘设置不同的调度程序,当您插入外部磁盘时它们就会被激活。

我最不喜欢的是启动脚本。这里的选项是将其放入/etc/rc.local脚本中,在这种情况下,调度程序直到启动过程的(非常)后期才会更改,或者将其与其他脚本一起放入sysvinit。后者是最复杂的,因为它需要编写LSB标签等才能正确完成。此外,通过 可靠地获取正确的磁盘(至少对我来说)更加困难/sys。请注意,如果您尝试为其设置调度程序的磁盘出于某种原因不再存在,则您给出的示例将不起作用sda。您可以根据一系列属性来udev匹配设备。