输入/输出调度器 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

输入/输出调度器

输入/输出调度器位于 Linux 操作系统中,用于排序和合并输入/输出请求,并决定这些请求的处理顺序。

输入/输出调度器尤其适用于磁盘驱动器等设备,因为此类设备可能需要在查找时间上花费非常昂贵的成本,并且其最适合合并同地协作的请求。输入/输出调度器对固态设备和虚拟化环境的影响较小。这是因为对于固态设备而言,顺序访问与随机访问没有区别,而对于虚拟化环境,则由主机提供自定义的调度层。

本主题将就 Amazon Linux 输入/输出调度器进行讨论。有关其它 Linux 发行版使用的输入/输出调度器的更多信息,请参阅其文档。

支持的调度器

Amazon Linux 支持以下输入/输出调度器:

  • deadline截止日期输入/输出调度器会对输入/输出请求进行排序,并以最有效的顺序进行处理。其保证了每个输入/输出请求的开始时间。其还会为等待时间过长的输入/输出请求提供更高的优先级。

  • cfq完全公平队列 (CFQ) 输入/输出调度器会试图在进程之间公平分配输入/输出资源。其会对输入/输出请求进行排序并将其插入到每个进程队列之中。

  • noop无操作 (noop) 输入/输出调度器会将所有输入/输出请求插入到 FIFO 队列之中,然后将其合并至单个请求。此调度器不会排序任何请求。

默认调度器

无操作 (noop) 是 Amazon Linux 的默认输入/输出调度器。使用此调度器的原因如下:

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

  • 许多实例类型都使用固态设备,而输入/输出调度器的不会在此情况下体现出明显优势。

  • 该调度器是侵入性最小的输入/输出调度器,且可以根据需要进行自定义设置。

更改调度器

根据调度器能否在给定时间内完成更多或更少的输入/输出请求,更改输入/输出请求者可以提高或降低性能。这在很大程度上取决于您的工作负载、正在使用的实例类型的生成以及正在访问的设备的类型。若要更改正在使用的输入/输出调度器,我们建议您使用工具(例如 iotop)来衡量输入/输出的性能并确定此更改是否有益于您的使用场景。

您可以使用以下命令来查看设备的输入/输出调度器,例如 nvme0n1。将以下命令中的 nvme0n1 替换为您实例上的 /sys/block 中列出的设备。

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

请使用以下命令为设备设置输入/输出调度器。

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

例如,要将 xvda 设备的输入/输出调度器设置为从 noopcfq,请使用以下命令。

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