在 Windows 实例上使用 ENA Express 提高网络性能 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Windows 实例上使用 ENA Express 提高网络性能

ENA Express 由 Amazon 可扩展的可靠数据报(SRD)技术提供支持。SRD 是一种高性能网络传输协议,使用动态路由来提高吞吐量并最大限度地减少尾部延迟。使用 ENA Express,您可在同一子网中的两个 EC2 实例之间通信。

ENA Express 的优势
  • 将子网内的单个流可以使用的最大带宽从 5Gbps 增大到 25Gbps,最大不超过实例的总计限制。

  • 减少 EC2 实例之间网络流量的尾部延迟,尤其是在网络高负载期间。

  • 检测并避开拥塞的网络路径。

  • 直接在网络层处理某些任务,比如接收端的数据包重新排序以及所需的大部分重传。这样可以腾出应用层用于其他工作。

注意

如果您的应用程序每秒发送或接收大量数据包,并且大部分时间都需要优化延迟,尤其是在网络不拥塞的时段,那么 增强联网 可能更适合您的网络。

在网络流量较少的时段内,当数据包使用 ENA Express 时,您可能会注意到数据包延迟略有增加(数十微秒)。在此期间,优先考虑特定网络性能特征的应用程序可以从 ENA Express 中受益,如下所示:

  • 同一个子网内的最大单个流带宽从 5Gbps 增大到 25Gbps,最大不超过实例的总计限制,进程可以从中受益。例如,如果一种特定的实例类型支持最大 12.5Gbps 的贷款,单个流的带宽上限也将是 12.5Gbps。

  • 在网络拥塞时段,运行时间较长的进程会减少尾部延迟。

  • 网络响应时间分配更流畅、更标准时,进程可以从中受益。

ENA Express 的工作原理

ENA Express 由 Amazon 可扩展的可靠数据报(SRD)技术提供支持。该技术通过不同的 Amazon 网络路径为每个网络流分配数据包,并在检测到拥塞迹象时动态调整分配。它还能管理接收端的数据包重新排序。

为确保 ENA Express 能够按预期方式管理网络流量,实例的发送和接收以及实例之间的通信必须满足以下所有要求:

  • 同时支持发送和接收实例类型。有关更多信息,请参阅 ENA Express 支持的实例类型 表。

  • 发送和接收实例都必须配置 ENA Express。如配置存在差异,则可能会遇到流量默认为标准 ENA 传输的情况。以下方案显示了可能发生的情况。

    方案:配置差异

    实例 已启用 ENA Express UDP 使用 ENA Express
    实例 1 支持 支持
    实例 2 支持 不支持

    在这种情况下,两个实例之间的 TCP 流量可以使用 ENA Express,因为两个实例均已启用该功能。但是,由于其中一个实例不将 ENA Express 用于 UDP 流量,因此这两个实例之间通过 UDP 进行的通信则使用标准 ENA 传输。

  • 发送和接收实例必须在同一子网中运行。

  • 实例之间的网络路径不得包含中间件。ENA Express 目前不支持中间件。

如果未满足任何要求,实例将使用标准 TCP/UDP 协议,但不使用 SRD 进行通信。

注意

Amazon EC2 是指实例与作为附件附加到该实例的网络接口之间的关系。ENA Express 设置适用于该附件。如果网络接口从实例中分离,则该附件将不再存在,应用于它的 ENA Express 设置将不再生效。终止实例时也是如此,即使网络接口仍然存在。

ENA Express 支持的实例类型

下表包含支持 ENA Express 的实例类型。

实例类型 架构
通用型
m6a.48xlarge x86_64
m6a.metal x86_64
m6i.8xlarge x86_64
m6i.12xlarge x86_64
m6i.16xlarge x86_64
m6i.24xlarge x86_64
m6i.32xlarge x86_64
m6i.metal x86_64
m6id.8xlarge x86_64
m6id.12xlarge x86_64
m6id.16xlarge x86_64
m6id.24xlarge x86_64
m6id.32xlarge x86_64
m6id.metal x86_64
m7i.12xlarge x86_64
m7i.16xlarge x86_64
m7i.24xlarge x86_64
m7i.48xlarge x86_64
m7i.metal-24xl x86_64
m7i.metal-48xl x86_64
计算优化
c6a.48xlarge x86_64
c6a.metal x86_64
c6i.8xlarge x86_64
c6i.12xlarge x86_64
c6i.16xlarge x86_64
c6i.24xlarge x86_64
c6i.32xlarge x86_64
c6i.metal x86_64
c6id.8xlarge x86_64
c6id.12xlarge x86_64
c6id.16xlarge x86_64
c6id.24xlarge x86_64
c6id.32xlarge x86_64
c6id.metal x86_64
c7i.12xlarge x86_64
c7i.16xlarge x86_64
c7i.24xlarge x86_64
c7i.48xlarge x86_64
c7i.metal-24xl x86_64
c7i.metal-48xl x86_64
内存优化
r6a.48xlarge x86_64
r6a.metal x86_64
r6i.8xlarge x86_64
r6i.12xlarge x86_64
r6i.16xlarge x86_64
r6i.24xlarge x86_64
r6i.32xlarge x86_64
r6i.metal x86_64
r6id.8xlarge x86_64
r6id.12xlarge x86_64
r6id.16xlarge x86_64
r6id.24xlarge x86_64
r6id.32xlarge x86_64
r6id.metal x86_64
r7i.12xlarge x86_64
r7i.16xlarge x86_64
r7i.24xlarge x86_64
r7i.48xlarge x86_64
r7i.metal-24xl x86_64
r7i.metal-48xl x86_64
x2idn.16xlarge x86_64
x2idn.24xlarge x86_64
x2idn.32xlarge x86_64
x2idn.metal x86_64
x2iedn.8xlarge x86_64
x2iedn.16xlarge x86_64
x2iedn.24xlarge x86_64
x2iedn.32xlarge x86_64
x2iedn.metal x86_64
存储优化
i4i.8xlarge x86_64
i4i.12xlarge x86_64
i4i.16xlarge x86_64
i4i.24xlarge x86_64
i4i.32xlarge x86_64
i4i.metal x86_64

列出并查看 ENA Express 设置

本节介绍如何通过 Amazon Web Services Management Console 或 Amazon CLI 列出和查看 ENA Express 信息。有关更多信息,请选择与要使用的方法匹配的选项卡。

Console

该选项卡介绍如何在 Amazon Web Services Management Console 中查找有关当前 ENA Express 设置的信息以及如何查看实例类型支持。

查看实例类型支持
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格中,选择 Instance Types(实例类型)。

  3. 选择实例类型以查看该实例的详细信息。您可以选择 Instance type(实例类型)链接以打开详情页面,也可以选择列表左侧的复选框,在页面底部的详情窗格中查看详细信息。

  4. Networking(网络)选项卡或详情页面的该部分中,ENA Express support(ENA Express 支持)显示真值或假值,以显示该实例类型是否支持此功能。

从网络接口列表中查看设置
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格中,选择 Network interfaces(网络接口)。

  3. 选择一个网络接口以查看该实例的详细信息。您可以选择 Network interface ID(网络接口 ID)链接以打开详情页面,也可以选择列表左侧的复选框,在页面底部的详情窗格中查看详细信息。

  4. Details(详细信息)选项卡或详情页面的 Network interface attachment(网络接口附件)部分中,查看 ENA ExpressENA Express UDP 的设置。

从实例中查看设置
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格中,选择 Instances (实例)

  3. 选择实例以查看该实例的详细信息。您可以选择 Instance ID(实例类型)链接以打开详情页面,也可以选择列表左侧的复选框,在页面底部的详情窗格中查看详细信息。

  4. Networking(网络)选项卡的 Network interfaces(网络接口)部分中,向右滚动查看 ENA ExpressENA Express UDP 的设置。

Amazon CLI

该选项卡介绍如何在 Amazon CLI 中查找有关当前 ENA Express 设置的信息以及如何查看实例类型支持。

描述实例类型

有关特定实例类型的实例类型设置信息,请在 Amazon CLI 中运行 describe-instance-types 命令,然后替换实例类型,如下所示:

[ec2-user ~]$ aws ec2 describe-instance-types --instance-types m6i.metal { "InstanceTypes": [ { "InstanceType": "m6i.metal", "CurrentGeneration": true, ... }, "NetworkInfo": { ... "EnaSrdSupported": true }, ... } ] }
描述网络接口

有关网络接口 ENA Express 设置的信息,请在 Amazon CLI 中运行 describe-network-interfaces 命令,如下所示:

[ec2-user ~]$ aws ec2 describe-network-interfaces { "NetworkInterfaces": [ { "Association": { ....IPs, DNS... }, "Attachment": { "AttachTime": "2022-11-17T09:04:28+00:00", "AttachmentId": "eni-attach-0ab1c23456d78e9f0", "DeleteOnTermination": true, "DeviceIndex": 0, "NetworkCardIndex": 0, "InstanceId": "i-0abcd123e456fabcd", "InstanceOwnerId": "111122223333", "Status": "attached", "EnaSrdSpecification": { "EnaSrdEnabled": true, "EnaSrdUdpSpecification": { "EnaSrdUdpEnabled": true } } }, ... "NetworkInterfaceId": "eni-0d1234e5f6a78901b", "OwnerId": "111122223333", ... } ] }
PowerShell

该选项卡介绍如何使用 PowerShell 查找有关当前 ENA Express 设置的信息以及如何查看实例类型支持。

描述实例类型

有关特定实例类型的实例类型设置信息,请使用 Tools for PowerShell 运行 Get-EC2InstanceType Cmdlet 命令,然后替换实例类型,如下所示:

PS C:\> Get-EC2InstanceType -InstanceType m6i.metal | ` Select-Object ` InstanceType, CurrentGeneration, @{Name = 'EnaSrdSupported'; Expression = { $_.NetworkInfo.EnaSrdSupported } } | ` Format-List InstanceType : m6i.metal CurrentGeneration : True EnaSrdSupported : True

如果启用了 ENA Express,则返回值为 True

描述网络接口

有关网络接口 ENA Express 设置的信息,请使用 Tools for PowerShell 运行 Get-EC2NetworkInterface Cmdlet,如下所示:

PS C:\> Get-EC2NetworkInterface -NetworkInterfaceId eni-0d1234e5f6a78901b | ` Select-Object ` Association, NetworkInterfaceId, OwnerId, @{Name = 'AttachTime'; Expression = { $_.Attachment.AttachTime } }, @{Name = 'AttachmentId'; Expression = { $_.Attachment.AttachmentId } }, @{Name = 'DeleteOnTermination'; Expression = { $_.Attachment.DeleteOnTermination } }, @{Name = 'NetworkCardIndex'; Expression = { $_.Attachment.NetworkCardIndex } }, @{Name = 'InstanceId'; Expression = { $_.Attachment.InstanceId } }, @{Name = 'InstanceOwnerId'; Expression = { $_.Attachment.InstanceOwnerId } }, @{Name = 'Status'; Expression = { $_.Attachment.Status } }, @{Name = 'EnaSrdEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdEnabled } }, @{Name = 'EnaSrdUdpEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdUdpSpecification.EnaSrdUdpEnabled } } Association : NetworkInterfaceId : eni-0d1234e5f6a78901b OwnerId : 111122223333 AttachTime : 6/11/2022 1:13:11 AM AttachmentId : eni-attach-0d1234e5f6a78901b DeleteOnTermination : True NetworkCardIndex : 0 InstanceId : i-0d1234e5f6a78901b InstanceOwnerId : 111122223333 Status : attached EnaSrdEnabled : True EnaSrdUdpEnabled : False

配置 ENA Express 设置

您可为支持的 EC2 实例类型配置 ENA Express,而无需安装任何其他软件。本节介绍如何从 Amazon Web Services Management Console 或 Amazon CLI 中配置 ENA Express。有关更多信息,请选择与要使用的方法匹配的选项卡。

Console

此选项卡介绍如何管理附加到实例的网络接口的 ENA Express 设置。

从网络接口列表中管理 ENA Express
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格中,选择 Network interfaces(网络接口)。

  3. 选择附加到实例的网络接口。您可以选择 Network interface ID(网络接口 ID)链接以打开详情页面,也可以选择列表左侧的复选框。

  4. 从页面右上角的 Action(操作)菜单中选择 Manage ENA Express(管理 ENA Express)。这样将打开 Manage ENA Express(管理 ENA Express)对话框,显示选定的网络接口 ID 和当前设置。

    注意

    如果您选择的网络接口未附加到实例,则菜单中不会出现此操作。

  5. 要使用 ENA Express,请选择 Enable(启用)复选框。

  6. 启用 ENA Express 后,您可以配置 UDP 设置。要使用 ENA Express UDP,请选择 Enable(启用)复选框。

  7. 选择保存以保存您的设置。

从实例列表中管理 ENA Express
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格中,选择 Instances (实例)

  3. 选择想要管理的实例。您可以选择 Instance ID(实例 ID)以打开详情页面,也可以选择列表左侧的复选框。

  4. 选择要为您的实例配置的 Network interface(网络接口)。

  5. 从页面右上角的 Action(操作)菜单中选择 Manage ENA Express(管理 ENA Express)。

  6. 要为附加到实例的网络接口配置 ENA Express,请从 Network interface(网络接口)列表中进行选择。

  7. 要对选定的网络接口附件使用 ENA Express,请选择 Enable(启用)复选框。

  8. 启用 ENA Express 后,您可以配置 UDP 设置。要使用 ENA Express UDP,请选择 Enable(启用)复选框。

  9. 选择 Save(保存)以保存您的设置。

将网络接口附加到 EC2 实例时配置 ENA Express
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格中,选择 Network interfaces(网络接口)。

  3. 选择未附加到实例的网络接口 [Status(状态)为可用]。您可以选择 Network interface ID(网络接口 ID)链接以打开详情页面,也可以选择列表左侧的复选框。

  4. 选择要附加到的 Instance(实例)。

  5. 将网络接口附加到实例后要使用 ENA Express,请选择 Enable(启用)复选框。

  6. 启用 ENA Express 后,您可以配置 UDP 设置。要使用 ENA Express UDP,请选择 Enable(启用)复选框。

  7. 要将网络接口附加到实例并保存 ENA Express 设置,请选择 Attach(附加)。

Amazon CLI

此选项卡介绍如何在 Amazon CLI 中配置 ENA Express 设置。

附加网络接口时配置 ENA Express

要在将网络接口附加到实例时配置 ENA Express,请在 Amazon CLI 中运行 attach-network-interface 命令,如以下示例所示:

示例 1:将 ENA Express 用于 TCP 流量,而非 UDP 流量

在此示例中,我们将 EnaSrdEnabled 配置为 true,并允许 EnaSrdUdpEnabled 默认为 false

[ec2-user ~]$ aws ec2 attach-network-interface --network-interface-id eni-0123f4567890a1b23 --instance-id i-0f1a234b5cd67e890 --device-index 1 --ena-srd-specification 'EnaSrdEnabled=true' { "AttachmentId": "eni-attach-012c3d45e678f9012" }

示例 2:将 ENA Express 用于 TCP 流量和 UDP 流量

在此示例中,我们将 EnaSrdEnabledEnaSrdUdpEnabled 均配置为 true

[ec2-user ~]$ aws ec2 attach-network-interface --network-interface-id eni-0123f4567890a1b23 --instance-id i-0f1a234b5cd67e890 --device-index 1 --ena-srd-specification 'EnaSrdEnabled=true,EnaSrdUdpSpecification={EnaSrdUdpEnabled=true}' { "AttachmentId": "eni-attach-012c3d45e678f9012" }
更新网络接口附件的 ENA Express 设置

要更新附加到实例的网络接口的 ENA Express 设置,请在 Amazon CLI 中运行 modify-network-interface-attribute 命令,如以下示例所示:

示例 1:将 ENA Express 用于 TCP 流量,而非 UDP 流量

在此示例中,我们将 EnaSrdEnabled 配置为 true,如果之前从未设置过,则允许 EnaSrdUdpEnabled 默认为 false

[ec2-user ~]$ aws ec2 modify-network-interface-attribute --network-interface-id eni-0123f4567890a1b23 --ena-srd-specification 'EnaSrdEnabled=true'

示例 2:将 ENA Express 用于 TCP 流量和 UDP 流量

在此示例中,我们将 EnaSrdEnabledEnaSrdUdpEnabled 均配置为 true

[ec2-user ~]$ aws ec2 modify-network-interface-attribute --network-interface-id eni-0123f4567890a1b23 --ena-srd-specification 'EnaSrdEnabled=true,EnaSrdUdpSpecification={EnaSrdUdpEnabled=true}'

示例 3:停止将 ENA Express 用于 UDP 流量

在此示例中,我们将 EnaSrdUdpEnabled 配置为 false

[ec2-user ~]$ aws ec2 modify-network-interface-attribute --network-interface-id eni-0123f4567890a1b23 --ena-srd-specification 'EnaSrdUdpSpecification={EnaSrdUdpEnabled=false}'
PowerShell

此选项卡介绍如何使用 PowerShell 配置 ENA Express 设置。

附加网络接口时配置 ENA Express

要配置网络接口的 ENA Express 设置,请使用 Tools for PowerShell 运行 Add-EC2NetworkInterface Cmdlet,如以下示例所示:

示例 1:将 ENA Express 用于 TCP 流量,而非 UDP 流量

在此示例中,我们将 EnaSrdEnabled 配置为 true,并允许 EnaSrdUdpEnabled 默认为 false

PS C:\> Add-EC2NetworkInterface ` -NetworkInterfaceId eni-0123f4567890a1b23 ` -InstanceId i-0f1a234b5cd67e890 ` -DeviceIndex 1 ` -EnaSrdSpecification_EnaSrdEnabled $true eni-attach-012c3d45e678f9012

示例 2:将 ENA Express 用于 TCP 流量和 UDP 流量

在此示例中,我们将 EnaSrdEnabledEnaSrdUdpEnabled 均配置为 true

PS C:\> Add-EC2NetworkInterface ` -NetworkInterfaceId eni-0123f4567890a1b23 ` -InstanceId i-0f1a234b5cd67e890 ` -DeviceIndex 1 ` -EnaSrdSpecification_EnaSrdEnabled $true ` -EnaSrdUdpSpecification_EnaSrdUdpEnabled $true eni-attach-012c3d45e678f9012
更新网络接口附件的 ENA Express 设置

要更新附加到实例的网络接口的 ENA Express 设置,请在 Tools for PowerShell 中运行 Add-EC2NetworkInterface Cmdlet 命令,如以下示例所示:

示例 1:将 ENA Express 用于 TCP 流量,而非 UDP 流量

在此示例中,我们将 EnaSrdEnabled 配置为 true,如果之前从未设置过,则允许 EnaSrdUdpEnabled 默认为 false

PS C:\> Edit-EC2NetworkInterfaceAttribute ` -NetworkInterfaceId eni-0123f4567890a1b23 ` -EnaSrdSpecification_EnaSrdEnabled $true ; Get-EC2NetworkInterface -NetworkInterfaceId eni-0123f4567890a1b23 | ` Select-Object ` NetworkInterfaceId, @{Name = 'EnaSrdEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdEnabled }}, @{Name = 'EnaSrdUdpEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdUdpSpecification.EnaSrdUdpEnabled }} | ` Format-List NetworkInterfaceId : eni-0123f4567890a1b23 EnaSrdEnabled : True EnaSrdUdpEnabled : False

示例 2:将 ENA Express 用于 TCP 流量和 UDP 流量

在此示例中,我们将 EnaSrdEnabledEnaSrdUdpEnabled 均配置为 true

PS C:\> Edit-EC2NetworkInterfaceAttribute ` -NetworkInterfaceId eni-0123f4567890a1b23 ` -EnaSrdSpecification_EnaSrdEnabled $true ` -EnaSrdSpecification_EnaSrdUdpSpecification_EnaSrdUdpEnabled $true ; Get-EC2NetworkInterface -NetworkInterfaceId eni-0123f4567890a1b23 | ` Select-Object ` NetworkInterfaceId, @{Name = 'EnaSrdEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdEnabled }}, @{Name = 'EnaSrdUdpEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdUdpSpecification.EnaSrdUdpEnabled }} | ` Format-List NetworkInterfaceId : eni-0123f4567890a1b23 EnaSrdEnabled : True EnaSrdUdpEnabled : True

示例 3:停止将 ENA Express 用于 UDP 流量

在此示例中,我们将 EnaSrdUdpEnabled 配置为 false

PS C:\> Edit-EC2NetworkInterfaceAttribute ` -NetworkInterfaceId eni-0123f4567890a1b23 ` -EnaSrdSpecification_EnaSrdUdpSpecification_EnaSrdUdpEnabled $false ; Get-EC2NetworkInterface -NetworkInterfaceId eni-0123f4567890a1b23 | ` Select-Object ` NetworkInterfaceId, @{Name = 'EnaSrdEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdEnabled }}, @{Name = 'EnaSrdUdpEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdUdpSpecification.EnaSrdUdpEnabled }} | ` Format-List NetworkInterfaceId : eni-0123f4567890a1b23 EnaSrdEnabled : True EnaSrdUdpEnabled : False

启动 EC2 实例时配置 ENA Express

当您从 Amazon Web Services Management Console 中启动实例时,您可以使用以下方法之一为 AMI 配置 ENA Express。

  • 当您使用启动实例向导启动实例时,可以为您的 AMI 配置 ENA Express。有关配置的详细信息,请参阅启动实例向导的 Network settings (网络设置) 中的高级网络配置

  • 当您使用启动模板时,可以为您的 AMI 配置 ENA Express。有关启动模板配置的更多信息,请参阅启动模板的 Network settings (网络设置) 中的高级网络配置