笔式驱动器的 Linux 内核调度程序 - noop 还是截止日期?

Sha*_*arG 4 linux kernel usb-flash-drive

我在 16 GB 笔式驱动器上将 Debian Live 作为持久系统运行。这是我每天的主力系统。由于写入速度缓慢,我早些时候受到持续延迟和冻结的困扰。我已经对驱动器重新分区并对齐了分区,结果似乎显着提高了速度,但我也想知道更改 I/O 调度程序是否会有所帮助。

似乎有两个候选人:deadline 和 noop。 此页面建议截止日期,我只是更改为那个。它似乎有所帮助,但这种印象纯粹是主观的。然而,Stack Overflow 上的共识似乎是 noop 最适合闪存设备(请参阅此处此处)。但是我无法理解什么都不做的调度程序 - 即 noop - 可以更有效率。

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

jwe*_*ich 9

闪存设备应该由无操作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 调度程序的主要优点/缺点。