亚马逊AWS官方博客

新增功能 – ENA Express:提升 EC2 上的网络延迟和单流性能



我们知道您可以随时充分利用所有可用的网络带宽和网络性能,并尽力为您提供这些带宽和网络性能。多年来,网络带宽已从最初 m1 实例上的 250Mbps 提升至最新 m6in 实例上的 200Gbps。除原始带宽外,我们还推出了多项高级联网功能,包括 增强联网Elastic Network Adapter(ENA)以及适用于紧密耦合高性能计算(HPC)工作负载的 Elastic Fabric Adapter(EFA)。

推出 ENA Express
今天我们推出了 ENA Express。ENA Express 以已经支持 Elastic Fabric Adapter 的 可扩展可靠数据报(SRD)协议为基础,可将 P99 流量延迟减少多达 50%,将 P99.9 延迟减少多达 85%(与 TCP 相比),同时还将最大单流带宽从 5Gbps 提高到 25Gbps。总而言之,单流带宽大幅提高,而波动大幅减少。

您可以在新的和现有 ENA 上启用 ENA Express,并将这一性能优势应用到在同一可用区中运行的 c6gn 实例之间的 TCP 和 UDP 流量。

ENA Express 的使用
我使用了一对 c6gn 实例来设置和测试 ENA Express。启动实例后,我通过 AWS 管理控制台 为这两个实例启用了 ENA Express。我找到每个 ENI,将其选中,然后从 Actions(操作)菜单中选择 Manage ENA Express(管理 ENA Express):

我启用了 ENA ExpressENA Express UDP,然后单击 Save(保存):

然后我在这两个实例上将 最大传输单位(MTU)设置为 8900:

$ sudo /sbin/ifconfig eth0 mtu 8900

我在这两个实例上都安装了 iperf3,然后在服务器模式下启动第一个实例:

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

然后我在客户端模式下运行第二个实例并观察结果:

$ iperf3 -c 10.0.178.46
Connecting to host 10.0.178.46, port 5201
[  4] local 10.0.187.74 port 35622 connected to 10.0.178.46 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  2.80 GBytes  24.1 Gbits/sec    0   1.43 MBytes
[  4]   1.00-2.00   sec  2.81 GBytes  24.1 Gbits/sec    0   1.43 MBytes
[  4]   2.00-3.00   sec  2.80 GBytes  24.1 Gbits/sec    0   1.43 MBytes
[  4]   3.00-4.00   sec  2.81 GBytes  24.1 Gbits/sec    0   1.43 MBytes
[  4]   4.00-5.00   sec  2.81 GBytes  24.1 Gbits/sec    0   1.43 MBytes
[  4]   5.00-6.00   sec  2.80 GBytes  24.1 Gbits/sec    0   1.43 MBytes
[  4]   6.00-7.00   sec  2.80 GBytes  24.1 Gbits/sec    0   1.43 MBytes
[  4]   7.00-8.00   sec  2.81 GBytes  24.1 Gbits/sec    0   1.43 MBytes
[  4]   8.00-9.00   sec  2.81 GBytes  24.1 Gbits/sec    0   1.43 MBytes
[  4]   9.00-10.00  sec  2.81 GBytes  24.1 Gbits/sec    0   1.43 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  28.0 GBytes  24.1 Gbits/sec    0             sender
[  4]   0.00-10.00  sec  28.0 GBytes  24.1 Gbits/sec                  receiver

ENA 驱动程序 报告了一些指标,我可以查看这些指标以确认 SRD 的使用情况:

ethtool -S eth0 | grep ena_srd
     ena_srd_mode: 3
     ena_srd_tx_pkts: 25858313
     ena_srd_eligible_tx_pkts: 25858323
     ena_srd_rx_pkts: 2831267
     ena_srd_resource_utilization: 0

这些指标的工作原理如下:

  • ena_srd_mode 表示已为 TCP 和 UDP 流量启用 SRD。
  • ena_srd_tx_pkts 表示已通过 SRD 传输的数据包数量。
  • ena_srd_eligible_pkts 表示有资格通过 SRD 传输的数据包数量。如果在连接的两端都启用了 ENA-SRD,两个连接位于同一可用区,并且数据包使用 UDP 或 TCP 协议,则该数据包符合使用 SRD 的条件。
  • ena_srd_rx_pkts 表示已通过 SRD 接收的数据包数量。
  • ena_srd_resource_utilization 表示所分配 Nitro 网卡资源的使用百分比,与打开的 SRD 连接数成正比。如果该值持续接近 100%,则可能需要增加实例数量或横向扩展到更大的实例大小。

注意事项
对于 ENA Express 和 SRD 应注意以下几个方面:

访问方式 – 我是使用管理控制台来启用和测试 ENA Express 的;此外还支持通过 CLI、API、CloudFormation 和 CDK 访问。

回退 – 如果 TCP 或 UDP 数据包不符合通过 SRD 传输的条件,则只会以通常的方式进行传输。

UDP – SRD 利用多条网络路径并在这些路径之间“喷射”数据包。如果应用程序希望数据包或多或少按顺序到达,这通常会带来挑战。ENA Express 可在交付 UDP 数据包之前恢复正常顺序,减轻应用程序的负担,从而帮助解决这一问题。如果您已在 UDP 上构建了自己的可靠性层,或者应用程序不要求数据包按顺序到达,则可以只为 TCP 启用 ENA Express,而不为 UDP 启用。

实例类型和大小 – 本次发布支持 16xlarge 大小的 c6gn 实例,对其他实例系列和大小的支持也在开发中。

资源利用率 – 正如我在上面所暗示,ENA Express 使用一些 Nitro 卡资源来处理数据包。这种处理会导致每个处理的数据包增加几微秒的延迟,并且对特定实例每秒可以处理的最大数据包数量有少量但可衡量的影响。对于高数据包速率与小数据包大小相结合的情形,ENA Express 可能不合适。对于所有其他情形,您只需启用 SRD 即可享受更高的单流带宽和稳定的延迟。

定价 – 使用 ENA Express 不会产生额外的费用。

区域 – ENA Express 已在所有商业 AWS 区域开放。

关于 SRD
我可以写一篇关于 SRD 的完整介绍,不过我的同事比我更棒! 下面的一些不错资源有助于您了解更多信息:

A Cloud-Optimized Transport for Elastic and Scalable HPC(适用于弹性和可扩展 HPC 的云优化传输)– 该文分析了尝试在基于 TCP 的网络上运行 HPC 流量时出现的挑战,并指出可变性(异常延迟)会对扩展效率产生深远影响,此外还简要概述了 SRD:

可扩展的可靠数据报(SRD)专为超大规模数据中心进行优化:它可跨多条路径进行负载平衡,并可从丢包或链路故障中快速恢复。它利用标准以太网交换机上的标准 ECMP 功能并克服了其局限性:发送方通过操纵数据包封装来控制 ECMP 路径的选择。

这篇文章包含许多有趣的细节,非常值得一读!

In the Search for Performance, There’s More Than One Way to Build a Network(在追求性能的时代,网络构建方法不止一种)– 这篇 2021 年的文章回顾了我们构建 Elastic Fabric Adapter 的决定,并包含了一些重要的数据(和精美的图表),以演示丢包对整体应用程序性能的影响。说到 SRD,有意思的一点是,它可以跟踪发送方和接收方之间多条网络路径的可用性和性能,并且一次最多可在 64 条路径上喷射数据包,以尽可能利用带宽,并在发生丢包时快速恢复。

Jeff