View a markdown version of this page

I/O AL2 的调度器 - Amazon Linux 2

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

I/O AL2 的调度器

I/O 调度器是 Linux 操作系统的一部分,它对请求进行排序和合并,并确定 I/O 请求的处理顺序。

I/O 调度器对诸如磁性硬盘驱动器之类的设备特别有益,因为在这些设备中,寻道时间可能很昂贵,而且最好是合并同地请求。 I/O 调度程序对固态设备和虚拟化环境的影响较小。这是因为对于固态设备而言,顺序访问与随机访问没有区别,而对于虚拟化环境,则由主机提供自定义的调度层。

本主题讨论亚马逊 Linux I/O 计划程序。有关其他 Linux 发行版使用的 I/O调度程序的更多信息,请参阅其各自的文档。

支持的调度器

亚马逊 Linux 支持以下 I/O 调度程序:

  • deadline— Deadl in I/O e 调度器对 I/O 请求进行排序,并按最高效的顺序处理请求。它保证了每个 I/O请求的开始时间。它还会将待处理时间过长的 I/O 请求置于更高的优先级。

  • cfq完全公平队列 (CFQ) I/O 调度程序尝试在进程之间公平分配 I/O资源。它将 I/O 请求排序并插入到每个进程的队列中。

  • noop无操作 (noop) I/O 调度程序将所有 I/O 请求插入到 FIFO 队列中,然后将它们合并为一个请求。此调度器不会排序任何请求。

默认调度器

无操作 (noop) 是 Amazon Linux 的默认 I/O 调度程序。使用此调度器的原因如下:

  • 许多实例类型都使用虚拟化设备,其中底层主机会为实例执行调度。

  • 固态设备用于许多实例类型,在这些实例类型中, I/O 调度程序的优势影响较小。

  • 它是侵入性最小的 I/O 调度程序,可以根据需要对其进行自定义。

更改调度器

更改 I/O 调度器可以提高或降低性能,具体取决于调度程序是在给定时间内完成更多还是更少的 I/O 请求。这在很大程度上取决于您的工作负载、正在使用的实例类型的生成以及正在访问的设备的类型。如果您更改正在使用的 I/O调度程序,我们建议您使用诸如 iotop 之类的工具来衡量 I/O 性能并确定更改是否对您的用例有利。

您可以使用以下命令查看设备的 I/O 调度程序,该命令nvme0n1用作示例。将以下命令中的 nvme0n1 替换为您实例上的 /sys/block 中列出的设备。

$ cat /sys/block/nvme0n1/queue/scheduler

要为设备设置 I/O 调度程序,请使用以下命令。

$ echo cfq|deadline|noop > /sys/block/nvme0n1/queue/scheduler

例如,要将xvda设备的 I/O 调度程序设置为cfqnoop请使用以下命令。

$ echo cfq > /sys/block/xvda/queue/scheduler