如何在内核引导命令行上指定多个调度程序?

如何在内核引导命令行上指定多个调度程序?

我们的系统同时具有旋转机械磁盘和 NVME 存储。我们希望通过取消任何 IO 调度程序来减少 IO 的 CPU 开销。我们想在 Linux 启动命令行上指定它;即在GRUB_CMDLINE_LINUX, 文件中/etc/default/grub

  • 对于机械磁盘,我们可以附加elevator=noop到命令行。这对应于noop中的值/sys/block/sda/queue/scheduler
  • 对于 NVME 存储,我们改为使用nonein /sys/block/nvme0n1/queue/scheduler;据推测(无法确认)可以在启动时通过附加elevator=none.

这变成了一个由两部分组成的问题:

  1. elevator=none用于 NVME 存储的值是否正确GRUB_CMDLINE_LINUX
  2. 可以在 中指定这两个值GRUB_CMDLINE_LINUX吗?

如果第二个是正确的,我猜这elevator=noop将为旋转磁盘设置正确,但 NVME 控制器会优雅地忽略它;然后elevator=none将为 NVME 磁盘正确设置,但旋转磁盘控制器将正常忽略

答案1

分配 I/O 调度程序全球在启动时。
即使您使用多个elevator=[value]分配,也只有最后一个才会生效。
要自动/永久设置每个设备的调度程序,您可以使用udev规则,systemd服务或配置和性能调整工具,例如tuned
至于您的其他问题,答案是肯定的,elevator=none这是用于 NVME 存储的正确值。

相关内容