I/O 特性和监控 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

I/O 特性和监控

在给定卷配置中,某些 I/O 特性会对 EBS 卷的性能表现造成影响。支持 SSD 的卷(即通用型 SSD(gp2gp3)和预置 IOPS SSD(io1io2)能够提供一致的性能,无论 I/O 操作是随机的还是顺序的。支持 HDD 的卷(即吞吐量优化型 HDD(st1)和 Cold HDD(sc1)仅当 I/O 操作是大型顺序操作时才能提供最佳性能。要了解 SSD 和 HDD 卷在您的应用程序中性能如何,务必要知道卷上的需求之间的联系、卷能支持的 IOPS 数量、完成 I/O 操作所需的时间,以及卷的吞吐量限制。

IOPS

IOPS 是表示每秒输入/输出操作数的度量单位。这些操作以 KiB 为单位,而底层驱动程序技术决定了卷类型将作为单个 I/O 计数的最大数据量。由于 SSD 卷处理小型或随机 I/O 比 HDD 卷更有效,因此 SSD 卷的 I/O 大小上限为 256 KiB,而 HDD 卷的 I/O 大小上限为 1,024 KiB。

当小型 I/O 操作在物理上连续进行时,Amazon EBS 会尝试将这些操作合并为单个 I/O 操作,直至最大 I/O 大小。同样,当 I/O 操作大于最大 I/O 大小时,Amazon EBS 会尝试将这些操作分为较小的 I/O 操作。下表显示了一些示例。

卷类型 最大 I/O 大小 来自应用程序的 I/O 操作 IOPS 数量 备注
SSD 256 KiB 1 个 1024 KiB I/O 操作 4(1024÷256=4) Amazon EBS 将 1,024 个 I/O 操作拆分为四个较小的 256 KiB 操作。
8 个连续 32KiB I/O 操作 1(8x32=256) Amazon EBS 将 8 个连续 32 KiB I/O 操作合并为一个 256 KiB 操作。
8 个随机 32 KiB I/O 操作 8 Amazon EBS 分别计算随机 I/O 操作。
HDD 1,024 KiB 1 个 1024 KiB I/O 操作 1 I/O 操作已经等于最大 I/O 大小。它不会被合并或拆分。
8 个连续 128KiB I/O 操作 1(8x128=1024) Amazon EBS 将 8 个连续 128 KiB I/O 操作合并为一个 1,024 KiB I/O 操作。
8 个随机 32 KiB I/O 操作 8 Amazon EBS 分别计算随机 I/O 操作。

这样,当您创建支持 3,000 IOPS(通过将 Provisioned IOPS SSD 卷预置为 3000 IOPS 或将 通用型 SSD 卷大小确定为 1000 GiB)的 SSD 卷时,您就可以将它挂载到一个 EBS 优化实例,该实例可以提供足够的带宽,您可以每秒传输最高 3000 次数据 I/O,其吞吐量由 I/O 大小决定。

卷队列长度和延迟

卷队列长度是指等待设备处理的 I/O 请求的数量。延迟为 I/O 操作的实际端到端客户端时间,也就是说,从将 I/O 发送到 EBS 到接收来自 EBS 的确认以表示 I/O 读取或写入完成所经过的时间。队列长度必须进行适当调整,以便与 I/O 大小和延迟匹配,避免在访客操作系统上或在到 EBS 的网络链路上产生瓶颈。

每个工作负载的最佳队列长度不同,具体取决于您的特定应用程序对于 IOPS 和延迟的敏感程度。如果您的工作负载未提供足够的 I/O 请求来充分利用 EBS 卷的可用性能,则卷可能无法提供您预置 IOPS 或吞吐量。

事务密集型应用程序对 I/O 延迟增加很敏感,很适合支持 SSD 的卷。您可以通过使卷保持较小的队列长度和较高的 IOPS 数量,来维持高 IOPS 和低延迟。持续迫使一个卷的 IOPS 高于它能够支持的 IOPS 可能增加 I/O 延迟。

吞吐量密集型应用程序对 I/O 延迟增加较不敏感,很适合使用 HDD 支持的卷。您可以在执行大型顺序 I/O 时维持大队列长度,从而对 HDD 卷保持高吞吐量。

I/O 大小和卷吞吐量限制

对于 SSD 卷,如果 I/O 大小非常大,由于达到卷的吞吐量限制,您的 IOPS 数可能会少于预配置数量。例如,对于具有可用突增积分的 1000GiB 以下的 gp2 卷,IOPS 限制为 3000,卷吞吐量限制为 250 MiB/s。如果您正在使用 256KiB 的 I/O 大小,则您的卷在 IOPS 为 1000 时将达到其吞吐量限制(1000 x 256KiB = 250MiB)。当 I/O 大小较小(如 16 KiB)时,这个卷可以支持 3000 IOPS,这是因为吞吐量远低于 250 MiB/s。(这些示例都假设卷的 I/O 不会达到实例的吞吐量限制。) 有关每种 EBS 卷类型吞吐量限制的更多信息,请参阅 Amazon EBS 卷类型

对于较小的 I/O 操作,从实例内部进行度量时,您可能会看到 IOPS 值高于预配置值。当实例操作系统在将小型 I/O 操作传递到 Amazon EBS 之前将其合并为一个较大的操作时,会发生这种情况。

如果您的工作负载在 HDD 支持的 st1sc1 卷上使用顺序 I/O,则从实例内部进行度量时,您的 IOPS 值可能会高于预期数量。当实例操作系统将顺序 I/O 进行合并,并以 1024 KiB 大小为单位来对其进行计数时,会发生这种情况。如果您的工作负载使用小型随机 I/O,则吞吐量可能会低于您的预期。这是因为我们会将每个随机的非顺序 I/O 计入总的 IOPS 计数,这可能导致您比预期更快达到卷的 IOPS 限制。

重要

无论您采用何种 EBS 卷类型,如果您的 IOPS 或吞吐量与您在配置中的预期不同,请确保 EC2 实例带宽并不是导致这种结果的限制因素。您应始终使用最新一代的 EBS 优化实例(或包含 10Gb/s 网络连接的实例)以实现最佳性能。有关更多信息,请参阅Amazon EBS 优化的实例。未达到预期 IOPS 的另一个可能原因是未对 EBS 卷执行足够多的 I/O 操作。

使用 CloudWatch 监控 I/O 特性

您可以通过每个卷的 CloudWatch 卷指标监控这些 I/O 特性。要考虑的重要指标包括以下内容:

  • VolumeStalledIOCheck

  • BurstBalance

  • VolumeReadBytes | VolumeWriteBytes

  • VolumeReadOps | VolumeWriteOps

  • VolumeQueueLength

VolumeStalledIOCheck 监控 EBS 卷的状态以确定您的卷何时受损。该指标是一个二进制值,将根据 EBS 卷能否完成 I/O 操作返回 0(通过)或1(失败)状态。此检查可检测 Amazon EBS 基础设施存在的底层问题,如下所示:

  • EBS 卷底层的存储子系统的硬件或软件问题

  • 物理主机上的硬件问题,该问题会影响来自 EC2 实例的 EBS 卷的可访问性

  • 实例和 EBS 卷之间的连接问题

如果 VolumeStalledIOCheck 指标失败,您可以等待 Amazon 解决问题,也可以自行采取措施,例如替换受影响的卷或停止并重启卷所附加到的实例。在大多数情况下,当该指标失败时,EBS 将在几分钟内自动诊断并恢复您的卷。您可以使用 Amazon Fault Injection Service 中的暂停 I/O 操作以运行受控实验,以测试架构并基于此指标进行监控,从而提高应对存储故障的恢复能力。

您可以使用 VolumeReadOpsVolumeWriteOpsVolumeTotalReadTimeVolumeTotalWriteTime 来测量 Amazon EBS 存储 I/O 延迟。您可以使用以下公式来监控卷的平均 I/O 延迟:

Average I/O latency in ms/op = (VolumeTotalReadTime + VolumeTotalWriteTime) / (VolumeReadOps + VolumeWriteOps)

如果您的 I/O 延迟高于您的所需,请检查驱动 IOPS,以确保应用程序不会尝试驱动超过您已预置的 IOPS。您可以使用以下公式来监控卷上的平均驱动 IOPS:

Estimated average IOPS in ops/s = (Sum(VolumeReadOps) + Sum(VolumeWriteOps)) / (Period - Sum(VolumeIdleTime))

如果您的应用程序需要的 IOPS 数量超出您的卷所能提供的数量,则应考虑使用以下选项之一:

  • gp3io2io1 卷,预置了足够 IOPS 以实现所需延迟。

  • 更大的 gp2 卷,提供足够的基准 IOPS 性能

HDD 支持的 st1sc1 卷经过特别设计,旨在对使用 1024 KiB 最大 I/O 大小的工作负载提供最佳性能。要确定卷的平均 I/O 大小,请将 VolumeWriteBytes 除以 VolumeWriteOps。同样的计算也适用于读取操作。如果平均 I/O 大小低于 64 KiB,则提高发送到 st1sc1 卷的 I/O 操作的大小应该能够提高性能。

注意

如果平均 I/O 大小达到或接近 44 KiB,说明您可能是在不支持间接描述符的情况下使用实例或内核。所有 Linux 内核 3.8 及更高版本的内核上具有此支持,任何当代实例也具有此支持。

BurstBalance 以剩余余额百分比的形式显示 gp2st1sc1 卷的突增存储桶余额。当您的突增存储桶耗尽时,卷 I/O(对于 gp2 卷)或卷吞吐量(对于 st1sc1 卷)会限定在基准水平。检查 BurstBalance 值以确定卷是否因为此原因而受限制。有关可用 Amazon EBS 指标的完整列表,请参阅 Amazon EBS 的 Amazon CloudWatch 指标基于 Nitro 的实例的 Amazon EBS 指标

相关资源

有关 Amazon EBS I/O 特征的更多信息,请参阅以下 re:Invent 演示文稿:Amazon EBS:为性能而设计