本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
I/O AL2 的调度程序
I/O 调度器是 Linux 操作系统的一部分,它对 I/O 请求进行排序和合并并确定处理请求的顺序。
I/O 调度器对于磁性硬盘等设备特别有益,在这些设备中,寻道时间可能很昂贵,而且最好合并同地请求。I/O 调度器对固态设备和虚拟化环境的影响较小。这是因为对于固态设备而言,顺序访问与随机访问没有区别,而对于虚拟化环境,则由主机提供自定义的调度层。
本主题讨论亚马逊 Linux I/O 调度程序。有关其他 Linux 发行版使用的 I/O调度程序的更多信息,请参阅其相应的文档。
支持的调度器
亚马逊 Linux 支持以下 I/O 调度程序:
-
deadline— 截止日期 I/O 调度器对 I/O 请求进行排序,并以最有效的顺序处理它们。它保证了每个 I/O请求的开始时间。它还为等待时间过长的 I/O 请求提供了更高的优先级。 -
cfq— 完全公平队列 (CFQ) I/O 调度器尝试在进程之间公平分配 I/O资源。它将 I/O 请求排序并插入到每个进程的队列中。 -
noop— 无操作(noop)I/O 调度器将所有 I/O 请求插入到 FIFO 队列中,然后将它们合并为单个请求。此调度器不会排序任何请求。
默认调度器
无操作(noop)是亚马逊 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 调度程序,请使用以下命令。
$echocfq|deadline|noop> /sys/block/nvme0n1/queue/scheduler
例如,要将xvda设备的 I/O 调度程序从设置为cfq,noop请使用以下命令。
$echocfq> /sys/block/xvda/queue/scheduler