2024年3月19日 星期二

測試磁碟 FIO , DISKSPD

基準測試磁碟

適用於: ✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集

效能評定的過程中會在應用程式上模擬不同工作負載,並測量應用程式在每個工作負載上達到的效能。 您已根據為高效能而設計一文所述的步驟來收集應用程式效能需求。 您可以在裝載應用程式的 VM 上執行效能評定工具,以判斷應用程式利用進階 SSD 可達成的效能等級。 在本文中,我們針對以 Azure 進階 SSD 佈建的 Standard_D8ds_v4 VM,提供效能評定範例。

我們分別在 Windows 和 Linux 上使用一般效能評定工具 DiskSpd 和 FIO。 這些工具會繁衍多個執行緒來模擬類似實際執行的工作負載,並測量系統效能。 您也可以使用這些工具來設定參數,例如區塊大小和佇列深度,您通常無法在應用程式中變更這些參數。 針對不同類型的應用程式工作負載,這可讓您在以進階 SSD 佈建的高延展性 VM 上,更靈活地發揮最大效能。 若要深入瞭解每個效能評定工具,請造訪 DiskSpdFIO

若要遵循下列範例,請建立Standard_D8ds_v4,並將四個進階 SSD 連結至 VM。 在四個磁碟中,將三個磁碟的主機快取設定為「無」,並將其串接成一個名為 NoCacheWrites 的磁碟區。 在剩下的磁碟上,將主機快取設定為「唯讀」,並使用此磁碟建立一個稱為 CacheReads 的磁碟區。 使用此設定,您就可以看到 Standard_D8ds_v4 VM 發揮最大的讀取和寫入效能。 如需使用進階 SSD 建立 Standard_D8ds_v4 的詳細步驟,請參閱為高效能而設計

準備快取

設有「唯讀」主機快取的磁碟能夠提供高於磁碟限制的 IOPS。 若要從主機快取獲得這種最高的讀取效能,您必須先準備此磁碟的快取。 如此可確保效能評定工具在 CacheReads 磁碟區上推動的讀取 IO 實際上是命中快取,而非直接觸及磁碟。 快取命中會讓已啟用快取的單一磁碟產生更多 IOPS。

重要

每次重新啟動 VM 時,您必須在執行效能評定之前將快取準備好。

DISKSPD

在 VM 上下載 DISKSP 工具。 DISKSPD 是一種您可自訂的工具,可建立您自己的綜合工作負載。 我們將使用上述的相同設定來執行效能評定測試。 您可以變更規格以測試不同的工作負載。

在此範例中,我們使用下列一組基準參數:

  • -c200G:建立 (或重新建立) 測試中使用的樣本檔案。 可以設定為位元組、KiB、MiB、GiB 或區塊。 在此案例下,會使用 200-GiB 目標檔案的大型檔案來將記憶體快取降至最低。
  • -w100:指定寫入要求 (-w0 相當於 100% 讀取) 的作業百分比。
  • -b4K:表示區塊大小 (以位元組、KiB、MiB 或 GiB 為單位)。 在此案例下,會使用 4K 區塊大小來模擬隨機 I/O 測試。
  • -F4:設定四個執行緒的總計。
  • -r:指出隨機 I/O 測試 (會覆寫 -s 參數)。
  • -o128:表示每個執行緒每個目標未處理的 I/O 要求數目。 這也稱為佇列深度。 在此案例下,會使用 128 來強調 CPU。
  • -W7200:指定開始測量之前準備時間的持續時間。
  • -d30:指定測試的持續時間,不包括準備時間。
  • -Sh:停用軟體和硬體寫入快取 (相當於 -Suw)。

如需完整的參數清單,請參閱 GitHub 存放庫

最大寫入 IOPS

我們使用 128 的高佇列深度為、8 KB 的小型區塊大小,以及四個背景工作執行緒來推動寫入作業。 寫入背景工作角色會在「NoCacheWrites」磁碟區上推動流量,此磁碟區有三個其快取設為「無」的磁碟。

執行下列命令,進行 30 秒的準備和 30 秒的測量:

diskspd -c200G -w100 -b8K -F4 -r -o128 -W30 -d30 -Sh testfile.dat

結果顯示 Standard_D8ds_v4 VM 產生其最大寫入 IOPS 限制 (12,800)。

For 3208642560 total bytes, max total I/Os of 391680, with a total of 101.97 MiB/s, and a total of 13052.65 I/O per second.

最大讀取 IOPS

我們使用 128 的高佇列深度為、4 KB 的小型區塊大小,以及四個背景工作執行緒來推動讀取作業。 讀取背景工作角色會在「CacheReads」磁碟區上推動流量,此磁碟區有一個其快取設為「唯讀」的磁碟。

執行下列命令,進行兩小時的準備和 30 秒的測量:

diskspd -c200G -b4K -F4 -r -o128 -W7200 -d30 -Sh testfile.dat

結果顯示 Standard_D8ds_v4 VM 產生其最大讀取 IOPS 限制 (77,000)。

For 9652785152 total bytes, there were 2356637 total I/Os, at 306.72 total MiB/s, and a total of 78521.23 I/Os per second.

輸送量上限

若要取得讀取和寫入輸送量上限,您可以變更為較大的區塊大小 (64 KB)。

FIO

FIO 是 Linux VM 上用於儲存體效能評定的一項常用工具。 它可以靈活地選取不同的 IO 大小、循序或隨機讀取和寫入。 它會繁衍背景工作執行緒或處理程序來執行指定的 I/O 作業。 您可以使用工作檔案,指定每個背景工作執行緒必須執行的 I/O 作業類型。 我們已經為下面範例所示的每個案例建立一個工作檔案。 您可以變更這些工作檔案中的規格,對進階儲存體上執行的不同工作負載進行效能評定。 在範例中,我們使用執行 Ubuntu 的 Standard_D8ds_v4。 請使用效能評定一節開頭所述的相同設定,並於執行效能評定測試之前準備快取。

開始進行之前,請先在虛擬機器上 下載 FIO 並安裝。

對 Ubuntu 執行下列命令,

apt-get install fio

我們會在磁碟上使用四個背景工作執行緒來推動讀取作業,並使用四個背景工作執行緒來推動讀取作業。 寫入背景工作角色會在「nocache」磁碟區上推動流量,此磁碟區有三個其快取設為「無」的磁碟。 讀取背景工作角色會在「readcache」磁碟區上推動流量,此磁碟區有一個其快取設為「唯讀」的磁碟。

最大寫入 IOPS

使用下列規格建立作業檔案,以產生最大寫入 IOPS。 將它命名為 "fiowrite.ini"。

ini
[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4

[writer1]
rw=randwrite
directory=/mnt/nocache

請注意以下與先前幾節所述的設計指導方針一致的重要事項。 這些規格對於達到最大 IOPS 很重要,

  • 較高的佇列深度 256。
  • 較小的區塊大小 4 KB。
  • 執行隨機寫入的多個執行緒。

執行下列命令,開始執行 FIO 測試 30 秒,

sudo fio --runtime 30 fiowrite.ini

當測試執行時,您能夠看到 VM 和高階磁碟產生的寫入 IOPS 數目。 如下列樣本所示,Standard_D8ds_v4 VM 產生其最大寫入 IOPS 限制 (12,800 IOPS)。
Number of write IOPS VM and premium SSDs are delivering, shows that writes are 13.1k IOPS.

最大讀取 IOPS

使用下列規格建立作業檔案,以產生最大讀取 IOPS。 將它命名為 "fioread.ini"。

ini
[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4

[reader1]
rw=randread
directory=/mnt/readcache

請注意以下與先前幾節所述的設計指導方針一致的重要事項。 這些規格對於達到最大 IOPS 很重要,

  • 較高的佇列深度 256。
  • 較小的區塊大小 4 KB。
  • 執行隨機寫入的多個執行緒。

執行下列命令,開始執行 FIO 測試 30 秒,

sudo fio --runtime 30 fioread.ini

當測試執行時,您能夠看到 VM 和高階磁碟產生的讀取 IOPS 數目。 如下列樣本所示,Standard_D8ds_v4 VM 產生超過 77,000 的讀取 IOPS。 這是磁碟和快取效能的組合。
Screenshot of the number of write IOPS VM and premium SSDs are delivering, shows that reads are 78.6k.

最大讀取和寫入 IOPS

使用下列規格建立作業檔案,以產生最大讀取和寫入 IOPS。 將它命名為 "fioreadwrite.ini"。

ini
[global]
size=30g
direct=1
iodepth=128
ioengine=libaio
bs=4k
numjobs=4

[reader1]
rw=randread
directory=/mnt/readcache

[writer1]
rw=randwrite
directory=/mnt/nocache
rate_iops=3200

請注意以下與先前幾節所述的設計指導方針一致的重要事項。 這些規格對於達到最大 IOPS 很重要,

  • 較高的佇列深度 128。
  • 較小的區塊大小 4 KB。
  • 執行隨機讀取和寫入的多個執行緒。

執行下列命令,開始執行 FIO 測試 30 秒,

sudo fio --runtime 30 fioreadwrite.ini

當測試執行時,您能夠看到 VM 和高階磁碟產生的結合讀取和寫入 IOPS 數目。 如下列樣本所示,Standard_D8ds_v4 VM 產生超過 90,000 的結合讀取和寫入 IOPS。 這是磁碟和快取效能的組合。
Combined read and write IOPS, shows that reads are 78.3k and writes are 12.6k IOPS.

結合的最大輸送量

若要獲得最大的結合讀取和寫入輸送量,請使用較大的區塊大小和較大佇列深度,並搭配執行讀取和寫入的多個執行緒。 您可以使用 64 KB 的區塊大小和 128 的佇列深度。

下一步

繼續閱讀為高效能而設計一文。

在本文中,您會為原型建立一份類似於現有應用程式的檢查清單。 您可以使用效能評定工具,在原型應用程式上模擬工作負載並測量效能。 這樣做可讓您判斷哪一個磁碟供應項目可符合或超越您的應用程式效能需求。 然後,您可以對實際執行的應用程式運用相同的指導方針。

 

 https://learn.microsoft.com/zh-tw/azure/virtual-machines/disks-benchmarks

沒有留言: