对 Windows 虚拟机上的永久性磁盘性能进行基准化分析


本文档介绍如何在 Windows 虚拟机 (VM) 实例上对 Persistent Disk 性能进行基准化分析。对于 Linux 虚拟机,请参阅在 Linux 虚拟机上对 Persistent Disk 性能进行基准化分析

如需衡量正在运行的实例上正在使用的磁盘的 IOPS 和吞吐量,请使用预期的配置对文件系统进行基准化分析。使用此选项可测试实际工作负载,而不会丢失现有磁盘上的内容。请注意,在对现有磁盘上的文件系统进行基准化分析时,有很多特定于开发环境的因素可能会影响基准化分析结果,并且您可能不会达到磁盘性能限制

如需衡量永久性磁盘的原始性能,请直接对块设备进行基准化分析。使用此选项可将原始磁盘性能与磁盘性能限制进行比较。

C4 虚拟机上,Windows 支持每个设备提交队列的深度上限为 1024。当队列已满时,Windows 会停止提交 I/O,直到队列已部分排空,这会显著降低性能。为避免触发此条件,我们建议您将基准测试工作负载限制为每个挂接的卷的总队列深度为 1024。

配置基准测试软件

如需对 Windows 虚拟机上的 Persistent Disk 性能进行基准化分析,请使用 DISKSPD

  1. 连接到虚拟机实例

  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
    

对正在运行的虚拟机实例上的磁盘的 IOPS 和吞吐量进行基准化分析

如需衡量正在运行的虚拟机实例上活跃磁盘的实际工作负载的 IOPS 和吞吐量,而不丢失磁盘的内容,请对照现有文件系统上的新目录进行基准化分析。

在以下步骤中,假设要测试的磁盘已作为 D: 装载,并且命令在提升权限的命令提示符窗口中执行:

  1. 连接到虚拟机

  2. 验证 DISKSPD 软件配置,并将目录更改为 64 位二进制文件:

    cd C:\DISKSPD\amd64
    
  3. 在磁盘上创建一个名为 DISKTEST.DAT 的新 10 GB 文件:

    set TESTFILE=D:\DISKTEST.DAT
    diskspd -d0 -c10G %TESTFILE%
    
  4. 使用 1 MB 的 I/O 块大小和至少 64 的 I/O 深度,通过执行具有多个并行数据流(16 个或更多)的顺序写入来测试写入吞吐量:

    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. 使用 1 MB 的 I/O 块大小和至少 64 的 I/O 深度,通过执行具有多个(16 个或更多)并行数据流的顺序读取来测试读取吞吐量:

    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 和虚拟机上测试块设备的读写性能。

  1. 创建并启动虚拟机实例

  2. 将 Persistent Disk 添加到要进行基准测试的虚拟机实例

  3. 连接到虚拟机实例

  4. 验证 DISKSPD 软件配置,并将目录更改为 64 位二进制文件:

    cd C:\DISKSPD\amd64
    
  5. 验证磁盘上没有非预留的分区。在提升权限的命令提示符窗口中输入 diskpart

    diskpart
    
  6. 列出挂接到虚拟机的磁盘:

    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. 使用 1 MB 的 I/O 块大小和至少 64 的 I/O 深度,通过执行具有多个并行数据流(16 个或更多)的顺序写入来测试写入吞吐量:

    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 延迟时间时,请务必不要让虚拟机达到带宽或 IOPS 上限,否则观察到的延迟时间将无法反映出实际的永久性磁盘 I/O 延迟时间。

    diskspd -d60 -b4K -o4 -Sh -r -w0 -L %TESTDRIVE%
    
  5. 使用 1 MB 的 I/O 块大小和至少 64 的 I/O 深度,通过执行具有多个(16 个或更多)并行数据流的顺序读取来测试读取吞吐量:

    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. 如需测试读取延迟时间,请务必用数据填充磁盘,以获得真实的延迟时间测量结果。在此测试期间,虚拟机不得达到 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. 清理一次性的 Persistent Disk 和虚拟机:

    1. 删除用于对性能进行基准测试的磁盘
    2. 删除用于对性能进行基准测试而创建的虚拟机

后续步骤