为什么 Ubuntu 16.04 将所有驱动器 IO 调度程序设置为“截止时间”?

为什么 Ubuntu 16.04 将所有驱动器 IO 调度程序设置为“截止时间”?

我刚刚将 Xubuntu 16.04-64bit 安装在笔记本电脑的第二个分区上。我注意到它有时似乎有点慢,所以我检查了它对该驱动器使用的 IO 调度程序,结果发现它适用于deadline所有驱动器。我确实有几个 SSD 和硬盘,所以我知道“deadline”最适合 SSD 和cfq硬盘。

我在另一个分区上启动了 14.04,它正在用于cfq旋转驱动器和deadlineSSD,这是应该的。我还查看了/etc/udev/rules.d14.04 是否使用规则来配置驱动器类型,但那里没有,所以我假设内核正在这样做。

所以我想知道这是否是一个错误,或者他们现在是否对所有事情都使用“截止日期”?

更新:我写的关于 /etc/udev/rules.d 的评论是个错误。事实上,自从几年前我开始使用 SSD 以来,我一直在使用 udev 规则根据轮换类型更改调度程序(就像下面的答案一样)。我想我只是忘了……变老了。无论如何,我使用的参考资料之一是Debian SSD 优化 wiki

如果包含它,那不是个好主意吗?只是一个建议!

答案1

Ubuntu 内核团队定期对不同文件系统和 I/O 调度程序上的不同模拟工作负载进行大量分析,以了解最佳通用 I/O 调度程序选择。一般答案是,对于所有不同类型的安装和所有不同类型的媒体,没有完美的通用配置 I/O 调度程序选择。要记住的要点是:

  1. 系统正在转向 SSD,因此 noop 或 deadline 最适合这些;noop 的 CPU 开销比 deadline 少。

  2. CFQ 与 Deadline 的比较很难。CFQ 确实提供了更大的灵活性。但是,我们发现,对于更广泛的模拟 I/O 操作,deadline 提供的延迟比 CFQ 更低,吞吐量略高。

  3. 我定期对一系列文件系统和 I/O 调度程序的内核进行基准测试(每个内核测试需要 3 天以上才能完成)。根据此测试和其他各种数据,我们尝试做出明智的决定,做出最佳选择,请参阅:

http://kernel.ubuntu.com/~cking/fs-tests/

所有 I/O 调度程序都有优点/缺点,因此任何默认设置都不是完美的,如果有令人信服的数据和理由表明我们需要改变,Ubuntu 内核团队始终愿意对默认选择提出意见。

答案2

我不知道开发人员为什么决定选择它deadline作为默认调度程序,也许是因为大多数新计算机都附带 SSD,系统通常安装在其上。如果您尚未安装调度程序,您可以通过这种方式手动设置它...安装gksu

打开终端并执行:

sudo apt install gksu  

然后执行此命令:

gksudo gedit /etc/udev/rules.d/60-schedulers.rules  

将以下文本粘贴到空文件中并保存更改的文件。

# set cfq scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"  

重新启动操作系统,现在您正在使用针对 HDD 和 SSD 的最佳调度程序。

答案3

随着 14.04 的发布,3.13 内核的默认调度程序发生了变化从 CFQ 到 Deadline

不再有单独的服务器内核,并且 CFQ 调度程序不再适合许多服务器使用场景,例如KVM 写入超时. 甚至桌面版的性能也出现了倒退,USB 设备

相关内容