为什么我的 SC1 或 ST1 EBS 卷没有达到额定的吞吐量性能?

2 分钟阅读
0

我的 ST1 或 SC1 Amazon Elastic Block Store(Amazon EBS)卷未达到 AWS 文档中列出的吞吐量性能。

简短描述

如果您使用硬盘 Amazon EBS 卷,例如 SC1 和 ST1,请查看以下几点:

  • 无论实例上的工作负载使用的实际 I/O 大小如何,这些卷始终使用 1024 KiB 的 I/O 令牌。即使应用程序工作负载的实际 I/O 大小设置为 16 KiB,卷使用的 I/O 令牌大小仍为完整的 1024 KiB。这样做会浪费令牌的大部分空间。为了最大限度地提高效率,请填充整个 1024 KiB。
  • 连续工作负载的 I/O 大于 32 KiB 时,Amazon EBS 始终会将 I/O 合并为一个 1024 KiB 的 I/O 操作。这种合并填充了整个令牌的大小。
  • 当 I/O 小于 32 KiB 或工作负载是随机的,Amazon EBS 不会将 I/O 合并为 1024 KiB。但是,Amazon EBS 仍使用整个 1024 KiB 令牌大小。这使得令牌内的大部分空间都未得到使用。由于 I/O 未合并,因此实例使用更多的 IOPS 向卷发送相同数量的数据。即使吞吐量小于其基准值,这也会降低突发平衡。

解决方法

要让 ST1 和 SC1 EBS 卷达到最大额定吞吐量,请执行以下步骤:

  • 将您的应用程序设置为使用大于 32 KiB 的 I/O 大小。
  • 验证您的应用程序是否使用顺序工作负载。

示例

计算吞吐量时,请使用以下公式:

吞吐量 = I/Osize\ * IOPS

如果 I/O 小于 32 KiB,该卷将达到 IOPS 限制并限制吞吐量。发生这种情况时,该卷永远无法达到额定吞吐量性能。

例如,假设您将 I/O 大小设置为 16 KiB 并发送了 3 MiB/s 的数据:

3MiB/s/16KiB = 192 IOPS

您将连续/连续工作负载的 I/O 大小设置为 32 KiB 时,Amazon EBS 将合并最多 1024 KiB。在这种情况下,Amazon 仅发送 3 个 IOPS,计算如下所示:

3 MiB/s/1024 KiB = 3 IOPS

但是假设您使用了 ST1 卷中的 0.5 TiB(500 GiB)。在这种情况下,理想情况下,该卷可提供 20 MiB/s 的基准吞吐量性能,可以突增至 125 MiB/s。

如果卷突增至 125 MiB/s,应用程序的 I/O 大小为 1024 KiB,理论上最大 IOPS 等于 125 IOPS。

吞吐量/IOsize = 125 MiB/s / 1024 KiB = 125 IOPS.

但是,如果应用程序使用的 I/O 为 16 KiB,发送 3 MiB 的数据会消耗 192 IOPS。由于该卷仅达到理论上最大值 125 IOPS,因此应用程序无法推送 192 IOPS。在这种情况下,卷会将 IOPS 限制为 125:

实际吞吐量 = 16 KiB\ * 125 = 1.95 MiB/s

如前面的计算所示,IOPS 限制为 125 IOPS,Amazon EBS 将吞吐量限制为 1.95 MiB/s。尽管应用程序使用了 1024 KiB 的 I/O 大小,但即使该卷的可突发理论吞吐量为 125 IOPS,也会出现这种限制。

相关信息

I/O 特性和监控

Amazon EBS 卷类型

AWS 官方
AWS 官方已更新 8 个月前