用于 U 盘的 Linux 内核调度程序 - noop 还是 deadline?

用于 U 盘的 Linux 内核调度程序 - noop 还是 deadline?

我在 16 GB 的 U 盘上运行 Debian Live 作为持久系统。这是我每天使用的主力系统。之前,由于写入速度慢,我经常遇到延迟和冻结的问题。我重新对驱动器进行了分区并对齐了分区,结果速度似乎有了显著的提升,但我还在想,更改 I/O 调度程序是否有帮助。

似乎有两个候选者:deadline 和 noop。 这一页建议使用 deadline,我刚刚改成了这个。这似乎有所帮助,但印象纯粹是主观的。然而,Stack Overflow 上的共识似乎是 noop 最适合闪存设备(请参阅这里这里)但是我无法理解一个不做任何事的调度程序(即noop)怎么会更有效率。

因为我预计我必须尝试一周左右才能知道它是否真的有帮助,所以我想问问是否有人知道哪个更好。

答案1

闪存设备应该由无操作I/O 调度程序。虽然这不是一个明确的答案。请继续阅读。

机械设备(例如 HDD)需要花费大量时间进行寻道操作,找到磁盘板上的正确位置来执行读取或写入操作。它通过移动速度有限的机械磁头来实现这一点。虽然这个速度似乎很高,但闪存设备不需要这个速度,因此在设计上速度更快。

I/O 调度程序的任务主要是对 I/O 操作进行分组、重新排序以及在可能的情况下合并。主要目的之一是通过减少必要的寻道操作数量来减少寻道损失。

这就是 NOOP 调度程序优于大多数闪存设备调度程序的原因。考虑到任何 I/O 操作都不会产生寻道损失,调度程序不需要做太多事情。它做的越少越好。由于每个 I/O 操作所需的 CPU 周期非常少,因此它也非常节省电池。

另一方面,如果您担心 I/O 匮乏,而您的系统很少会过载,那么 DEADLINE 可能是一个不错的选择。调度程序为每个 I/O 操作设定一个截止期限,这对延迟有积极影响。它使用多个队列来存储操作并根据它们的截止期限对它们进行排序。通过遵守这些截止期限,它可以保证在正常 CPU 负载期间不会出现 I/O 匮乏。

总而言之,没有一刀切。每个调度程序都有其优点和缺点。在我看来,你能做的最好的事情就是阅读有关 Noop、Deadline 和 SIO 的文章,并找出哪一个更适合你的场景。你也可以对它们进行一段时间的测试,看看它们对你的日常使用有何反应。

最终,我找到了一个好的论坛帖子这看起来很准确,并且涵盖了每个 I/O 调度程序的主要优点/缺点。

相关内容