Amazon EBS 如何计算我应该用于提升我的 gp2 或 io1 卷性能的最佳 I/O 大小?

上次更新时间:2020 年 6 月 8 日

我想要提升我的 gp2 或 io1 Amazon Elastic Block Store (Amazon EBS) 卷的吞吐量性能。Amazon EBS 如何计算我应该用于提升性能的 I/O 大小?

解决方法

对于 gp2 和 io1 EBS 卷,Amazon EBS 根据每秒输入/输出 (IOPS) 计算性能。gp2 和 io1 卷可以处理最大 256 KiB 的 I/O。

I/O 操作的大小决定了 EBS 卷提供的吞吐量。Amazon EBS 使用以下公式计算吞吐量:吞吐量 = IOPS 的数量 * 每次 I/O 操作的大小

每次 I/O 操作的大小会因卷类型的差异而有所不同。

  • gp2 卷
    最大 IOPS = 16000
    最大吞吐量 = 250 MiB
  • io1 卷
    最大 IOPS = 64000
    最大吞吐量 = 1000 MiB

注意: Amazon EBS 仅确保基于 Nitro 的实例拥有 1000 MiB/s 的最大吞吐量。其他实例系列最高保证 500 MiB/s。较旧的 io1 卷可能不会发挥出全部性能,除非您对其执行 ModifyVolume 操作

Amazon EBS 使用以下公式计算最佳 I/O 大小:吞吐量/IOPS 的数量 = 最佳 I/O 大小

  • gp2 卷最佳 I/O 大小:250 MiB* 1024/16000 = 16 KiB
  • io1 卷最佳 I/O 大小:1000 MiB* 1024/64000 = 16 KiB

Amazon EBS 在处理前合并 32 KiB 或以上大小的较小的连续 I/O 操作,以形成单个 256 KiB 的 I/O。将较小的连续 I/O 操作合并到较大的单个 I/O 操作可提高吞吐量。

例如,如果应用程序在运行时的 I/O 操作较小,为 32 KiB:

  • 连续操作:Amazon EBS 合并连续(物理连续)操作形成最大 256 KiB 的 I/O 大小。在这种情况下,Amazon EBS 只会计算 1 个 IOPS,以执行由操作系统提交的 8 次 I/O 操作。
  • 随机操作:Amazon EBS 单独计算随机的 I/O 操作。一次随机的大小为 32 KiB 的 I/O 操作计为 1 个 IOPS。在这种情况下,Amazon EBS 会将 8 次随机的 32 KiB 大小的 I/O 操作计为 OS 提供的 8 个 IOPS。

由于 Amazon EBS 试着将较小的 I/O 操作合并成使用较多 I/O 带宽的较大 I/O 操作,您可能会在达到最大 IOPS 前超出吞吐量限制。要避免此问题,您的应用程序的 I/O 操作应足够随机,从而使 Amazon EBS 可以将其计为大小为 16 KiB 的单个 IOPS。

Amazon EBS 会将大小大于最大 256 KiB 的 I/O 操作分割为较小的操作。例如,如果 I/O 大小为 500 KiB,Amazon EBS 会将该操作分割成 2 个 IOPS。第一个为 256 KiB,第二个 244 KiB。

注:关于不支持间接描述符的实例或内核,其平均 I/O 大小等于或接近于 44 KiB。Linux 内核 3.8 及更低版本不支持间接描述符,因此您可能会发现您的 I/O 大小的上限即为 44 KiB。