I/O 排程器 - Amazon Elastic Compute Cloud

I/O 排程器

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

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

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

支援的排程器

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

預設排程器

無操作 (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 裝置的輸入/輸出排程器從 noop 設定為 cfq,請使用下列命令。

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