

# ENA Express로 EC2 인스턴스 간 네트워크 성능 향상
<a name="ena-express"></a>

ENA Express는 AWS Scalable Reliable Datagram(SRD) 기술로 구동됩니다. SRD는 동적 라우팅을 사용하여 스루풋을 늘리고 테일 지연 시간을 최소화하는 고성능 네트워크 전송 프로토콜입니다. ENA Express를 사용하면 동일한 가용 영역 또는 동일 리전에 있는 여러 가용 영역 내에 있는 두 EC2 인스턴스 간에 통신할 수 있습니다.

**ENA Express의 이점**
+ 동일 리전 내에서 단일 흐름에 사용할 수 있는 최대 대역폭을 5Gbps에서 최고 25Gbps로 집계 인스턴스 제한까지 늘립니다.
+ 특히 네트워크 부하가 높은 기간 동안, 같은 가용 영역 내의 EC2 인스턴스 간 네트워크 트래픽의 테일 지연 시간을 줄입니다.
+ 혼잡한 네트워크 경로를 감지하고 피합니다.
+ 수신 측의 패킷 재정렬 작업이나 필요한 대부분의 재전송 작업과 같은 일부 작업을 네트워크 계층에서 직접 처리합니다. 따라서 애플리케이션 계층을 다른 작업에 사용할 수 있습니다.

**참고**  
애플리케이션의 초당 패킷 요구 사항이 높고 정체되지 않은 기간 동안 지연 시간을 최적화해야 하는 경우에는 [향상된 네트워킹](enhanced-networking.md)이 더 적합할 수 있습니다.
ENA Express 트래픽은 로컬 영역으로 전송할 수 없습니다.
남아메리카(상파울루), 중동(바레인) 및 중동(UAE)에서는 가용 영역 간 트래픽에 대한 ENA Express 지원을 사용할 수 없습니다.

인스턴스에서 네트워크 인터페이스 연결에 대해 ENA Express를 활성화하면, 전송 인스턴스가 수신 인스턴스와의 통신을 시작하고 SRD는 ENA Express가 전송 인스턴스와 수신 인스턴스 모두에서 작동하는지 감지합니다. ENA Express가 작동 중인 경우 통신에 SRD 전송이 사용될 수 있습니다. ENA Express가 작동하지 않는 경우 통신이 표준 ENA 전송으로 폴백됩니다.

네트워크 트래픽이 적은 시간 동안 패킷이 ENA Express를 사용하면 중앙값 패킷 지연 시간(수십 마이크로초)이 약간 증가할 수 있습니다. 이 시간 동안 특정 네트워크 성능 특성을 우선시하는 애플리케이션은 ENA Express를 통해 다음과 같은 이점을 얻을 수 있습니다.
+ 프로세스는 동일한 리전 내에서 5Gbps에서 25Gbps(집계 인스턴스 제한)로 늘어난 최대 단일 흐름 대역폭의 이점을 누릴 수 있습니다. 예를 들어, 특정 인스턴스 유형이 최대 12.5Gbps를 지원하는 경우 단일 흐름 대역폭도 12.5Gbps로 제한됩니다.
+ 동일한 가용 영역 내에서 더 오래 실행되는 프로세스의 경우 네트워크 정체 기간 동안 테일 지연 시간이 감소해야 합니다.
+ 네트워크 응답 시간에 대해 보다 원활하고 표준적인 배포에 따른 이점이 있습니다.

**Topics**
+ [ENA Express의 작동 방식](#ena-express-how-it-works)
+ [ENA Express를 지원하는 인스턴스 유형](#ena-express-supported-instance-types)
+ [Linux 인스턴스의 ENA Express 설정에 대한 성능 튜닝](#ena-express-tune)
+ [EC2 인스턴스의 ENA Express 설정 검토](ena-express-list-view.md)
+ [EC2 인스턴스의 ENA Express 설정 구성](ena-express-configure.md)

## ENA Express의 작동 방식
<a name="ena-express-how-it-works"></a>

ENA Express는 AWS Scalable Reliable Datagram(SRD) 기술로 구동됩니다. 각 네트워크 흐름의 패킷을 서로 다른 AWS 네트워크 경로에 분산하고, 혼잡 징후가 감지되면 분포를 동적으로 조정합니다. 또한 수신 측에서 패킷 재정렬을 관리합니다.

ENA Express가 의도한 대로 네트워크 트래픽을 관리하려면, 전송 및 수신 인스턴스와 해당 인스턴스 간 통신이 다음 요구 사항을 모두 충족해야 합니다.
+ 전송 인스턴스 유형과 수신 인스턴스 유형이 모두 지원되어야 합니다. 자세한 내용은 [ENA Express를 지원하는 인스턴스 유형](#ena-express-supported-instance-types) 표를 참조하세요.
+ 전송 인스턴스와 수신 인스턴스 모두에 ENA Express가 구성되어 있어야 합니다. 구성에 차이가 있는 경우, 트래픽이 표준 ENA 전송으로 기본 설정되는 상황이 발생할 수 있습니다. 다음 시나리오는 이 경우에 어떤 일이 발생하는지 보여줍니다.

  **시나리오: 구성의 차이**    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ena-express.html)

  이 경우 두 인스턴스 모두에 ENA Express가 활성화되어 있으므로 두 인스턴스 간의 TCP 트래픽에 ENA Express를 사용할 수 있습니다. 하지만 인스턴스 중 하나는 UDP 트래픽에 ENA Express를 사용하지 않으므로, UDP를 통한 이 두 인스턴스 간의 통신에는 표준 ENA 전송이 사용됩니다.
+ 전송 인스턴스와 수신 인스턴스가 동일 리전에서 실행되어야 합니다.
+ 인스턴스 간 네트워크 경로에 미들웨어 박스가 포함되지 않아야 합니다. ENA Express는 현재 미들웨어 박스를 지원하지 않습니다.
+ (Linux 인스턴스만 해당) 대역폭의 잠재력을 최대한 활용하려면 드라이버 버전 2.2.9 이상을 사용하세요.
+ (Linux 인스턴스만 해당) 지표를 생성하려면 드라이버 버전 2.8 이상을 사용합니다.

요구 사항이 하나라도 충족되지 않을 경우, 인스턴스는 표준 TCP/UDP 프로토콜을 사용하지만 SRD 없이 통신합니다.

인스턴스 네트워크 드라이버가 최적의 성능을 발휘하도록 구성되었는지 확인하려면, ENA 드라이버에 대한 권장 모범 사례를 검토하세요. 이러한 모범 사례는 ENA Express에도 적용됩니다. 자세한 내용은 GitHub 웹 사이트에서 [ENA Linux Driver Best Practices and Performance Optimization Guide](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/ENA_Linux_Best_Practices.rst)(ENA Linux 드라이버 모범 사례 및 성능 최적화 가이드)를 참조하세요.

**참고**  
Amazon EC2는 인스턴스와 연결(attachment)**로서 해당 인스턴스에 연결된 네트워크 인터페이스 간의 관계를 참조합니다. ENA Express 설정이 이 연결에 적용됩니다. 네트워크 인터페이스가 인스턴스에서 분리되면, 이 연결은 더 이상 존재하지 않으며 해당 연결에 적용된 ENA Express 설정도 더 이상 적용되지 않습니다. 네트워크 인터페이스가 남아 있을 수 있지만, 인스턴스가 종료될 때도 마찬가지입니다.

전송 인스턴스와 수신 인스턴스 모두에서 네트워크 인터페이스 연결에 대해 ENA Express를 활성화한 후에는 ENA Express 지표를 사용하여 인스턴스에서 SRD 기술이 제공하는 성능 개선의 이점을 최대한 활용할 수 있습니다. ENA Express 지표에 대한 자세한 내용은 [ENA Express의 지표](monitoring-network-performance-ena.md#network-performance-metrics-ena-express) 섹션을 참조하세요.

## ENA Express를 지원하는 인스턴스 유형
<a name="ena-express-supported-instance-types"></a>

다음 인스턴스 유형은 ENA Express를 지원합니다.

------
#### [ General purpose ]


| 인스턴스 유형 | 아키텍처 | 
| --- | --- | 
| m6a.12xlarge | x86\_64 | 
| m6a.16xlarge | x86\_64 | 
| m6a.24xlarge | x86\_64 | 
| m6a.32xlarge | x86\_64 | 
| 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 | 
| m6idn.8xlarge | x86\_64 | 
| m6idn.12xlarge | x86\_64 | 
| m6idn.16xlarge | x86\_64 | 
| m6idn.24xlarge | x86\_64 | 
| m6idn.32xlarge | x86\_64 | 
| m6idn.metal | x86\_64 | 
| m6in.8xlarge | x86\_64 | 
| m6in.12xlarge | x86\_64 | 
| m6in.16xlarge | x86\_64 | 
| m6in.24xlarge | x86\_64 | 
| m6in.32xlarge | x86\_64 | 
| m6in.metal | x86\_64 | 
| m7a.12xlarge | x86\_64 | 
| m7a.16xlarge | x86\_64 | 
| m7a.24xlarge | x86\_64 | 
| m7a.32xlarge | x86\_64 | 
| m7a.48xlarge | x86\_64 | 
| m7a.metal-48xl | x86\_64 | 
| m7g.12xlarge | arm64 | 
| m7g.16xlarge | arm64 | 
| m7g.metal | arm64 | 
| m7gd.12xlarge | arm64 | 
| m7gd.16xlarge | arm64 | 
| m7gd.metal | arm64 | 
| 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 | 
| m8a.16xlarge | x86\_64 | 
| m8a.24xlarge | x86\_64 | 
| m8a.48xlarge | x86\_64 | 
| m8a.metal-24xl | x86\_64 | 
| m8a.metal-48xl | x86\_64 | 
| m8azn.12xlarge | x86\_64 | 
| m8azn.24xlarge | x86\_64 | 
| m8azn.metal-12xl | x86\_64 | 
| m8azn.metal-24xl | x86\_64 | 
| m8g.12xlarge | arm64 | 
| m8g.16xlarge | arm64 | 
| m8g.24xlarge | arm64 | 
| m8g.48xlarge | arm64 | 
| m8g.metal-24xl | arm64 | 
| m8g.metal-48xl | arm64 | 
| m8gb.8xlarge | arm64 | 
| m8gb.12xlarge | arm64 | 
| m8gb.16xlarge | arm64 | 
| m8gb.24xlarge | arm64 | 
| m8gb.48xlarge | arm64 | 
| m8gb.metal-24xl | arm64 | 
| m8gb.metal-48xl | arm64 | 
| m8gd.12xlarge | arm64 | 
| m8gd.16xlarge | arm64 | 
| m8gd.24xlarge | arm64 | 
| m8gd.48xlarge | arm64 | 
| m8gd.metal-24xl | arm64 | 
| m8gd.metal-48xl | arm64 | 
| m8gn.8xlarge | arm64 | 
| m8gn.12xlarge | arm64 | 
| m8gn.16xlarge | arm64 | 
| m8gn.24xlarge | arm64 | 
| m8gn.48xlarge | arm64 | 
| m8gn.metal-24xl | arm64 | 
| m8gn.metal-48xl | arm64 | 
| m8i.24xlarge | x86\_64 | 
| m8i.32xlarge | x86\_64 | 
| m8i.48xlarge | x86\_64 | 
| m8i.96xlarge | x86\_64 | 
| m8i.metal-48xl | x86\_64 | 
| m8i.metal-96xl | x86\_64 | 
| m8id.24xlarge | x86\_64 | 
| m8id.32xlarge | x86\_64 | 
| m8id.48xlarge | x86\_64 | 
| m8id.96xlarge | x86\_64 | 
| m8id.metal-48xl | x86\_64 | 
| m8id.metal-96xl | x86\_64 | 
| m8in.12xlarge | x86\_64 | 
| m8in.16xlarge | x86\_64 | 
| m8in.24xlarge | x86\_64 | 
| m8in.32xlarge | x86\_64 | 
| m8in.48xlarge | x86\_64 | 
| m8in.96xlarge | x86\_64 | 
| m8idn.12xlarge | x86\_64 | 
| m8idn.16xlarge | x86\_64 | 
| m8idn.24xlarge | x86\_64 | 
| m8idn.32xlarge | x86\_64 | 
| m8idn.48xlarge | x86\_64 | 
| m8idn.96xlarge | x86\_64 | 
| m8ib.12xlarge | x86\_64 | 
| m8ib.16xlarge | x86\_64 | 
| m8ib.24xlarge | x86\_64 | 
| m8ib.32xlarge | x86\_64 | 
| m8ib.48xlarge | x86\_64 | 
| m8ib.96xlarge | x86\_64 | 
| m8idb.12xlarge | x86\_64 | 
| m8idb.16xlarge | x86\_64 | 
| m8idb.24xlarge | x86\_64 | 
| m8idb.32xlarge | x86\_64 | 
| m8idb.48xlarge | x86\_64 | 
| m8idb.96xlarge | x86\_64 | 

------
#### [ Compute optimized ]


| 인스턴스 유형 | 아키텍처 | 
| --- | --- | 
| c6a.12xlarge | x86\_64 | 
| c6a.16xlarge | x86\_64 | 
| c6a.24xlarge | x86\_64 | 
| c6a.32xlarge | x86\_64 | 
| c6a.48xlarge | x86\_64 | 
| c6a.metal | x86\_64 | 
| c6gn.4xlarge | arm64 | 
| c6gn.8xlarge | arm64 | 
| c6gn.12xlarge | arm64 | 
| c6gn.16xlarge | arm64 | 
| 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 | 
| c6in.8xlarge | x86\_64 | 
| c6in.12xlarge | x86\_64 | 
| c6in.16xlarge | x86\_64 | 
| c6in.24xlarge | x86\_64 | 
| c6in.32xlarge | x86\_64 | 
| c6in.metal | x86\_64 | 
| c7a.12xlarge | x86\_64 | 
| c7a.16xlarge | x86\_64 | 
| c7a.24xlarge | x86\_64 | 
| c7a.32xlarge | x86\_64 | 
| c7a.48xlarge | x86\_64 | 
| c7a.metal-48xl | x86\_64 | 
| c7g.12xlarge | arm64 | 
| c7g.16xlarge | arm64 | 
| c7g.metal | arm64 | 
| c7gd.12xlarge | arm64 | 
| c7gd.16xlarge | arm64 | 
| c7gd.metal | arm64 | 
| c7gn.4xlarge | arm64 | 
| c7gn.8xlarge | arm64 | 
| c7gn.12xlarge | arm64 | 
| c7gn.16xlarge | arm64 | 
| c7gn.metal | arm64 | 
| 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 | 
| c8a.16xlarge | x86\_64 | 
| c8a.24xlarge | x86\_64 | 
| c8a.48xlarge | x86\_64 | 
| c8a.metal-24xl | x86\_64 | 
| c8a.metal-48xl | x86\_64 | 
| c8g.12xlarge | arm64 | 
| c8g.16xlarge | arm64 | 
| c8g.24xlarge | arm64 | 
| c8g.48xlarge | arm64 | 
| c8g.metal-24xl | arm64 | 
| c8g.metal-48xl | arm64 | 
| c8gb.8xlarge | arm64 | 
| c8gb.12xlarge | arm64 | 
| c8gb.16xlarge | arm64 | 
| c8gb.24xlarge | arm64 | 
| c8gb.48xlarge | arm64 | 
| c8gb.metal-24xl | arm64 | 
| c8gb.metal-48xl | arm64 | 
| c8gd.12xlarge | arm64 | 
| c8gd.16xlarge | arm64 | 
| c8gd.24xlarge | arm64 | 
| c8gd.48xlarge | arm64 | 
| c8gd.metal-24xl | arm64 | 
| c8gd.metal-48xl | arm64 | 
| c8gn.8xlarge | arm64 | 
| c8gn.12xlarge | arm64 | 
| c8gn.16xlarge | arm64 | 
| c8gn.24xlarge | arm64 | 
| c8gn.48xlarge | arm64 | 
| c8gn.metal-24xl | arm64 | 
| c8gn.metal-48xl | arm64 | 
| c8i.24xlarge | x86\_64 | 
| c8i.32xlarge | x86\_64 | 
| c8i.48xlarge | x86\_64 | 
| c8i.96xlarge | x86\_64 | 
| c8i.metal-48xl | x86\_64 | 
| c8i.metal-96xl | x86\_64 | 
| c8id.24xlarge | x86\_64 | 
| c8id.32xlarge | x86\_64 | 
| c8id.48xlarge | x86\_64 | 
| c8id.96xlarge | x86\_64 | 
| c8id.metal-48xl | x86\_64 | 
| c8id.metal-96xl | x86\_64 | 
| c8in.12xlarge | x86\_64 | 
| c8in.16xlarge | x86\_64 | 
| c8in.24xlarge | x86\_64 | 
| c8in.32xlarge | x86\_64 | 
| c8in.48xlarge | x86\_64 | 
| c8in.96xlarge | x86\_64 | 
| c8in.metal-48xl | x86\_64 | 
| c8in.metal-96xl | x86\_64 | 
| c8ib.12xlarge | x86\_64 | 
| c8ib.16xlarge | x86\_64 | 
| c8ib.24xlarge | x86\_64 | 
| c8ib.32xlarge | x86\_64 | 
| c8ib.48xlarge | x86\_64 | 
| c8ib.96xlarge | x86\_64 | 
| c8ib.metal-48xl | x86\_64 | 
| c8ib.metal-96xl | x86\_64 | 

------
#### [ Memory optimized ]


| 인스턴스 유형 | 아키텍처 | 
| --- | --- | 
| r6a.12xlarge | x86\_64 | 
| r6a.16xlarge | x86\_64 | 
| r6a.24xlarge | x86\_64 | 
| r6a.32xlarge | 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 | 
| r6idn.8xlarge | x86\_64 | 
| r6idn.12xlarge | x86\_64 | 
| r6idn.16xlarge | x86\_64 | 
| r6idn.24xlarge | x86\_64 | 
| r6idn.32xlarge | x86\_64 | 
| r6idn.metal | x86\_64 | 
| r6in.8xlarge | x86\_64 | 
| r6in.12xlarge | x86\_64 | 
| r6in.16xlarge | x86\_64 | 
| r6in.24xlarge | x86\_64 | 
| r6in.32xlarge | x86\_64 | 
| r6in.metal | x86\_64 | 
| r7a.12xlarge | x86\_64 | 
| r7a.16xlarge | x86\_64 | 
| r7a.24xlarge | x86\_64 | 
| r7a.32xlarge | x86\_64 | 
| r7a.48xlarge | x86\_64 | 
| r7a.metal-48xl | x86\_64 | 
| r7g.12xlarge | arm64 | 
| r7g.16xlarge | arm64 | 
| r7g.metal | arm64 | 
| r7gd.12xlarge | arm64 | 
| r7gd.16xlarge | arm64 | 
| r7gd.metal | arm64 | 
| 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 | 
| r7iz.8xlarge | x86\_64 | 
| r7iz.12xlarge | x86\_64 | 
| r7iz.16xlarge | x86\_64 | 
| r7iz.32xlarge | x86\_64 | 
| r7iz.metal-16xl | x86\_64 | 
| r7iz.metal-32xl | x86\_64 | 
| r8a.16xlarge | x86\_64 | 
| r8a.24xlarge | x86\_64 | 
| r8a.48xlarge | x86\_64 | 
| r8a.metal-24xl | x86\_64 | 
| r8a.metal-48xl | x86\_64 | 
| r8g.12xlarge | arm64 | 
| r8g.16xlarge | arm64 | 
| r8g.24xlarge | arm64 | 
| r8g.48xlarge | arm64 | 
| r8g.metal-24xl | arm64 | 
| r8g.metal-48xl | arm64 | 
| r8gb.8xlarge | arm64 | 
| r8gb.12xlarge | arm64 | 
| r8gb.16xlarge | arm64 | 
| r8gb.24xlarge | arm64 | 
| r8gb.48xlarge | arm64 | 
| r8gb.metal-24xl | arm64 | 
| r8gb.metal-48xl | arm64 | 
| r8gd.12xlarge | arm64 | 
| r8gd.16xlarge | arm64 | 
| r8gd.24xlarge | arm64 | 
| r8gd.48xlarge | arm64 | 
| r8gd.metal-24xl | arm64 | 
| r8gd.metal-48xl | arm64 | 
| r8gn.8xlarge | arm64 | 
| r8gn.12xlarge | arm64 | 
| r8gn.16xlarge | arm64 | 
| r8gn.24xlarge | arm64 | 
| r8gn.48xlarge | arm64 | 
| r8gn.metal-24xl | arm64 | 
| r8gn.metal-48xl | arm64 | 
| r8i.24xlarge | x86\_64 | 
| r8i.32xlarge | x86\_64 | 
| r8i.48xlarge | x86\_64 | 
| r8i.96xlarge | x86\_64 | 
| r8i.metal-48xl | x86\_64 | 
| r8i.metal-96xl | x86\_64 | 
| r8id.24xlarge | x86\_64 | 
| r8id.32xlarge | x86\_64 | 
| r8id.48xlarge | x86\_64 | 
| r8id.96xlarge | x86\_64 | 
| r8id.metal-48xl | x86\_64 | 
| r8id.metal-96xl | x86\_64 | 
| r8in.12xlarge | x86\_64 | 
| r8in.16xlarge | x86\_64 | 
| r8in.24xlarge | x86\_64 | 
| r8in.32xlarge | x86\_64 | 
| r8in.48xlarge | x86\_64 | 
| r8in.96xlarge | x86\_64 | 
| r8idn.12xlarge | x86\_64 | 
| r8idn.16xlarge | x86\_64 | 
| r8idn.24xlarge | x86\_64 | 
| r8idn.32xlarge | x86\_64 | 
| r8idn.48xlarge | x86\_64 | 
| r8idn.96xlarge | x86\_64 | 
| r8ib.12xlarge | x86\_64 | 
| r8ib.16xlarge | x86\_64 | 
| r8ib.24xlarge | x86\_64 | 
| r8ib.32xlarge | x86\_64 | 
| r8ib.48xlarge | x86\_64 | 
| r8ib.96xlarge | x86\_64 | 
| r8idb.12xlarge | x86\_64 | 
| r8idb.16xlarge | x86\_64 | 
| r8idb.24xlarge | x86\_64 | 
| r8idb.32xlarge | x86\_64 | 
| r8idb.48xlarge | x86\_64 | 
| r8idb.96xlarge | x86\_64 | 
| u7i-6tb.112xlarge | x86\_64 | 
| u7i-8tb.112xlarge | x86\_64 | 
| u7i-12tb.224xlarge | x86\_64 | 
| u7in-16tb.224xlarge | x86\_64 | 
| u7in-24tb.224xlarge | x86\_64 | 
| u7in-32tb.224xlarge | x86\_64 | 
| u7inh-32tb.480xlarge | 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 | 
| x8g.12xlarge | arm64 | 
| x8g.16xlarge | arm64 | 
| x8g.24xlarge | arm64 | 
| x8g.48xlarge | arm64 | 
| x8g.metal-24xl | arm64 | 
| x8g.metal-48xl | arm64 | 
| x8aedz.24xlarge | x86\_64 | 
| x8aedz.metal-24xl | x86\_64 | 
| x8i.24xlarge | x86\_64 | 
| x8i.32xlarge | x86\_64 | 
| x8i.48xlarge | x86\_64 | 
| x8i.64xlarge | x86\_64 | 
| x8i.96xlarge | x86\_64 | 
| x8i.metal-48xl | x86\_64 | 
| x8i.metal-96xl | x86\_64 | 

------
#### [ Accelerated computing ]


| 인스턴스 유형 | 아키텍처 | 
| --- | --- | 
| g6.48xlarge | x86\_64 | 
| g6e.12xlarge | x86\_64 | 
| g6e.24xlarge | x86\_64 | 
| g6e.48xlarge | x86\_64 | 
| g7e.12xlarge | x86\_64 | 
| g7e.24xlarge | x86\_64 | 
| g7e.48xlarge | x86\_64 | 
| p5.4xlarge | x86\_64 | 
| p5.48xlarge | x86\_64 | 
| p5e.48xlarge | x86\_64 | 
| p5en.48xlarge | x86\_64 | 
| p6-b200.48xlarge | x86\_64 | 
| p6-b300.48xlarge | x86\_64 | 

------
#### [ Storage optimized ]


| 인스턴스 유형 | 아키텍처 | 
| --- | --- | 
| i4g.4xlarge | arm64 | 
| i4g.8xlarge | arm64 | 
| i4g.16xlarge | arm64 | 
| i4i.8xlarge | x86\_64 | 
| i4i.12xlarge | x86\_64 | 
| i4i.16xlarge | x86\_64 | 
| i4i.24xlarge | x86\_64 | 
| i4i.32xlarge | x86\_64 | 
| i4i.metal | x86\_64 | 
| i7i.12xlarge | x86\_64 | 
| i7i.16xlarge | x86\_64 | 
| i7i.24xlarge | x86\_64 | 
| i7i.48xlarge | x86\_64 | 
| i7i.metal-24xl | x86\_64 | 
| i7i.metal-48xl | x86\_64 | 
| i7ie.12xlarge | x86\_64 | 
| i7ie.18xlarge | x86\_64 | 
| i7ie.24xlarge | x86\_64 | 
| i7ie.48xlarge | x86\_64 | 
| i7ie.metal-24xl | x86\_64 | 
| i7ie.metal-48xl | x86\_64 | 
| i8g.12xlarge | arm64 | 
| i8g.16xlarge | arm64 | 
| i8g.24xlarge | arm64 | 
| i8g.48xlarge | arm64 | 
| i8g.metal-24xl | arm64 | 
| i8g.metal-48xl | arm64 | 
| i8ge.12xlarge | arm64 | 
| i8ge.18xlarge | arm64 | 
| i8ge.24xlarge | arm64 | 
| i8ge.48xlarge | arm64 | 
| i8ge.metal-24xl | arm64 | 
| i8ge.metal-48xl | arm64 | 
| im4gn.4xlarge | arm64 | 
| im4gn.8xlarge | arm64 | 
| im4gn.16xlarge | arm64 | 

------

## Linux 인스턴스의 ENA Express 설정에 대한 성능 튜닝
<a name="ena-express-tune"></a>

ENA Express가 효과적으로 작동하려면 Linux 인스턴스가 다수의 네트워크 구성 요구 사항을 충족해야 합니다.

각 설정을 수동으로 구성하는 대신 Amazon GitHub 리포지토리에서 ENA Express 설정 검사 스크립트를 다운로드하여 실행할 수 있습니다. 스크립트가 ENA Express에 필요한 권장 설정과 비교하여 인스턴스를 검증하고 정확한 명령을 출력하여 발견된 문제를 해결합니다.

[https://github.com/amzn/amzn-ec2-ena-utilities/blob/main/ena-express/check-ena-express-settings.sh](https://github.com/amzn/amzn-ec2-ena-utilities/blob/main/ena-express/check-ena-express-settings.sh)

스크립트는 다음 설정 및 구성을 확인합니다.
+ **MTU 크기** - 추가 AWS SRD 헤더를 수용하려면 ENA Express에 기본값보다 낮은 MTU가 필요합니다. 새로 설정된 TCP 연결은 이를 완화하기 위해 MSS를 자동으로 고정하지만 UDP 트래픽에는 여전히 더 낮은 MTU가 필요합니다.
+ **TCP 출력 대기열 크기 제한** - 소켓당 전송 중 바이트 제한이 높은 처리량을 유지하기에 충분한지 확인합니다. 네트워크 지연 시간이 증가한 환경에는 더 높은 제한이 필요합니다.
+ **바이트 대기열 제한** - 네트워크 인터페이스에서 바이트 대기열 제한(BQL)이 비활성화되었는지 확인합니다. BQL은 디바이스 수준 전송을 위해 대기 중인 데이터의 양을 제한하여 ENA Express 성능을 제한할 수 있습니다.
**참고**  
Amazon Linux 배포용 ENA 드라이버는 기본적으로 바이트 대기열 제한을 비활성화합니다.
+ **TCP 자동 조정** - TCP 자동 조정이 비활성화되었는지 확인합니다. 자동 코킹을 비활성화하면 요청 응답 워크로드와 같은 특정 ENA Express TCP 트래픽 패턴의 지연 시간을 줄일 수 있습니다. 이렇게 하면 패킷 처리 오버헤드를 최소화할 수 있습니다.
+ **TX 대기열 크기 및 대형 LLQ** - 네트워크 인터페이스의 전송 대기열 크기가 최적의 성능 발휘에 충분히 큰지 확인합니다. 또한 스크립트는 ENA 모듈 파라미터가 사용 가능한 TX 대기열 깊이를 줄일 수 있으므로 대기 시간이 짧은 대규모 대기열(Large LLQ) 기능을 명시적으로 비활성화하는지 확인합니다. 대형 LLQ 및 이것이 TX 대기열 크기에 미치는 영향에 대한 자세한 내용은 GitHub의 [대기 시간이 짧은 대규모 대기열(Large LLQ)](https://github.com/amzn/amzn-drivers/tree/master/kernel/linux/ena#large-low-latency-queue-large-llq)을 참조하세요.
+ **RX 대기열 크기** - 네트워크 인터페이스의 수신 링 버퍼가 수신 트래픽을 효율적으로 처리하고 로드 시 패킷 감소를 방지할 수 있을 만큼 충분히 큰지 확인합니다.
+ **TCP 및 네트워크 소켓 버퍼 크기** - TCP가 코어 네트워크 소켓 버퍼 기본값 및 최대값뿐만 아니라 최대 처리량을 유지할 수 있을 만큼 충분히 큰지 확인합니다. 이러한 설정은 연결을 활용하기 위해 더 큰 버퍼가 필요한 네트워크 지연 시간이 증가한 환경에서 중요합니다.
+ **TCP 정체 제어** - TCP 정체 제어 구성이 네트워크 지연 시간이 증가한 환경에서 ENA Express와 함께 사용하도록 최적화되어 있는지 확인합니다.

또한 스크립트는 ENA 드라이버 버전, ENA SRD 통계, 인터럽트 조절 설정, 대기열 구성 및 소켓 버퍼 크기를 포함한 추가 진단 정보를 보고합니다. 이 정보는 ENA Express 성능 문제를 해결하는 데 유용할 수 있습니다.

인스턴스 네트워크 드라이버가 최적의 성능을 제공하도록 구성되었는지 확인하려면 GitHub의 [ENA Linux 드라이버 모범 사례 및 성능 최적화 가이드](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/ENA_Linux_Best_Practices.rst)도 검토하세요.