我在 Windows Server 2012R2 映像上使用了 4 个 10GB GP2 EBS 卷和 RAID0,如下所述:http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/raid-config.html我使用的实例类型是 R3.large
我原本期望在爆发池已满时看到 4*3000(12K IOPS),但我始终只能获得 7480 IOPS。没问题。
之后,我将实例类型更改为 R4.large,它应该使用较新版本的 CPU(broadwell 而不是 Ivy Bridge),而且很可能速度更快。我保持其他所有设置不变,相同的磁盘、相同的操作系统、相同的测试:性能比 R3.large 差,约为 6480 IOPS。
这里有什么问题?为什么同一实例组(R-“内存密集型”)的较新一代的性能会比以前更差?
答案1
您的约束似乎来自实例类型的网络限制,而不是 EBS 本身。
需要读懂字里行间的意思,但EBS 优化实例 文档讲述了一个有趣的故事——您的数字实际上比实例类型声称能够支持的估计 IOPS 要好。
EBS 优化实例有两条网络路径,其中一条专用于 EBS 连接,而不是只有一条网络路径供所有进出实例的 IP 流量共享……因此,尽管文档没有明确说明这一点,但无论实例是否为 EBS 优化,速度似乎都相同——不同之处在于,对于优化实例,EBS 流量不必共享同一管道。实例的总带宽增加了一倍,一半分配给 EBS,另一半分配给其他所有流量。
您提到使用 r3.large 实例,但这并未在表中显示...但如果我们从 r3.xlarge 向后推断,那里的数字就非常小了。
如文档中所述,IOPS 估算值为“基于 100% 只读工作负载的四舍五入近似值”并且由于列出的速度下的连接是全双工的,因此如果混合读写,数字可能会更大。
type network mbits/s mbytes/s estimated peak IOPS
r4.large 400 50 3,000
r4.xlarge 800 100 6,000
r3.large 250 31.25 2,000 (ratio-based speculation)
r3.xlarge 500 62.5 4,000
通过扫描 500 GiB gp2 卷的前 512 MiB 来测试我的一台 r3.large,似乎证实了这种网络速度。这台机器不是 EBS 优化的,在运行此测试时没有处理任何有意义的工作负载。这与我之前对 r3.large 的观察一致。一段时间以来,我的设计假设是这些机器的连接速度只有大约 0.25 Gbit/s,但测试似乎值得重复。当然,这是一个 Linux 系统,但基本原则应该都适用。
# sync; echo 1 > /proc/sys/vm/drop_caches; dd if=/dev/xvdh bs=1M count=512 | pv -a > /dev/null
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 14.4457 s, 37.2 MB/s
[35.4MB/s]
这看起来非常像 ~250 兆比特/秒的网络连接,当您需要存储吞吐量时,这并不是很大的带宽。与直觉相反,如果您的工作负载适合 t2 CPU 信用模型,那么您从 t2 获得的性能实际上会比从 r3 获得的性能更好。