Improve network performance with ENA Express on Linux instances
ENA Express is powered by AWS 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.
-
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.
-
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.
Prerequisites
To ensure that ENA Express can operate effectively, update the following settings for your instance.
-
If your instance uses jumbo frames, run the following command to set your maximum transmission unit (MTU) to
8900
.[ec2-user ~]$
sudo ip link set dev
eth0
mtu8900
-
Increase the receiver (Rx) ring size, as follows:
[ec2-user ~]$
ethtool -G
device
rx 8192
How ENA Express works
SRD technology uses a packet spraying mechanism to distribute load and avoid network congestion. It distributes packets for each network flow across different AWS 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.
-
To utilize full bandwidth potential, use driver version 2.2.9 or higher.
-
To produce metrics, use driver version 2.8 or higher.
If any requirement is unmet, the instances use the standard TCP/UDP protocol but without SRD to communicate.
To ensure that your instance network driver is configured for optimum performance,
review the recommended best practices for ENA drivers. These best practices apply to ENA Express,
as well. For more information, see the ENA
Linux Driver Best Practices and Performance Optimization Guide
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 table contains instance types that support ENA Express.
Instance type | Architecture |
---|---|
General purpose | |
m6i.32xlarge |
x86_64 |
m6i.metal |
x86_64 |
m6id.32xlarge |
x86_64 |
m6id.metal |
x86_64 |
Compute optimized | |
c6gn.16xlarge |
arm64 |
c6i.32xlarge |
x86_64 |
c6i.metal |
x86_64 |
c6id.32xlarge |
x86_64 |
c6id.metal |
x86_64 |
Memory optimized | |
r6i.32xlarge |
x86_64 |
r6i.metal |
x86_64 |
r6id.32xlarge |
x86_64 |
r6id.metal |
x86_64 |
Storage optimized | |
i4i.32xlarge |
x86_64 |
i4i.metal |
x86_64 |
im4gn.16xlarge |
arm64 |
List and view ENA Express settings
This section covers how to list and view ENA Express information from the AWS Management Console or from the AWS CLI. For more information, choose the tab that matches the method you'll use.
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 AWS Management Console or from the AWS CLI. For more information, choose the tab that matches the method you'll use.
Monitor ENA Express performance
After you've enabled ENA Express for the network interface attachments on both the sending instance and receiving instance, you can use ENA Express metrics to help ensure that your instances take full advantage of the performance improvements that SRD technology provides.
To see a list of metrics that are filtered for ENA Express, run the following ethtool
command for your network interface (shown here as eth0
):
[ec2-user ~]$
ethtool -S
eth0
| grep ena_srdNIC statistics: ena_srd_mode: 0 ena_srd_tx_pkts: 0 ena_srd_eligible_tx_pkts: 0 ena_srd_rx_pkts: 0 ena_srd_resource_utilization: 0
Verify ENA Express settings for an instance
To verify the current ENA Express settings for the network interface attachment on your instance,
run the ethtool
command to list ENA Express metrics, and take note of the value of the
ena_srd_mode
metric. Values are as follows:
-
0
= ENA Express off, UDP off -
1
= ENA Express on, UDP off -
2
= ENA Express off, UDP onNote
This only happens when ENA Express was originally enabled, and UDP was configured to use it. The prior value is retained for UDP traffic.
-
3
= ENA Express on, UDP on
After you've enabled ENA Express for the network interface attachment on an instance, the
sending instance initiates communication with the receiving instance, and SRD
detects if ENA Express is operating on both the sending instance and the reciving
instance. If ENA Express is operating, the communication can use SRD transmission.
If ENA Express is not operating, the communication falls back to standard ENA
transmission. To confirm if packet transmission is using SRD, you can compare the
number of eligible packets (ena_srd_eligible_tx_pkts
metric) to the
number of SRD packets transmitted (ena_srd_tx_pkts
metric) during a
given time period.
You can monitor your SRD resource utlization using the the
ena_srd_resource_utilization
metric. If your instance is close to
exhausting its SRD resources, you'll know it's time to scale out the
instance.
For more information about ENA Express metrics, see Metrics for ENA Express.