Amazon EC2万兆位实例上的最高速度为1.73 Gbps?

当我用iperftesting自己的“10千兆”实例(c3.8xlarge)时,我看不到传输速率超过1.73 Gbps。 这比testing显示7 Gbps和9.5 Gbps结果的 scalablelogic报告中的博主至less差四倍。

我在位于同一个区域和区域的两个c3.8xlarge实例之间进行testing,所以这些应该是最佳的基准条件。 一个c3.8xlarge作为iperf服务器,另一个作为iperf客户端。 这两个实例均使用Amazon Linux AMI 2013.09.2 – ami-5256b825(64位)启动。

为什么我看到如此糟糕的结果?

如果要提高吞吐量,我应该看看什么?

AWS Support承认只能在私有子网networking上的实例之间实现10 GbE的速度。 它要求使用私有IP而不是公有IP,在我的情况下总是最大为1.73 Gbps。 这可能会根据地区和地区而变化。 如果你看到不同的结果,请在这里发表。

这意味着,当涉及到外部吞吐量时,与具有“高”networkingfunction的较小实例相比,c3.8xlarge(或类似的10 GbE实例)提供了可怕的价值。 c1.medium实例的价格是c3.8xlarge的1/16,但是它将允许c3.8xlarge 10 GbE实例(〜1.7 Gbps)的吞吐量(〜0.95 Gbps)的一半以上。

请参阅Wowza论坛上关于AWS Support的答案的这个主题 。

由于虚拟化层,networking层不能直接使用DMA,CPU必须花时间来回复制数据。 在这种情况下,当传输的数据包太多时,需要告诉内核使用多个CPU内核。

您可以通过执行watch -n1 cat /proc/softirqs并查看NET_RX来进行监视。

幸运的是,有一个称为包转向 ( packet steering )的特性,它允许我们使用更多的CPU核心来接收和传输数据包。 在这里输入图像说明

要允许CPU使用多个核心接收数据包,可以使用echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus

你可以通过echo f0 > /sys/class/net/eth0/queues/tx-0/xps_cpus

这样,前4个核心将被用于接收,而下一个4个核心将被用于发送。

 f => 1+2+4+8 = 15 in hexadecimal f0 => 16+32+64+128 = 240 in hexadecimal 

希望这可以帮助你,我们想知道EC2真正的面向公众的吞吐量。 我们刚刚在C4.8xl实例上运行了几个Wowza Edge实例,并且在每个实例6 + Gbps时没有问题。 根据http://www.aerospike.com/blog/boosting-amazon-ec2-network-for-high-throughput/ ,下面的基准似乎是非常准确的:

networking带宽Amazon提供了一系列具有不同内存和CPU数量的实例types。 然而,“logging”不好的是networkingfunction,简单地归类为 – 低,中,高,10Gb。 根据我们在AWS上运行Aerospike服务器的实验以及在AWS上运行的iperf,我们能够更好地将这些类别定义为以下数字:

  • 低 – 高达100 Mbps
  • 中等 – 100 Mbps到300 Mbps
  • 高 – 100 Mbps到1.86 Gbps
  • 10Gb – 高达8.86Gbps *