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 排程器,請使用下列命令。
$
echocfq|deadline|noop
> /sys/block/nvme0n1
/queue/scheduler
例如,若要將 xvda
裝置的輸入/輸出排程器從 noop
設定為 cfq
,請使用下列命令。
$
echocfq
> /sys/block/xvda
/queue/scheduler