

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AL2 的 I/O 排程器
<a name="io-scheduler"></a>

I/O 排程器是 Linux 作業系統的一部分，可排序和合併 I/O 請求，並決定它們的處理順序。

I/O 排程器是特別有益於磁性硬碟機這類的設備，其中搜尋時間可能很昂貴，而且最適合於合併主機代管請求。I/O 排程器對固態設備和虛擬化環境的影響較少。這是因為對於固態設備，循序和隨機存取沒有差異，而對於虛擬化環境，主機會提供自己的排程層。

本主題討論 Amazon Linux I/O 排程器。如需其他 Linux 發行版所使用之 I/O 排程器的詳細資訊，請參閱其各自的文件。

**Topics**
+ [支援的排程器](#supported-schedulers)
+ [預設排程器](#default-schedulers)
+ [變更排程器](#change-scheduler)

## 支援的排程器
<a name="supported-schedulers"></a>

Amazon 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 佇列，然後將它們合併成單一請求。此排程器不會執行任何請求排序。

## 預設排程器
<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* 裝置的輸入/輸出排程器從 `noop` 設定為 `cfq`，請使用下列命令。

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