AWS EBS 块大小

AWS EBS block size

您能否为我指出一些有关 EBS 如何在 gp2 卷的幕后工作的资源? 按照我的理解,它是一种服务,但实际上它是以冗余方式将 SSD 驱动器阵列连接到实例的某种形式 连接的实际物理方法是什么? 文档提到了数据以 16KB 或 256KB 块传输的事实,但我找不到更多相关信息。 例如,如果在 Linux 中,我的分区被格式化为 4KB 块,这是否意味着 EBS 将数据传输到 16KB 块的磁盘或从磁盘传输数据,如果是这样,那么也用 16KB 格式化分区是否有意义阻止并在上游优化它? 如果我有一组非常随机的 4k 操作,这会触发相同数量的 16KB 块请求吗? 如果有人已经做过这样的测试,我真的很想听听...

实际的物理连接方式是通过 AWS 软件定义的以太网 LAN。 EBS 本质上是一个 SAN。这些卷没有物理连接到实例,但它们物理上位于同一可用区内,通过网络进行访问。

如果实例是 "EBS Optimized,",则会单独分配以太网带宽用于实例和 EBS 之间的通信。否则,EBS 也会使用处理该实例所有 IP 流量的同一以太网连接。

EBS gp2 卷后面的 SSD 是 4KiB 页面对齐的。

请参阅 AWS re:Invent 2015 | (STG403) Amazon EBS: Designing for Performance 从 24:15 开始。

AWS re:Invent 2016: Deep Dive on Amazon Elastic Block Store (STG301) 中所述,EBS 卷不是物理卷。他们不会给你一个 SSD 驱动器。 EBS 卷是一个逻辑卷,它跨越可用区中的众多分布式设备。 (设备上的块也在可用区内的 EBS 内复制到第二个设备。)

这些因素应该表明实际 SSD 的性能并不是 EBS 性能中特别重要的因素。从表面上看,EBS 会根据您为卷支付的费用按比例分配资源……这当然与卷的大小以及您选择的功能集(卷类型)成正比。

16KiB 是 EBS 用于建立 gp2 性能基准的 I/O 的标称大小。它可能没有其他特殊意义,因为它似乎与 EBS 分配给您的卷的处理资源和媒体设备本身的关系一样多或更多——EBS 卷存在于具有 "resources" 的存储集群中他们自己的(CPU、内存、网络带宽等)和 16KiB 似乎是与 EBS 基础设施中某种资源分配相关的标称值。

请注意,sc1 和 st1 卷使用非常不同的标称 I/O 大小:1 MiB。显然,这与物理存储设备没有任何关系,因此这证明了 gp2(和 io1)的 16KiB 数字的结论。

gp2 卷可以执行几个限制中的最低值:

  • 160 MiB/second,取决于连接的实例类型‡
  • 该卷当前可用的瞬时 IOPS 数,这是最高的
    • 100 IOPS,无论卷大小如何
    • 每个配置的 GiB 卷大小 3 IOPS
    • 您的令牌桶中可用的 IOPS 积分,上限为 3,000 IOPS
  • 无论卷有多大,每个卷 10,000 IOPS

‡较小的实例类型无法提供 160MiB/second 的网络带宽,无论如何。例如,r3.xlarge 只有半千兆位 (500 Mbps) 的网络带宽,将您的 EBS 总流量限制在大约 62.5 MiB/sec,因此您将无法将更多吞吐量推向一个 EBS 卷,而不是来自该类型实例的 EBS 卷。 除非您使用非常大的实例或非常小的卷,否则对您的 EBS 性能最有可能的限制将是实例的限制,而不是 EBS 的限制。

您的上限为上面列表中的第一个(最低)阈值,标称 16 KiB I/O 大小的影响是这样的:如果您的 I/O 小于 16KiB,您的最大可能 IOPS 不会增加,如果它们更大,您的最大可能 IOPS 可能会降低:

  • 4KiB 的 I/O 大小不会提高性能,因为用于速率限制目的的 I/O 的标称大小已确定为 16KiB,但是
  • 4KiB 的 I/O 大小不太可能显着降低顺序 I/O 的性能,因为出于 EBS 的会计目的,它们是内部组合的。因此,如果您的实例要发出 4 × 4 KiB 顺序 I/O 请求,EBS 可能会将其计为 1 I/O
  • 4KiB 的 I/O 大小和极其随机的 I/Os 确实不会组合,因此理论上相对于相同数量的 16KiB 极其随机的 I/Os 表现不佳,但直觉和经验告诉我,除了极少数情况外,这超出了学术和理论领域。它可能既有帮助又有伤害,因为小写操作会使用相同数量的 IOPS,但会通过网络传输更多不必要的数据。
  • 如果您的 I/O 大于 16KiB,如果您的磁盘带宽在达到 IOPS 阈值之前达到 160MiB/s 阈值,您的最​​大 IOPS 将会降低。

最后的想法是,EBS 在负载下表现最佳。也就是说,生成一系列随机 I/O 的单个线程不会使 EBS 卷的队列充满请求。如果不是这种情况,您将看不到最大可能的性能。

有关 EBS 性能的更多讨论,另请参阅 Amazon EBS Volume Performance on Linux Instances