如何更改为 noop 调度程序?

Jor*_*tro 29 kernel

我的笔记本电脑中有一个 SSD,有人告诉我切换到“noop”调度程序是首选。

如何更改为 noop 调度程序,以及在哪里进行更改以使其在重新启动后保持不变?

Eli*_*gan 29

假设您的硬盘是/dev/sda. 然后,您可以查看当前正在使用的调度程序:

cat /sys/block/sda/queue/scheduler

(当前使用的调度程序将被[ ]括号括起来。)

你可以让它使用 noop 调度程序:

echo noop > /sys/block/sda/queue/scheduler

有关更多信息,请参阅本文

要使更改保持不变,您可以将命令放在/etc/rc.local.

  • @LucasBustamante您是否正在运行“sudo echo noop > /sys/block/sda/queue/scheduler”?这是行不通的,因为以您的用户身份运行的 shell 会在运行输出被重定向的命令之前设置重定向。您可以使用`echo noop | sudo tee /sys/block/sda/queue/scheduler` 代替。请参阅[即使使用 sudo 也无法回显“hello”> x.txt?](https://askubuntu.com/q/103643/22949) 和[如何在 Bash 中使用带有重定向的 sudo 时解决“权限被拒绝”问题?]( https://askubuntu.com/q/230476/22949)了解更多信息和其他方法。(如果这不是您的意思,请告诉我。) (2认同)

Ano*_*ous 22

编辑/etc/default/grub,如gksudo gedit /etc/default/grub,这里需要添加lift=noop。

更改GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

然后运行sudo update-grub2并重新启动。

  • Anonymous 的回答有助于更改系统上所有磁盘的默认值。相比之下,Eliah Kagan 的回答为特定磁盘设置了默认值。对于带有单个驱动器的笔记本电脑,两者都可以正常工作。对于具有多个磁盘的系统——最显着的是同时具有 SSD 和旋转驱动器的磁盘),Eliah Kagan 的回答提供了更细粒度的控制。 (6认同)
  • `elevator=` 内核参数在内核 v5.4 中被删除,从 Ubuntu 20.04 LTS 焦点开始使用。https://github.com/torvalds/linux/commit/85c0a037dc7a1a34d6add49d6eaa2deddbf43d7b (3认同)

Roy*_*ams 14

这个 Debian 参考展示了如何动态检测 SSD 并相应地更改调度程序:

在具有不同驱动器类型的系统中,您可以使用 udev 规则调整设置(创建 /etc/udev/rules.d/60-ssd-scheduler.rules):

# 为非旋转磁盘设置截止时间调度程序

 ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0",ATTR{queue/scheduler}="deadline"
Run Code Online (Sandbox Code Playgroud)

要确保您的内核可以检测到旋转状态:

$ for f in /sys/block/sd?/queue/rotational; do printf "$f is "; cat $f; done
/sys/block/sda/queue/rotational is 1
/sys/block/sdb/queue/rotational is 1
/sys/block/sdc/queue/rotational is 0   <=== Only this is SSD!
Run Code Online (Sandbox Code Playgroud)

以上所有内容均直接引用自 Debian 参考资料,其中包含许多其他 SSD 初次用户感兴趣的元素。