本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以透過模擬 I/O 工作負載來測試 Amazon EBS 磁碟區的效能。程序如下:
-
啟動 EBS 最佳化執行個體。
-
建立新 EBS 磁碟區。
-
將磁碟區連接至您的 EBS 最佳化執行個體。
-
設定和掛載區塊型儲存設備。
-
安裝一項工具來基準參考 I/O 效能。
-
基準參考您的磁碟區 I/O 效能。
-
刪除您的磁碟區並終止您的執行個體,以免繼續收取費用。
重要
某些程序將導致銷毀您衡量之 EBS 磁碟區上現有資料。基準參考程序旨在用於專門為測試目的而建立的磁碟區,而非生產磁碟區。
設定您的執行個體
為了從 EBS 磁碟區獲得最佳效能,我們建議您使用 EBS 最佳化執行個體。EBS 最佳化執行個體在 Amazon EC2 和 Amazon EBS 之間以執行個體提供專用輸送量。EBS 最佳化執行個體在 Amazon EC2 和 Amazon EBS 之間提供專用頻寬,其規格取決於執行個體類型而定。
若要建立 EBS 最佳化執行個體,請在使用 Amazon EC2 主控台啟動執行個體時選擇啟動為 EBS 最佳化執行個體,或使用--ebs-optimized命令列指定 。請務必選取支援此選項的執行個體類型。
設定 Provisioned IOPS SSD 或 一般用途 SSD 磁碟區
若要使用 Amazon EC2 主控台建立適用於io1
磁碟區類型io2
的佈建 IOPS SSD (gp2
和 gp3
) 或一般用途 SSD ( 和 ) 磁碟區,請選擇佈建 IOPS SSD (io1)、佈建 IOPS SSD (io2)、一般用途 SSD (gp2) 或一般用途 SSD (gp3)。在命令列為 io1
參數指定 io2
、gp2
、gp3
或 --volume-type。針對 io1
、io2
和 gp3
磁碟區,指定 --iops 參數的每秒 I/O 操作次數 (IOPS)。如需詳細資訊,請參閱 Amazon EBS 磁碟區類型 和 建立 Amazon EBS 磁碟區。
(僅限 Linux 執行個體) 對於範例測試,我們建議您建立具有 6 個磁碟區的 RAID 0 陣列,這可提供高水準的效能。因為您根據所佈建的 Gb 來支付費用 (以及 io1、io2 和 gp3 磁碟區的佈建 IOPS 數目),而非磁碟區的數目,因此建立多個較小磁碟區並用於建立分割集不需額外付費。如果您使用 Oracle Orion 來基準參考磁碟區,可以像 Oracle ASM 一樣模擬分割,因此我們建議您讓 Orion 進行分割。如果您使用不同的基準參考工具,則需要自行對磁碟區進行分割。
如需如何建立 RAID 0 陣列的詳細資訊,請參閱 建立 RAID 0 陣列。
設定輸送量最佳化 HDD (st1
) 或冷 HDD (sc1
) 磁碟區
若要建立 st1
磁碟區,請在使用 Amazon EC2 主控台建立磁碟區時選擇輸送量最佳化 HDD,或者在使用命令列時指定 --type st1
。若要建立 sc1
磁碟區,請在使用 Amazon EC2 主控台建立磁碟區時選擇冷 HDD,或者在使用命令列時指定 --type sc1
。如需建立 EBS 磁碟區的資訊,請參閱 建立 Amazon EBS 磁碟區。如需將這些磁碟區連接至執行個體的資訊,請參閱 將 Amazon EBS 磁碟區連接至 Amazon EC2 執行個體。
(僅限 Linux 執行個體) AWS 提供 JSON 範本以搭配 使用 AWS CloudFormation ,可簡化此設定程序。存取範本st1
磁碟區。該範本會建立最新執行個體和 2 TiB st1
磁碟區,並將該磁碟機在 /dev/xvdf
連接至執行個體。
(僅限 Linux 執行個體) 使用 範本建立 HDD 磁碟區
開啟 AWS CloudFormation 主控台,網址為 https://console.aws.amazon.com/cloudformation
://。 -
請選擇 Create Stack (建立堆疊)。
-
選取 Upload a Template to Amazon S3 (上傳範本至 Amazon S3) 並選取您先前取得的 JSON 範本。
-
將您的堆疊命名為類似 “ebs-perf-testing” 的名稱,並選取一個執行個體類型 (預設為 r3.8xlarge) 和 SSH 金鑰。
-
選擇 Next (下一步) 兩次,然後選擇 Create Stack (建立堆疊)。
-
在新堆疊的狀態從 CREATE_IN_PROGRESS 變為 COMPLETE 之後,選擇 Outputs (輸出) 以獲得新執行個體的公有 DNS 項目,該執行個體將具有與其連接的 2 TiB
st1
磁碟區。 -
使用在上一個步驟從 DNS 項目取得的主機名稱,以使用者
ec2-user
的形式使用 SSH 連線至新堆疊。 -
繼續執行「安裝基準化分析工具」。
安裝基準化分析工具
下表列出一些可用於基準測試 EBS 磁碟區效能的可能工具。
工具 | 描述 |
---|---|
fio |
用於 I/O 效能的基準參考。(注意:fio 具有對 若要在 Amazon Linux 上安裝 fio,請執行下列命令:
若要在 Ubuntu 上安裝 fio,請執行下列命令:
|
用於校準與 Oracle 資料庫一起使用之儲存系統的 I/O 效能。 |
工具 | 描述 |
---|---|
DiskSpd |
DiskSpd 是 Microsoft 的 Windows、Windows Server 和 Cloud Server Infrastructure 工程團隊的一種儲存體效能工具。您可在此處下載:https://github.com/Microsoft/diskspd/releases 下載 將所需的 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,如下所示:
取得 C-state 的數量。
$
cpupower idle-info | grep "Number of idle states:"
停用 C-state,從 c1 變更為 cN。理想上來說,核心的狀態應該是 c0。
$
for i in `seq 1 $((N-1))`; do cpupower idle-set -d $i; done
您可以在 Windows 上停用 C-state,如下所示:
-
在 PowerShell 中,取得目前作用中的電源配置。
$current_scheme = powercfg /getactivescheme
-
取得電源配置 GUID。
(Get-WmiObject -class Win32_PowerPlan -Namespace "root\cimv2\power" -Filter "ElementName='High performance'").InstanceID
-
取得電源設定 GUID。
(Get-WmiObject -class Win32_PowerSetting -Namespace "root\cimv2\power" -Filter "ElementName='Processor idle disable'").InstanceID
-
取得電源設定子群組 GUID。
(Get-WmiObject -class Win32_PowerSettingSubgroup -Namespace "root\cimv2\power" -Filter "ElementName='Processor power management'").InstanceID
-
將索引的值設定為 1 來停用 C-state。值 0 表示 C-state 已停用。
powercfg /setacvalueindex
<power_scheme_guid>
<power_setting_subgroup_guid>
<power_setting_guid>
1 -
設定作用中配置來確保已儲存設定。
powercfg /setactive
<power_scheme_guid>
執行基準化分析
下列程序說明各種 EBS 磁碟區類型的基準參考命令。
在連接 EBS 磁碟區的 EBS 最佳化執行個體上執行下列命令。如果 EBS 磁碟區是從快照中建立,請務必在進行基準參考前進行初始化。如需詳細資訊,請參閱初始化 Amazon EBS 磁碟區。
提示
您可以使用 EBS 詳細效能統計資料提供的 I/O 延遲長條圖,來比較基準測試中 I/O 效能的分佈。如需詳細資訊,請參閱Amazon EBS 詳細效能統計資料。
完成磁碟區測試後,請參閱下列主題以取得清除說明: 刪除 Amazon EBS 磁碟區和終止您的執行個體。
對 Provisioned IOPS SSD 和 一般用途 SSD 磁碟區進行基準化分析
在您建立的 RAID 0 陣列上執行 fio。
下列命令會執行 16 KB 隨機寫入操作。
$
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 隨機讀取操作。
$
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
基準st1
和sc1
磁碟區 (Linux 執行個體)
在您的 fio 和 st1
磁碟區上執行 sc1
。
注意
在執行這些測試之前,請按照 在 st1和 (僅限 sc1 Linux 執行個體) 上為高輸送量、高讀取量的工作負載增加預先讀取 中的說明在執行個體上設定緩衝 I/O。
下列命令會針對連接的 st1
區塊型儲存裝置 (例如 /dev/xvdf
) 執行 1 MiB 序列讀取操作:
$
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 序列寫入操作:
$
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
然後執行以下命令:
$
sudo fiofio_rw_mix.cfg
如需解譯結果的詳細資訊,請參閱此教學:Inspecting disk I/O performance with fio
直接 I/O 的多個 fio 任務即使使用序列讀取或寫入操作,也會導致 st1
和 sc1
磁碟區的輸送量低於預期。建議您使用一個直接 I/O 任務並使用 iodepth
參數來控制並行 I/O 操作的數目。