Improve network performance with ENA Express on Windows instances - Amazon Elastic Compute Cloud
Services or capabilities described in Amazon Web Services documentation might vary by Region. To see the differences applicable to the China Regions, see Getting Started with Amazon Web Services in China (PDF).

Improve network performance with ENA Express on Windows instances

ENA Express is powered by Amazon Scalable Reliable Datagram (SRD) technology. SRD is a high performance network transport protocol that uses dynamic routing to increase throughput and minimize tail latency. With ENA Express, you can communicate between two EC2 instances in the same subnet.

Benefits of ENA Express
  • Increases the maximum bandwidth a single flow can use from 5 Gbps to 25 Gbps within the subnet, up to the aggregate instance limit.

  • Reduces tail latency of network traffic between EC2 instances, especially during periods of high network load.

  • Detects and avoids congested network paths.

  • Handles some tasks directly in the network layer, such as packet reordering on the receiving end, and most retransmits that are needed. This frees up the application layer for other work.

Note

If your application sends or receives a high volume of packets per second, and needs to optimize for latency most of the time, especially during periods when there is no congestion on the network, Enhanced networking might be a better fit for your network.

During periods of time when network traffic is light, you might notice a slight increase in packet latency (tens of microseconds) when the packet uses ENA Express. During those times, applications that prioritize specific network performance characteristics can benefit from ENA Express as follows:

  • Processes can benefit from increased maximum single flow bandwidth from 5 Gbps to 25 Gbps within the same subnet, up to the aggregate instance limit. For example, if a specific instance type supports up to 12.5 Gbps, the single flow bandwidth is also limited to 12.5 Gbps.

  • Longer running processes should experience reduced tail latency during periods of network congestion.

  • Processes can benefit from a smoother and more standard distribution for network response times.

How ENA Express works

ENA Express is powered by Amazon Scalable Reliable Datagram (SRD) technology. It distributes packets for each network flow across different Amazon network paths, and dynamically adjusts distribution when it detects signs of congestion. It also manages packet reordering on the receiving end.

To ensure that ENA Express can manage network traffic as intended, sending and receiving instances and the communication between them must meet all of the following requirements:

  • Both sending and receiving instance types are supported. See the Supported instance types for ENA Express table for more information.

  • Both sending and receiving instances must have ENA Express configured. If there are differences in the configuration, you can run into situations where traffic defaults to standard ENA transmission. The following scenario shows what can happen.

    Scenario: Differences in configuration

    Instance ENA Express Enabled UDP uses ENA Express
    Instance 1 Yes Yes
    Instance 2 Yes No

    In this case, TCP traffic between the two instances can use ENA Express, as both instances have enabled it. However, since one of the instances does not use ENA Express for UDP traffic, communication between these two instances over UDP uses standard ENA transmission.

  • The sending and receiving instances must run in the same subnet.

  • The network path between the instances must not include middleware boxes. ENA Express doesn't currently support middleware boxes.

If any requirement is unmet, the instances use the standard TCP/UDP protocol but without SRD to communicate.

Note

Amazon EC2 refers to the relationship between an instance and a network interface that's attached to it as an attachment. ENA Express settings apply to the attachment. If the network interface is detached from the instance, the attachment no longer exists, and the ENA Express settings that applied to it are no longer in force. The same is true when an instance is terminated, even if the network interface remains.

Supported instance types for ENA Express

The following tabs show instance types that support ENA Express.

General purpose
Instance type Architecture
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
Compute optimized
Instance type Architecture
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
Memory optimized
Instance type Architecture
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
Accelerated computing
Instance type Architecture
g6.48xlarge x86_64
Storage optimized
Instance type Architecture
i4i.8xlarge x86_64
i4i.12xlarge x86_64
i4i.16xlarge x86_64
i4i.24xlarge x86_64
i4i.32xlarge x86_64
i4i.metal x86_64

List and view ENA Express settings

This section covers how to list and view ENA Express information from the Amazon Web Services Management Console or from the Amazon CLI. For more information, choose the tab that matches the method you'll use.

Console

This tab covers how to find information about your current ENA Express settings and to view instance type support in the Amazon Web Services Management Console.

View instance type support
  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

  2. In the left navigation pane, choose Instance types.

  3. Select an instance type to see the details for that instance. You can choose the Instance type link to open the detail page, or you can select the checkbox on the left side of the list to view details in the detail pane at the bottom of the page.

  4. In the Networking tab or that section on the detail page, ENA Express support shows a true or false value to indicate if the instance type supports this feature.

View settings from the Network interface list
  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

  2. In the left navigation pane, choose Network interfaces.

  3. Select a network interface to see the details for that instance. You can choose the Network interface ID link to open the detail page, or you can select the checkbox on the left side of the list to view details in the detail pane at the bottom of the page.

  4. In the Network interface attachment section on the the Details tab or detail page, review settings for ENA Express and ENA Express UDP.

View settings from instances
  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

  2. In the left navigation pane, choose Instances.

  3. Select an instance to see the details for that instance. You can choose the Instance ID link to open the detail page, or you can select the checkbox on the left side of the list to view details in the detail pane at the bottom of the page.

  4. In the Network interfaces section on the Networking tab, scroll right to review settings for ENA Express and ENA Express UDP.

Amazon CLI

This tab covers how to find information about your current ENA Express settings and to view instance type support in the Amazon CLI.

Describe instance types

For information on instance type settings for a specific instance type, run the describe-instance-types command in the Amazon CLI, and substitute the instance type as follows:

[ec2-user ~]$ aws ec2 describe-instance-types --instance-types m6i.metal { "InstanceTypes": [ { "InstanceType": "m6i.metal", "CurrentGeneration": true, ... }, "NetworkInfo": { ... "EnaSrdSupported": true }, ... } ] }
Describe network interfaces

For information on ENA Express settings for a networking interface, run the describe-network-interfaces command in the Amazon CLI as follows:

[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

This tab covers how to find information about your current ENA Express settings and to view instance type support using PowerShell.

Describe instance types

For information on instance type settings for a specific instance type, run the Get-EC2InstanceType Cmdlet with the Tools for PowerShell, and substitute the instance type as follows:

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

If ENA Express is enabled, a value of True is returned.

Describe network interfaces

For information on ENA Express settings for a networking interface, run the Get-EC2NetworkInterface Cmdlet with the Tools for PowerShell as follows:

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

Configure ENA Express settings

You can configure ENA Express for supported EC2 instance types without needing to install any additional software. This section covers how to configure ENA Express from the Amazon Web Services Management Console or from the Amazon CLI. For more information, choose the tab that matches the method you'll use.

Console

This tab covers how to manage ENA Express settings for network interfaces that are attached to an instance.

Manage ENA Express from the Network interface list
  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

  2. In the left navigation pane, choose Network interfaces.

  3. Select a network interface that is attached to an instance. You can choose the Network interface ID link to open the detail page, or you can select the checkbox on the left side of the list.

  4. Choose Manage ENA Express from the Action menu at the top right side of the page. This opens the Manage ENA Express dialog, with the selected network interface ID and current settings displayed.

    Note

    If the network interface you selected is not attached to an instance, this action does not appear in the menu.

  5. To use ENA Express, select the Enable check box.

  6. When ENA Express is enabled, you can configure UDP settings. To use ENA Express UDP, select the Enable check box.

  7. To save your settings, choose Save.

Manage ENA Express from the Instance list
  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

  2. In the left navigation pane, choose Instances.

  3. Select the instance that you want to manage. You can choose the Instance ID to open the detail page, or you can select the checkbox on the left side of the list.

  4. Select the Network interface to configure for your instance.

  5. Choose Manage ENA Express from the Action menu at the top right side of the page.

  6. To configure ENA Express for a network interface that's attached to your instance, select it from the Network interface list.

  7. To use ENA Express for the selected network interface attachment, select the Enable check box.

  8. When ENA Express is enabled, you can configure UDP settings. To use ENA Express UDP, select the Enable check box.

  9. To save your settings, choose Save.

Configure ENA Express when you attach a network interface to an EC2 instance
  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

  2. In the left navigation pane, choose Network interfaces.

  3. Select a network interface that is not attached to an instance (Status is Available). You can choose the Network interface ID link to open the detail page, or you can select the checkbox on the left side of the list.

  4. Select the Instance that you'll attach to.

  5. To use ENA Express after you attach the network interface to the instance, select the Enable check box.

  6. When ENA Express is enabled, you can configure UDP settings. To use ENA Express UDP, select the Enable check box.

  7. To attach the network interface to the instance and save your ENA Express settings, choose Attach.

Amazon CLI

This tab covers how to configure ENA Express settings in the Amazon CLI.

Configure ENA Express when you attach a network interface

To configure ENA Express when you attach a network interface to an instance, run the attach-network-interface command in the Amazon CLI, as shown in the following examples:

Example 1: Use ENA Express for TCP traffic, but not for UDP traffic

In this example, we configure EnaSrdEnabled as true, and we allow EnaSrdUdpEnabled to default to 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" }

Example 2: Use ENA Express for both TCP traffic and UDP traffic

In this example, we configure both EnaSrdEnabled and EnaSrdUdpEnabled as 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" }
Update ENA Express settings for your network interface attachment

To update ENA Express settings for a network interface that's attached to an instance, run the modify-network-interface-attribute command in the Amazon CLI, as shown in the following examples:

Example 1: Use ENA Express for TCP traffic, but not for UDP traffic

In this example, we configure EnaSrdEnabled as true, and we allow EnaSrdUdpEnabled to default to false if it has never been set previously.

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

Example 2: Use ENA Express for both TCP traffic and UDP traffic

In this example, we configure both EnaSrdEnabled and EnaSrdUdpEnabled as true.

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

Example 3: Stop using ENA Express for UDP traffic

In this example, we configure EnaSrdUdpEnabled as false.

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

This tab covers how to configure ENA Express settings using PowerShell.

Configure ENA Express when you attach a network interface

To configure ENA Express settings for a networking interface, run the Add-EC2NetworkInterface Cmdlet with the Tools for PowerShell as shown in the following examples:

Example 1: Use ENA Express for TCP traffic, but not for UDP traffic

In this example, we configure EnaSrdEnabled as true, and we allow EnaSrdUdpEnabled to default to false.

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

Example 2: Use ENA Express for both TCP traffic and UDP traffic

In this example, we configure both EnaSrdEnabled and EnaSrdUdpEnabled as true.

PS C:\> Add-EC2NetworkInterface ` -NetworkInterfaceId eni-0123f4567890a1b23 ` -InstanceId i-0f1a234b5cd67e890 ` -DeviceIndex 1 ` -EnaSrdSpecification_EnaSrdEnabled $true ` -EnaSrdUdpSpecification_EnaSrdUdpEnabled $true eni-attach-012c3d45e678f9012
Update ENA Express settings for your network interface attachment

To update ENA Express settings for a network interface that's attached to an instance, run the Add-EC2NetworkInterface Cmdlet command in the Tools for PowerShell, as shown in the following examples:

Example 1: Use ENA Express for TCP traffic, but not for UDP traffic

In this example, we configure EnaSrdEnabled as true, and we allow EnaSrdUdpEnabled to default to false if it has never been set previously.

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

Example 2: Use ENA Express for both TCP traffic and UDP traffic

In this example, we configure both EnaSrdEnabled and EnaSrdUdpEnabled as 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

Example 3: Stop using ENA Express for UDP traffic

In this example, we configure EnaSrdUdpEnabled as 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

Configure ENA Express when you launch an EC2 instance

You can use one of the following methods to configure ENA Express for an AMI when you launch an instance from the Amazon Web Services Management Console.

  • You can configure ENA Express for your AMI when you launch an instance with the launch instance wizard. For configuration details, see Advanced network configuration in the Network settings for the launch instance wizard.

  • You can configure ENA Express for your AMI when you use a launch template. For more information about launch template configuration, see Advanced network configuration in the Network settings for launch templates.