對 EBS 磁碟區進行基準化分析 - Amazon EBS

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

對 EBS 磁碟區進行基準化分析

您可以透過模擬 I/O 工作負載來測試 Amazon EBS 磁碟區的效能。程序如下:

  1. 啟動 EBS 最佳化執行個體。

  2. 建立新 EBS 磁碟區。

  3. 將磁碟區連接至您的 EBS 最佳化執行個體。

  4. 設定和掛載區塊型儲存設備。

  5. 安裝一項工具來基準參考 I/O 效能。

  6. 基準參考您的磁碟區 I/O 效能。

  7. 刪除您的磁碟區並終止您的執行個體,以免繼續收取費用。

重要

某些程序將導致銷毀您衡量之 EBS 磁碟區上現有資料。基準參考程序旨在用於專門為測試目的而建立的磁碟區,而非生產磁碟區。

設定您的執行個體

為了從 EBS 磁碟區獲得最佳效能,我們建議您使用 EBS 最佳化執行個體。EBS 最佳化執行個體在 Amazon EC2 和 Amazon EBS 之間以執行個體提供專用輸送量。EBS 最佳化執行個體在 Amazon EC2 和 Amazon EBS 之間提供專用頻寬,其規格取決於執行個體類型而定。

若要建立 EBS 優化執行個體,請在使用 Amazon EC2 主控台啟動執行個體時選擇 Launch 做為 EBS 優化執行個體,或在使用命令列--ebs-optimized時指定。請務必選取支援此選項的例證類型。

設定 Provisioned IOPS SSD 或 一般用途 SSD 磁碟區

若要使用 Amazon EC2 主控台建立適用於io1磁碟區類型io2的佈建 IOPS SSD (gp2gp3) 或一般用途 SSD () 磁碟區,請選擇佈建 IOPS SSD (io1)佈建 IOPS SSD (io2)一般用途 SSD (gp2)一般用途 SSD (gp3)。在命令列為 io1 參數指定 io2gp2gp3--volume-type。針對 io1io2gp3 磁碟區,指定 --iops 參數的每秒 I/O 操作次數 (IOPS)。如需詳細資訊,請參閱 Amazon EBS 磁碟區類型建立 Amazon EBS 磁碟區

(僅限 Linux 執行個體) 在測試範例中,建議您建立具有 6 個磁碟區的 RAID 0 陣列,以提供高效能。因為您根據所佈建的 Gb 來支付費用 (以及 io1、io2 和 gp3 磁碟區的佈建 IOPS 數目),而非磁碟區的數目,因此建立多個較小磁碟區並用於建立分割集不需額外付費。如果您使用 Oracle Orion 來基準參考磁碟區,可以像 Oracle ASM 一樣模擬分割,因此我們建議您讓 Orion 進行分割。如果您使用不同的基準參考工具,則需要自行對磁碟區進行分割。

如需如何建立 RAID 0 陣列的詳細資訊,請參閱建立陣列

設定輸送量最佳化 HDD (st1) 或冷 HDD (sc1) 磁碟區

若要建立 st1 磁碟區,請在使用 Amazon EC2 主控台建立磁碟區時選擇輸送量最佳化 HDD,或者在使用命令列時指定 --type st1。若要建立 sc1 磁碟區,請在使用 Amazon EC2 主控台建立磁碟區時選擇冷 HDD,或者在使用命令列時指定 --type sc1。如需建立 EBS 磁碟區的資訊,請參閱 建立 Amazon EBS 磁碟區。如需將這些磁碟區連接至執行個體的資訊,請參閱 將 Amazon EBS 磁碟區連接至執行個體

(僅限 Linux 執行個體) AWS 提供 JSON 範本供搭配使用, AWS CloudFormation 可簡化此設定程序。存取範本並將其儲存為 JSON 檔案。 AWS CloudFormation 可讓您設定自己的安全殼層金鑰,並提供更簡單的方式來設定效能測試環境來評估st1磁碟區。該範本會建立最新執行個體和 2 TiB st1 磁碟區,並將該磁碟機在 /dev/xvdf 連接至執行個體。

(僅限 Linux 執行個體) 使用範本建立硬碟磁碟區
  1. 請在以下位置開啟 AWS CloudFormation 主控台。 https://console.aws.amazon.com/cloudformation

  2. 請選擇 Create Stack (建立堆疊)。

  3. 選取 Upload a Template to Amazon S3 (上傳範本至 Amazon S3) 並選取您先前取得的 JSON 範本。

  4. 為您的堆疊命名如「ebs-perf-testing」,然後選取執行個體類型 (預設值為 r3.8xlarge) 和安全殼層金鑰。

  5. 選擇 Next (下一步) 兩次,然後選擇 Create Stack (建立堆疊)

  6. 在新堆疊的狀態從 CREATE_IN_PROGRESS 變為 COMPLETE 之後,選擇 Outputs (輸出) 以獲得新執行個體的公有 DNS 項目,該執行個體將具有與其連接的 2 TiB st1 磁碟區。

  7. 使用在上一個步驟從 DNS 項目取得的主機名稱,以使用者 ec2-user 的形式使用 SSH 連線至新堆疊。

  8. 繼續執行「安裝基準化分析工具」。

安裝基準化分析工具

下表列出一些可用來基準測試 EBS 磁碟區效能的工具。

工具 描述

fio

用於 I/O 效能的基準參考。(注意:fio 具有對 libaio-devel 的依存性。)

若要在 Amazon Linux 上安裝 fio,請執行下列命令:

[ec2-user ~]$ sudo yum install -y fio

若要在 Ubuntu 上安裝 fio,請執行下列命令:

sudo apt-get install -y fio

Oracle Orion Calibration Tool

用於校準與 Oracle 資料庫一起使用之儲存系統的 I/O 效能。

工具 描述
DiskSpd

DiskSpd 是 Microsoft Windows,Windows 服務器和雲服務器基礎設施工程團隊提供的存儲性能工具。您可在此處下載:https://github.com/Microsoft/diskspd/releases

下載 diskspd.exe 可執行檔之後,(藉由選取「Run as Administrator (以管理員身分登入)」) 開啟具有管理權限的命令提示字元,然後導覽至您要從中複製 diskspd.exe 檔案的目錄。

將所需的 diskspd.exe 可執行檔從適當的可執行資料夾 (amd64frearmfrex86fre)) 複製到簡短的簡單路徑,例如 C:\DiskSpd。在大多數情況下,您需要amd64fre資料夾 DiskSpd 中的 64 位元版本。

的源代碼託管 DiskSpd 在以下 GitHub 位置:https://github.com/Microsoft/diskspd

CrystalDiskMark

CrystalDiskMark 是一個簡單的磁盤基準測試軟件。您可以在 https://crystalmark.info/en/software/crystaldiskmark/ 下載該軟體。

這些基準參考工具支援廣泛種類的測試參數。您應使用磁碟區將會支援之工作負載的類似命令。以下提供的這些命令做為幫助您開始之範例。

選擇磁碟區佇列長度

根據您的工作負載和磁碟區類型選擇最佳磁碟區佇列長度。

SSD 支援的磁碟區佇列長度

若要為 SSD 支援的磁碟區上之工作負載決定最佳佇列長度,建議您為每 1000 個可用 IOPS (一般用途 SSD 磁碟機的基準和 Provisioned IOPS SSD 磁碟區的佈建數量) 指定 1 的佇列長度。您即可監控應用程式效能並根據您的應用程式需求來調整該值。

增加佇列長度有助您達到佈建 IOPS、輸送量或最佳系統佇列長度值 (目前設定為 32)。例如,具有 3,000 個佈建 IOPS 的磁碟區應將目標佇列長度定為 3。您應該調校這些值的高低來試驗,以查看何者最適用於您的應用程式。

HDD 支援的磁碟區佇列長度

若要為支援 HDD 之磁碟區上的工作負載決定最佳佇列長度,建議您在執行 1MiB 序列 I/O 時,將佇列長度的目標至少設定為 4。您即可監控應用程式效能並根據您的應用程式需求來調整該值。例如,爆量輸送量為 500 MiB/s 和 IOPS 為 500 的 2 TiB st1 磁碟區應分別執行 4、8 或 16 佇列長度,同時分別執行 1,024 KiB、512 KiB 或 256 KiB 的序列 I/O。您應該調校這些值的高低來試驗,以查看何者最適用於您的應用程式。

停用 C-state

執行基準參考之前,您應該停用處理器 C-state。支援的 CPU 中暫時閒置的核心可能會進入 C-state 以節省電源。呼叫核心來繼續執行時,需要一定的時間量,核心才會再次完成運作。此延遲可能會干擾處理器基準參考例行作業。如需 C-state 的詳細資訊和支援它們的 EC2 執行個體類型,請參閱您的 EC2 執行個體處理器狀態控制

您可以在 Amazon Linux、RHEL 和 CentOS 上停用 C-state,如下所示:

  1. 取得 C-state 的數量。

    $ C:\> cpupower idle-info | grep "Number of idle states:"
  2. 停用 C-state,從 c1 變更為 cN。理想上來說,核心的狀態應該是 c0。

    $ C:\> for i in `seq 1 $((N-1))`; do cpupower idle-set -d $i; done

您可以在 Windows 上停用 C-state,如下所示:

  1. 在中 PowerShell,取得目前的使用中電源配置。

    $current_scheme = powercfg /getactivescheme
  2. 取得電源配置 GUID。

    (Get-WmiObject -class Win32_PowerPlan -Namespace "root\cimv2\power" -Filter "ElementName='High performance'").InstanceID
  3. 取得電源設定 GUID。

    (Get-WmiObject -class Win32_PowerSetting -Namespace "root\cimv2\power" -Filter "ElementName='Processor idle disable'").InstanceID
  4. 取得電源設定子群組 GUID。

    (Get-WmiObject -class Win32_PowerSettingSubgroup -Namespace "root\cimv2\power" -Filter "ElementName='Processor power management'").InstanceID
  5. 將索引的值設定為 1 來停用 C-state。值 0 表示 C-state 已停用。

    powercfg /setacvalueindex <power_scheme_guid> <power_setting_subgroup_guid> <power_setting_guid> 1
  6. 設定作用中配置來確保已儲存設定。

    powercfg /setactive <power_scheme_guid>

執行基準化分析

下列程序說明各種 EBS 磁碟區類型的基準參考命令。

在連接 EBS 磁碟區的 EBS 最佳化執行個體上執行下列命令。如果 EBS 磁碟區是從快照中建立,請務必在進行基準參考前進行初始化。如需詳細資訊,請參閱 初始化 Amazon EBS 磁碟區

完成測試磁碟區後,請參閱下列主題以取得清理的說明:刪除 Amazon EBS 磁碟區和「終止執行個體」。

對 Provisioned IOPS SSD 和 一般用途 SSD 磁碟區進行基準化分析

在您建立的 RAID 0 陣列上執行 fio

下列命令會執行 16 KB 隨機寫入操作。

[ec2-user ~]$ sudo fio --directory=/mnt/p_iops_vol0 --ioengine=psync --name fio_test_file --direct=1 --rw=randwrite --bs=16k --size=1G --numjobs=16 --time_based --runtime=180 --group_reporting --norandommap

下列命令會執行 16 KB 隨機讀取操作。

[ec2-user ~]$ sudo fio --directory=/mnt/p_iops_vol0 --name fio_test_file --direct=1 --rw=randread --bs=16k --size=1G --numjobs=16 --time_based --runtime=180 --group_reporting --norandommap

如需解譯結果的詳細資訊,請參閱此教學:Inspecting disk IO performance with fio

在您建立的磁碟區執行 DiskSpd

下列命令將使用位於 C: 磁碟機的 20GB 測試檔案來執行 30 秒隨機 I/O 測試,寫入率為 25%,讀取率為 75%,區塊大小為 8K。它將使用八個背景工作執行緒,每個背景工作執行緒具有四個未完成的 I/O,以及 1GB 的寫入熵值種子。測試結果將儲存到名稱為 DiskSpeedResults.txt 的文字檔。這些參數會模擬 SQL Server OLTP 工作負載。

diskspd -b8K -d30 -o4 -t8 -h -r -w25 -L -Z1G -c20G C:\iotest.dat > DiskSpeedResults.txt

如需解譯結果的詳細資訊,請參閱此教學:Inspecting disk IO performance with DiskSPd

基準測試st1sc1磁碟區 (Linux 執行個體)

在您的 fiost1 磁碟區上執行 sc1

注意

在執行這些測試之前,請按照 提高st1與 sc1 (僅限 Linux 執行個體) 的高輸送量、高讀取量工作負載的預先讀取 中的說明在執行個體上設定緩衝 I/O。

下列命令會針對連接的 st1 區塊型儲存裝置 (例如 /dev/xvdf) 執行 1 MiB 序列讀取操作:

[ec2-user ~]$ sudo fio --filename=/dev/<device> --direct=1 --rw=read --randrepeat=0 --ioengine=libaio --bs=1024k --iodepth=8 --time_based=1 --runtime=180 --name=fio_direct_read_test

下列命令會針對連接的 st1 區塊型儲存設備執行 1 MiB 序列寫入操作:

[ec2-user ~]$ sudo fio --filename=/dev/<device> --direct=1 --rw=write --randrepeat=0 --ioengine=libaio --bs=1024k --iodepth=8 --time_based=1 --runtime=180 --name=fio_direct_write_test

某些工作負載會對區塊型儲存設備的不同部分執行混合序列讀取和序列寫入。若要對這樣的工作負載進行基準參考,我們建議您使用單獨且同步的 fio 任務來讀取和寫入,並使用 fio offset_increment 選項為每個任務定位不同的區塊型儲存設備位置。

執行此工作負載比序列寫入或序列讀取工作負載稍微複雜一些。在此範例中,使用文字編輯器來建立稱為 fio_rw_mix.cfg 的 fio 任務檔案,其中包含下列內容:

[global] clocksource=clock_gettime randrepeat=0 runtime=180 [sequential-write] bs=1M ioengine=libaio direct=1 iodepth=8 filename=/dev/<device> do_verify=0 rw=write rwmixread=0 rwmixwrite=100 [sequential-read] bs=1M ioengine=libaio direct=1 iodepth=8 filename=/dev/<device> do_verify=0 rw=read rwmixread=100 rwmixwrite=0 offset=100g

然後執行以下命令:

[ec2-user ~]$ sudo fio fio_rw_mix.cfg

如需解譯結果的詳細資訊,請參閱此教學:Inspecting disk I/O performance with fio

直接 I/O 的多個 fio 任務即使使用序列讀取或寫入操作,也會導致 st1sc1 磁碟區的輸送量低於預期。建議您使用一個直接 I/O 任務並使用 iodepth 參數來控制並行 I/O 操作的數目。