如何從 EC2 Nitro 型執行個體上託管的 EBS 磁碟區取得最大的 I/O 效能?

2 分的閱讀內容
0

我在 Amazon Elastic Compute Cloud (Amazon EC2) Nitro 型執行個體上執行我的工作負載。我想要確保我從我的執行個體上託管的 Amazon Elastic Block Store (Amazon EBS) 磁碟區可取得最大的 I/O 效能。

解決方案

1.     檢查是否 EBS 磁碟區已達到其 IOPS 配額。您的磁碟區達到 IOPS 配額時,延遲會增加,而且延遲增加會影響效能。如需資訊,請參閱如何最佳化 Amazon EBS 佈建 IOPS 磁碟區的效能?
**注意事項:**如果您使用的是 GP2 磁碟區,請檢查磁碟區未耗盡爆量額度。

2.    若要使用 NVMe 儲存體,您必須執行下列其中一種作業系統 (OS):

  • Amazon Linux Amazon Machine Image (AMI) 或更高版本和核心 4.12 或更高版本
  • CentOS - 7.0 或更高版本和核心 3.10 或更高版本
  • Red Hat - 7.0 或更高版本和核心 3.10 或更高版本
  • 含核心 5.0 的 Ubuntu 19.10 或含核心 5.0 及更高版本的 Ubuntu 18.04.03
    **注意事項:**如需這些 Ubuntu 版本,依預設會開啟多重佇列。
  • Ubuntu - 16.04 或 16.10
    **注意事項:**如需這些 Ubuntu 版本,多重佇列排程器未經核心編譯,需要單獨進行模組載入
  • SUSE 12 或含 SP3 或更高版本的 SUSE 11
  • Windows Server 2008 R2、2012 R2 和 2016 或更高版本

或者,確保核心版本會支援具有多重佇列功能的 I/O 排程器。最常用的多重佇列 I/O 排程器為 kyber、mq-deadline 和預算公平佇列 (bfg)。

**注意事項:**若為 Oracle、Linux 或 Debian 等作業系統,請使用包含或支援多重佇列 I/O 排程器的核心版本。CentOS 及其核心版本會支援多重佇列 I/O 排程器。

如果您使用這些作業系統的較早版本,則可能會看到 I/O 效能下降,因為 Nitro 型執行個體在託管層級具有多重佇列處理。這會在作業系統和託管層級的排程器之間建立不相容。

在磁碟區攔截提交至 EBS 磁碟區的 I/O 讀取或寫入請求之前,請求會移動多個層級。對於 Nitro 型執行個體上具有非多重佇列排程器的較舊核心版本,您有時會在 I/O 排程器 (I2D) 層級中看到延遲。延遲會發生在使用 blktraceblkparse,以及 btt 工具的測試和基準測試結果中。如需這些工具的詳細資訊,請參閱 die.net 網站上的 blktraceblkparsebtt

若要改善 Nitro 型執行個體的 I/O 效能,CentOS 7 具有多重佇列區塊 I/O 佇列機制 (blk-mq),可讓裝置驅動程式將 I/O 請求對應至多個硬體或軟體佇列。如需在 Nitro 型系統上獲得最佳效能,最佳實務是使用具有最新核心的最新作業系統。

CentOS 6 上的 I/O 排程器

$cat /sys/block/xvdf/queue/scheduler noop anticipatory deadline \[cfq\]$cat config-2.6.32-754.30.2.el6.x86\_64 | grep -i blk\_mq

**注意事項:**因為 CentOS 6 核心的設定檔使用 noop 排程器,因此它不會傳回 blk_mq

Redhat 9 和核心 5.14 及更高版本上的 I/O 排程器

cat /sys/block/<EBS device name>/queue/scheduler \[none\] mq-deadline kyber bfq

在選擇排程器之前,請檢閱每個排程器的詳細資料。如需詳細資訊,請參閱 Red Hat 網站上的可用磁碟排程器

若要在 EC2 執行個體的執行時間期間更新作業系統層級的排程器,請執行下列命令:

#sudo echo 'kyber'> /sys/block/<EBS device name>/queue/scheduler

若要永久變更 I/O 排程器,請修改 grub 組態並更新 elevator 參數。以下步驟適用於 CentOS 和 Red Hat Enterprise Linux (RHEL):

1.    執行下列命令:

#sudo vim /etc/default/grubGRUB\_CMDLINE\_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet elevator=kyber"

2.    執行下列命令:

#sudo grub2-mkconfig -o /boot/grub2/grub.cfg

如果重新啟動執行個體,則 I/O 排程器會維持設定。

AWS 官方
AWS 官方已更新 6 個月前