nie*_*ion 3 networking amazon-ec2 bandwidth-measuring
当我使用 iperf 测试我自己的“10 Gigabit”实例 (c3.8xlarge) 时,我不会看到超过 1.73 Gbps 的传输速率。这至少比可扩展逻辑的博主报告的测试显示 7 Gbps 和 9.5 Gbps 的结果差四倍。
我正在位于同一区域和区域的两个 c3.8xlarge 实例之间进行测试,因此这些应该是最佳基准测试条件。一个 c3.8xlarge 充当 iperf 服务器,另一个充当 iperf 客户端。这两个实例均使用 Amazon Linux AMI 2013.09.2 - ami-5256b825(64 位)启动。
为什么我看到如此糟糕的结果?
如果我想提高吞吐量,我应该看什么?
nie*_*ion 12
AWS Support 承认 10 GbE 速度只能在私有子网网络上的实例之间实现。它要求使用私有 IP,而不是公共 IP,在我的情况下,公共 IP 始终最大为 1.73 Gbps。这可能会因地区和地区而异。如果您看到不同的结果,请将它们张贴在这里。
这意味着就外部吞吐量而言,与具有“高”网络功能的较小实例相比,c3.8xlarge(或类似的 10 GbE 实例)提供了可怕的价值。c1.medium 实例的价格是 c3.8xlarge 价格的 1/16,但它的吞吐量 (~0.95 Gbps) 是 c3.8xlarge 10 GbE 实例 (~1.7 Gbps) 的一半以上。
有关AWS Support 的答案,请参阅Wowza 论坛上的此主题。
由于虚拟化层,网络层不能直接使用 DMA,CPU 必须来回复制数据,花费时间做 softirq。在这种情况下,当您传输的数据包过多时,您需要告诉内核为此使用多个 CPU 内核。
您可以通过watch -n1 cat /proc/softirqs查看 NET_RX来监控这一点。
幸运的是,有一个称为数据包控制的功能,它允许我们使用更多的 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7619 次 |
| 最近记录: |