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

上次更新日期:2020 年 10 月 29 日

我的 ST1 或 SC1 Amazon Elastic Block Store (Amazon EBS) 卷未达到 AWS 文档中显示的吞吐量性能。这是什么原因?

简短描述

使用 HDD Amazon EBS 卷(如 SC1 和 ST1)时,请谨记以下原则:

  • 无论实例上的工作负载使用的实际 I/O 大小如何,这些卷始终使用 1024 KiB I/O 令牌。即使应用程序工作负载的实际 I/O 大小设置为 16 KiB,卷使用的 I/O 令牌大小仍为完整的 1024 KiB。令牌的大部分空间都未得到使用。为了最大限度地提高效率,需填满这 1024Kib。
  • 当顺序工作负载的 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,因此实例向卷发送相同数量的数据时使用的 IPOS 更多。即使吞吐量低于其基准值,这也会导致爆发平衡减少。

解决方法

要使 ST1 和 SC1 EBS 卷达到其最大额定吞吐量,请执行以下操作:

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

示例

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

吞吐量 = I/O 大小 * 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,在这种情况下,如以下计算所示:

3MiB/s/1024Kib = 3 IOPS

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

如果卷以 125 MiB/s 的速度爆发,并且应用程序 I/O 大小为 1024 KiB,则理论上的最大 IOPS 等于 125 IOPS。

吞吐量/IO 大小 = 125MiB/s / 1024 KiB = 125 IOPS.

但是,如果应用程序使用 16 KiB 的 I/O 大小,则发送 3 MiB 的数据将使用 192 IOPS。应用程序无法推送 192 IOPS,因为该卷仅达到理论上的最大值 125 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,也会发生此限制。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?