对 EBS 卷进行基准测试 - Amazon Elastic Compute Cloud
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

对 EBS 卷进行基准测试

您可以通过模拟 I/O 工作负载来测试 Amazon EBS 卷的性能。过程如下所述:

  1. 启动 EBS 优化实例。

  2. 创建新的 EBS 卷。

  3. 将这些卷附加到您的 EBS 优化实例。

  4. 配置并挂载块储存设备。

  5. 安装工具以便测试 I/O 性能。

  6. 测试卷的 I/O 性能。

  7. 删除卷并终止实例,确保不会继续引发更改。

重要

某些过程可能会对您进行基准测试的 EBS 卷上的现有数据造成破坏。基准测试程序适用于出于测试目的而特别创建的卷,并不适用于生产卷。

设置实例

为了获得最佳的 EBS 卷性能,我们建议您使用 EBS 优化实例。EBS 优化实例可在 Amazon EC2 和 Amazon EBS 之间提供实例专用吞吐量。EBS 优化的实例在 Amazon EC2 与 Amazon EBS 之间提供了专用带宽,其规格取决于实例类型。有关更多信息,请参阅Amazon EBS 优化的实例

要创建 EBS 优化实例,可在使用 Amazon EC2 控制台启动实例时选择作为 EBS 优化的实例启动,或在使用命令行时指定 --ebs-optimized。请确保您启动的实例是支持该选项的最新一代实例。有关更多信息,请参阅Amazon EBS 优化的实例

设置预配置 IOPS SSD (io1) 卷

要创建 io1 卷,请在使用 Amazon EC2 控制台创建卷时选择 预配置 IOPS SSD,或在命令行中指定 --type io1 --iops n,其中 n 是 100 到 64,000 之间的整数。有关 EBS 卷规格的详细信息,请参阅 Amazon EBS 卷类型。有关创建 EBS 卷的信息,请参阅创建 Amazon EBS 卷。有关将这些卷附加到实例的信息,请参阅将 Amazon EBS 卷附加到实例

设置吞吐优化 HDD (st1) 或Cold HDD (sc1) 卷

要创建 st1 卷,可在使用 Amazon EC2 控制台创建卷时选择吞吐优化 HDD,或在使用命令行时指定 --type st1。要创建 sc1 卷,可在使用 Amazon EC2 控制台创建卷时选择Cold HDD,或在使用命令行时指定 --type sc1。有关创建 EBS 卷的信息,请参阅创建 Amazon EBS 卷。有关将这些卷附加到您的实例的信息,请参阅 将 Amazon EBS 卷附加到实例

安装基准测试工具

下表列出了您可用于对 EBS 卷的性能进行基准测试的部分可用工具。

工具 Description
DiskSpd

DiskSpd 是 Microsoft 的 Windows、Windows Server 和 Cloud Server Infrastructure 工程团队的一种存储性能工具。可以通过 https://gallery.technet.microsoft.com/DiskSpd-A-Robust-Storage-6ef84e62/file/199535/2/DiskSpd-2.0.21a.zip 下载此工具。

下载 diskspd.exe 可执行文件后,以管理权限打开命令提示符(通过选择“以管理员身份运行”),然后导航到复制 diskspd.exe 文件的目录。

将所需的 diskspd.exe 可执行文件从相应的可执行文件的文件夹(amd64frearmfrex86fre))复制到简短的路径,如 C:\DiskSpd。在大多数情况下,您需要从 amd64fre 文件夹中获得 64 位版本的 DiskSPD。

DiskSpd 的源代码托管在 GitHub 上:https://github.com/Microsoft/diskspd

CrystalDiskMark

CrystalDiskMark 是一个简单的磁盘基准软件。可以在 https://crystalmark.info/en/software/crystaldiskmark/ 下载它。

这些基准测试工具可支持各种测试参数。您应该使用命令来测试您的卷支持的工作负载。下面提供的命令示例可帮助您入门。

选择卷队列长度

基于工作负载和卷类型选择最佳卷队列长度。

SSD 支持的卷的队列长度

要确定 SSD 卷上工作负载的最佳队列长度,建议您将每 1000 IOPS(gp2 卷的基准量,io1 卷的预配置量)对应 1 个队列长度作为目标。然后,您可以监控应用程序性能,并根据应用程序需求调整该值。

在达到预配置 IOPS、吞吐量或最佳系统队列长度值之前,增加队列长度有好处,当前队列长度设置为 32。举例来说,预配置 3,000 IOPS 的卷应该将队列长度设置为 3。您应该尝试将这些值调高或调低,看看对于您的应用程序,什么样的设置能够实现最佳性能。

HDD 支持的卷的队列长度

要确定 HDD 卷上工作负载的最佳队列长度,建议您在执行 1MiB 顺序 I/O 时以至少为 4 的队列长度作为目标。然后,您可以监控应用程序性能,并根据应用程序需求调整该值。例如,突发吞吐量为 500 MiB/s、IOPS 为 500 的 2 TiB st1 卷在执行 1024 KiB、512 KiB 或 256 KiB 的顺序 I/O 时,分别应该将队列长度 4、8 或 16 作为目标。您应该尝试将这些值调高或调低,看看对于您的应用程序,什么样的设置能够实现最佳性能。

禁用 C 状态

在运行基准测试之前,您应禁用处理器 C 状态。支持此功能的 CPU 中的核心在暂时空闲时,会进入 C 状态以节省功耗。在调用核心以恢复处理时,将经过一段特定的时间,核心才能再次全速运行。此延迟可能会干扰处理器基准测试例程。有关 C 状态以及哪些 EC2 实例类型支持此状态的更多信息,请参阅 EC2 实例的处理器状态控制

在 Windows 上禁用 C 状态

在 Windows 上,您可以按以下所示禁用 C 状态:

  1. 在 PowerShell 中,获取当前活动的电源方案。

    C:\> $current_scheme = powercfg /getactivescheme
  2. 获取电源方案 GUID。

    C:\> (Get-WmiObject -class Win32_PowerPlan -Namespace "root\cimv2\power" -Filter "ElementName='High performance'").InstanceID
  3. 获取电源设置 GUID。

    C:\> (Get-WmiObject -class Win32_PowerSetting -Namespace "root\cimv2\power" -Filter "ElementName='Processor idle disable'").InstanceID
  4. 获取电源设置子组 GUID。

    C:\> (Get-WmiObject -class Win32_PowerSettingSubgroup -Namespace "root\cimv2\power" -Filter "ElementName='Processor power management'").InstanceID
  5. 通过将索引的值设置为 1 来禁用 C 状态。值为 0 表示已禁用 C 状态。

    C:\> powercfg /setacvalueindex <power_scheme_guid> <power_setting_subgroup_guid> <power_setting_guid> 1
  6. 设置活动方案以确保设置已保存。

    C:\> powercfg /setactive <power_scheme_guid>

执行基准测试

以下步骤介绍各种 EBS 卷类型的基准测试命令。

对附加了 EBS 卷的 EBS 优化实例运行以下命令。如果已从快照创建 EBS 卷,在执行基准测试之前,请确保初始化这些卷。有关更多信息,请参阅 初始化 Amazon EBS 卷

完成对卷的测试后,可参阅以下主题来帮助清除卷:删除 Amazon EBS 卷终止实例

对 io1 卷进行基准测试

在您创建的卷上运行 DiskSpd

以下命令将使用位于 T: 驱动器上的 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 T:\iotest.dat > DiskSpeedResults.txt

有关解析结果的更多信息,请参阅以下教程:使用 DiskSPd 检查磁盘 IO 性能