在 Windows VM 上基準化永久磁碟效能


本文說明如何在 Windows 虛擬機器 (VM) 執行個體上,對永久磁碟效能進行基準測試。如果是 Linux VM,請參閱在 Linux VM 上評估永久磁碟效能

如要測量執行中執行個體所用磁碟的 IOPS 和處理量,請使用預期設定對檔案系統進行基準測試。使用這個選項測試實際工作負載,同時保留現有磁碟的內容。請注意,對現有磁碟上的檔案系統進行基準測試時,開發環境中的許多因素可能會影響基準測試結果,您可能無法達到磁碟效能限制

如要測量永久磁碟的原始效能,請直接對區塊裝置進行基準化。使用這個選項,比較原始磁碟效能與磁碟效能限制。

C4 VM 上,Windows 支援每個裝置提交佇列的深度上限為 1024。佇列填滿時,Windows 會停止提交 I/O,直到佇列部分排空為止,這會大幅降低效能。為避免觸發這項條件,建議您將基準測試工作負載限制為每個附加磁碟區的總佇列深度 1024。

設定基準化軟體

如要對 Windows VM 的 Persistent Disk 效能進行基準測試,請使用 DISKSPD

  1. 連線至 VM 執行個體

  2. 開啟 Powershell,然後使用下列指令下載 DISKSPD 工具:

    $client = New-Object System.Net.WebClient
    $client.DownloadFile("https://github.com/Microsoft/diskspd/releases/latest/download/DiskSpd.zip","$env:temp\DiskSpd-download.zip")
    Expand-Archive -LiteralPath "$env:temp\DiskSpd-download.zip" C:\DISKSPD
    Get-ChildItem C:\DISKSPD
    

在執行中的 VM 執行個體上,對磁碟的 IOPS 和總處理量進行基準化

如要測量執行中 VM 執行個體上作用中磁碟的 IOPS 和總處理量,請針對現有檔案系統中的新目錄進行基準測試,這樣就能模擬實際工作負載,且不會遺失磁碟內容。

在下列步驟中,假設要測試的磁碟已掛接為 D:,且指令是在具有管理員權限的「命令提示字元」 (cmd.exe) 視窗中執行:

  1. 連線至 VM

  2. 驗證 DISKSPD 軟體設定,並將目錄變更為 64 位元二進位檔:

    cd C:\DISKSPD\amd64
    
  3. 在磁碟上建立名為 DISKTEST.DAT 的 10 GB 新檔案:

    set TESTFILE=D:\DISKTEST.DAT
    diskspd -d0 -c10G %TESTFILE%
    
  4. 測試寫入總處理量。搭配多個平行串流 (16 個以上) 使用循序寫入,且 I/O 區塊大小為 1 MB,I/O 深度則為 64 以上:

    diskspd -d60 -b1M -o64 -Sh -w100 -t16 -si %TESTFILE%
    
  5. 測試寫入 IOPS。使用 4 KB 的 I/O 區塊大小和至少 256 的 I/O 深度,執行隨機寫入:

    diskspd -d60 -b4K -o256 -Sh -w100 -r %TESTFILE%
    
  6. 測試讀取總處理量。搭配多個平行串流 (16 個以上) 使用循序讀取,且 I/O 區塊大小為 1 MB,I/O 深度則為 64 以上:

    diskspd -d60 -b1M -o64 -Sh -t16 -si %TESTFILE%
    
  7. 測試讀取 IOPS。使用 4 KB 的 I/O 區塊大小和至少 256 的 I/O 深度,執行隨機讀取:

    diskspd -d60 -b4K -o256 -Sh -r %TESTFILE%
    
  8. 清除:

    del %TESTFILE%
    

基準化原始永久磁碟效能

如要單獨測量開發環境以外的 Persistent Disk 磁碟區效能,請在拋棄式 Persistent Disk 和 VM 上測試區塊裝置的讀寫效能。

  1. 建立並啟動 VM 執行個體

  2. 將永久磁碟新增至要進行基準測試的 VM 執行個體

  3. 連線至 VM 執行個體

  4. 驗證 DISKSPD 軟體設定,並將目錄變更為 64 位元二進位檔:

    cd C:\DISKSPD\amd64
    
  5. 確認磁碟上沒有非保留分割區。在升級的命令提示字元視窗中輸入 diskpart

    diskpart
    
  6. 列出附加至 VM 的磁碟:

    DISKPART> list disk
    

    輸出結果會顯示新建立的 1 TB 磁碟,在下列範例輸出中為 Disk 1:

      Disk ###  Status         Size     Free     Dyn  Gpt
      --------  -------------  -------  -------  ---  ---
      Disk 0    Online          120 GB  1024 KB        *
      Disk 1    Online         1024 GB  1023 GB        *
    
  7. 選取要進行基準測試的磁碟。

    DISKPART> select disk 1
    
  8. 列出所選磁碟上的磁碟分割區。

    DISKPART> list partition
    
       Partition ###  Type              Size       Offset
       -------------  ----------------  --------   -------
       Partition 1    Reserved              15 MB    17 KB
       Partition 2    Primary             1024 GB    16 MB
    
  9. 選取主要磁碟分割 2:

    DISKPART> select partition 2
    
  10. 刪除所選分區:

    DISKPART> delete partition
    
  11. 退出 diskpart

    DISKPART> exit
    

如果預計要進行基準測試的磁碟除了保留磁碟分割區外,還有其他磁碟分割區,請重複上述步驟。如果只剩下保留磁碟分割區,請繼續執行下列步驟:

  1. 找出磁碟並確認沒有任何磁碟分割後,請將 TESTDRIVE 環境變數設為「#」,然後輸入要測試的磁碟編號。

    C:/> set TESTDRIVE=#1
    
  2. 測試寫入總處理量。搭配多個平行串流 (16 個以上) 使用循序寫入,且 I/O 區塊大小為 1 MB,I/O 深度則為 64 以上:

    diskspd -d60 -b1M -o64 -Sh -t16 -si -w0 %TESTDRIVE%
    
  3. 測試寫入 IOPS。使用 4 KB 的 I/O 區塊大小和至少 256 的 I/O 深度,執行隨機寫入:

    diskspd -d60 -b4K -o256 -Sh -r -w0 %TESTDRIVE%
    
  4. 測試寫入延遲。測試 I/O 延遲時,請確保 VM 未達到頻寬或 IOPS 上限,否則觀察到的延遲無法反映出實際的永久磁碟 I/O 延遲狀況。

    diskspd -d60 -b4K -o4 -Sh -r -w0 -L %TESTDRIVE%
    
  5. 測試讀取總處理量。搭配多個平行串流 (16 個以上) 使用循序讀取,且 I/O 區塊大小為 1 MB,I/O 深度則為 64 以上:

    diskspd -d60 -b1M -o64 -Sh -t16 -si %TESTDRIVE%
    
  6. 測試讀取 IOPS。使用 4 KB 的 I/O 區塊大小和至少 256 的 I/O 深度,執行隨機讀取:

    diskspd -d60 -b4K -o256 -Sh -r %TESTDRIVE%
    
  7. 如要測試讀取延遲,請務必為磁碟填充資料,這樣才能測出真實的延遲時間。此外,請確保 VM 在測試期間未達到 IOPS 或總處理量上限,因為永久磁碟達到飽和上限後,就會拒絕連入 I/O 作業,導致 I/O 延遲出現人為增加的情況。

    diskspd -d60 -b4K -o4 -Sh -r -L %TESTDRIVE%
    
  8. 測試循序讀取頻寬。

    diskspd -d60 -b1M -o64 -Sh -t4 -si %TESTDRIVE%
    
  9. 測試循序寫入頻寬。

    diskspd -d60 -b1M -o64 -Sh -t4 -si -w100 %TESTDRIVE%
    
  10. 清除拋棄式永久磁碟和 VM:

    1. 刪除用於基準測試的磁碟
    2. 刪除為基準化效能而建立的 VM

後續步驟