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


本文說明如何在 Windows 虛擬機器 (VM) 執行個體上測試永久磁碟效能。如為 Linux VM,請參閱在 Linux VM 上測試永久磁碟效能

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

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

C4 VM 上,Windows 支援每個裝置提交佇列的最大深度為 1024。當佇列已滿時,Windows 會停止提交 I/O,直到佇列部分耗盡為止,這會大幅降低效能。為避免觸發這種情況,建議您將基準測試工作負載限制為每個已連結磁碟區的總佇列深度為 1024。

設定基準測試軟體

如要對 Windows VM 上的永久磁碟效能進行基準測試,請使用 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. 使用 4 KB 的 I/O 區塊大小和至少 256 的 I/O 深度,執行隨機寫入作業,測試寫入 IOPS:

    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. 使用 4 KB 的 I/O 區塊大小和至少 256 的 I/O 深度,執行隨機讀取作業,以測試讀取 IOPS:

    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. 確認磁碟上沒有未保留的分區。在提升權限的 Command Prompt 視窗中輸入 diskpart

    diskpart
    
  6. 列出連接至 VM 的磁碟:

    DISKPART> list disk
    

    輸出結果會顯示新建立的 1 TB 磁碟,也就是下列範例輸出結果中的磁碟 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. 使用 4 KB 的 I/O 區塊大小和至少 256 的 I/O 深度,執行隨機寫入作業,測試寫入 IOPS:

    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. 使用 4 KB 的 I/O 區塊大小和至少 256 的 I/O 深度,執行隨機讀取作業,以測試讀取 IOPS:

    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。

後續步驟