增加 EC2 上的网络 IO

Increasing network IO on EC2

我正在 EMR 上执行 Spark 作业。该作业当前受到网络瓶颈(从 S3 读取数据)。查看 Ganglia 中的指标,我得到一条大约 600 MBP 的直线。我正在使用 i2.8x 大型实例类型,它应该提供 10Gbps,即 ~ 1280MBPs。我已经验证增强网络已打开并且 VirtualizationType 是 hvm,我是否遗漏了什么?还有其他方法可以提高网络吞吐量吗?

Amazon EC2 实例的网络容量 基于实例类型。实例越大,可用的网络容量就越大。您正在使用 i2 系列中最大的实例类型,这很好。

Enhanced Networking 降低了网络延迟和抖动,并且在有限数量的实例类型上可用。你在用,那就好。

i2.8xl 被列为具有 10Gbps 的网络吞吐量,但这仅限于同一 Placement Group 内的流量。我的测试表明 EMR 实例不是在置放群组中启动,因此它们可能不会接收到可能的全部网络吞吐量。

您可以通过使用更多 较小 实例而不是较少 大型 实例来进行试验。例如,2 x i2.4xlarge 的成本与 1 x i2.8xlarge.

的成本相同

在每个 EC2 系列的最大实例类型上,S3->EC2 带宽实际上速率限制为 5Gbps (625MB/s),即使在具有增强网络和 20Gbps 网络接口的实例上也是如此。这已得到 S3 团队的确认,并且与我在实验中观察到的相符。较小的实例以较低的速率受到速率限制。

S3 的第一个字节时间约为 80-100 毫秒,在第一个字节之后,理论上它能够在 85MB/s 时将数据传送到单个线程。但是,我们平均只观察到每个线程大约 60MB/s (IIRC)。 S3 证实这是意料之中的,并且略高于其客户观察到的结果。我们使用了一个 HTTP 客户端来保持与 S3 端点的连接。小对象产生低吞吐量的主要原因是到第一个字节的时间长。

以下是我们在使用各种 EC2 实例从 S3 下载时观察到的最大带宽(在 MB/s 中):

Instance  MB/s
C3.2XL    114
C3.4XL    245
C3.8XL    600
C4.L      67
C4.XL     101
C4.2XL    266
C4.4XL    580
C4.8XL    600
I2.8XL    600
M3.XL     117
M3.2XL    117
M4.XL     95
M4.10XL   585
X1.32XL   612

我们已经用 32MB 的对象和 10-16 之间的线程数完成了上述测试。

此外,

ec2 上引用的网络性能 instances matrix are benchmarked as described here。这是同一 VPC 中 Amazon EC2 Linux 实例之间的网络带宽。我们在 s3 和 ec2 实例之间观察到的不是他们所承诺的。

EC2 Instance Network performance 似乎被归类为:

  • 中等
  • 10G
  • 20千兆

确定指定为低、中或高的实例的网络带宽似乎是根据具体情况进行的。

C3、C4、R3、I2、M4 和 D2 实例使用 Intel® 82599g 虚拟功能接口,并提供 Enhanced Networking 最大实例大小的 10 GB 接口。

10 和 20 Gigabit 接口只能在公共置放组内通信时才能达到该速度,通常用于支持 HPC。置放群组外的网络流量最大限制为 5 Gbps。

总结:提到的网络带宽是在两个实例之间而不是在 s3 和 ec2.Even 两个实例之间,当它们在同一个放置组中时 + 有 HPC 的支持我们可以达到大约 10/20 Gigabit。