

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

# 的 I/O 调度程序 AL2
<a name="io-scheduler"></a>

I/O scheduler is a part of the Linux operating system that sorts and merges I/O请求并决定它们的处理顺序。

I/O schedulers are particularly beneficial for devices such as magnetic hard drives, where seek time can be expensive and where it is optimal to merge co-located requests. I/O调度程序对固态设备和虚拟化环境的影响较小。这是因为对于固态设备而言，顺序访问与随机访问没有区别，而对于虚拟化环境，则由主机提供自定义的调度层。

本主题讨论亚马逊 Linux I/O 计划程序。有关其它 Linux 发行版使用的输入/输出调度器的更多信息，请参阅其文档。

**Topics**
+ [支持的调度器](#supported-schedulers)
+ [默认调度器](#default-schedulers)
+ [更改调度器](#change-scheduler)

## 支持的调度器
<a name="supported-schedulers"></a>

亚马逊 Linux 支持以下 I/O 调度程序：
+ `deadline`— Deadl *in* I/O e 调度器对 I/O 请求进行排序，并按最高效的顺序处理请求。它保证每个待处理时间过长的I/O request. It also gives I/O请求都有更高的优先级的开始时间。
+ `cfq`— *完全公平队列* (CFQ) I/O 调度程序尝试将I/O resources between processes. It sorts and inserts I/O请求公平地分配到每个进程的队列中。
+ `noop`— “*无操作*” (noop) I/O scheduler inserts all I/O 请求放入 FIFO 队列，然后将它们合并为一个请求。此调度器不会排序任何请求。

## 默认调度器
<a name="default-schedulers"></a>

无操作 (noop) 是 Amazon Linux 的默认 I/O 调度程序。使用此调度器的原因如下：
+ 许多实例类型都使用虚拟化设备，其中底层主机会为实例执行调度。
+ 固态设备用于许多实例类型，在这些实例类型中， I/O 调度程序的优势影响较小。
+ 它是侵入性最小的 I/O 调度程序，可以根据需要对其进行自定义。

## 更改调度器
<a name="change-scheduler"></a>

更改 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 调度程序设置为`cfq`，`noop`请使用以下命令。

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