

# ENA Express を使用して EC2 インスタンス間のネットワークパフォーマンスを高める
<a name="ena-express"></a>

ENA Express は、AWS スケーラブルで信頼性の高いデータグラム (SRD) テクノロジーを搭載しています。SRD は、動的ルーティングを使用してスループットを向上させ、テールレイテンシーを最小限に抑える高性能なネットワークトランスポートプロトコルです。ENA Express を使用すると、同じアベイラビリティゾーン内の 2 つの EC2 インスタンス間で通信できます。

**ENA Express の利点**
+ アベイラビリティーゾーン内で 1 つのフローで使用できる集約インスタンスの制限までの最大帯域幅を、5 Gbps から 25 Gbps に拡大します。
+ 特にネットワーク負荷が高い期間に、EC2 インスタンス間のネットワークトラフィックのテールレイテンシーを短縮します。
+ 混雑したネットワークパスを検出して回避します。
+ 受信側でのパケットの並べ替えや、必要とされるほとんどの再送信など、一部のタスクをネットワーク層で直接処理します。これにより、アプリケーション層が解放され、他の作業に充てることができるようになります。

**注記**  
アプリケーションが 1 秒間に大量のパケットを送受信し、ほとんどの場合、特にネットワークに輻輳がない時間帯にレイテンシーを最適化する必要がある場合は、[拡張ネットワーク](enhanced-networking.md) の方がネットワークに適している場合があります。
ローカルゾーン内で ENA Express トラフィックを送信することはできません。

インスタンスのネットワークインターフェイスアタッチメントで ENA Express を有効にした後、送信側インスタンスは受信側インスタンスとの通信を開始し、SRD は 送信側インスタンスと受信側インスタンスの両方で ENA Express が動作しているかどうかを検出します。ENA Express が動作している場合、通信に SRD 送信を使用できます。ENA Express が動作していない場合、通信は標準の ENA 送信にフォールバックします。

ネットワークトラフィックが少ない時間帯に、パケットが ENA Express を使用すると、パケットのレイテンシーがわずかに増加することがあります (数十マイクロ秒)。このような場合、特定のネットワークパフォーマンス特性を優先するアプリケーションには、次のような ENA Express の利点があります。
+ プロセスは、集約インスタンスの制限までの同じアベイラビリティゾーン内におけるシングルフローの最大帯域幅を 5 Gbps から 25 Gbps に拡大するという利点を得られます。例えば、特定のインスタンスタイプが最大 12.5 Gbps までサポートする場合、シングルフローの帯域幅も 12.5 Gbps までに制限されます。
+ 実行時間が長いプロセスでは、ネットワークが混雑している間のテールレイテンシーが減少するはずです。
+ プロセスには、ネットワークの応答時間をよりスムーズに、より標準的にディストリビューションできるという利点があります。

**Topics**
+ [ENA Express の仕組み](#ena-express-how-it-works)
+ [ENA Express でサポートされるインスタンスタイプ](#ena-express-supported-instance-types)
+ [Linux インスタンスの前提条件](#ena-express-prereq-linux)
+ [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 スケーラブルで信頼性の高いデータグラム (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/ja_jp/AWSEC2/latest/UserGuide/ena-express.html)

  この場合、2 つのインスタンスが ENA Express を有効にするので、両方のインスタンス間の TCP トラフィックで、ENA Express を使用できます。ただし、一方のインスタンスは UDP トラフィックに ENA Express を使用しないため、これら 2 つのインスタンス間の UDP 経由の通信には標準の ENA 送信が使用されます。
+ 送信側と受信側のインスタンスは同じアベイラビリティゾーンで実行する必要があります。
+ インスタンス間のネットワークパスには、ミドルウェアボックスを含めないようにしてください。ENA Express は現在、ミドルウェアボックスをサポートしていません。
+ (Linux インスタンスのみ) 帯域幅を最大限に活用するには、ドライバーバージョン 2.2.9 以降を使用します。
+ (Linux インスタンスのみ) メトリクスを生成するには、ドライバーバージョン 2.8 以降を使用します。

いずれかの要件が満たされていない場合、インスタンスは標準の TCP/UDP プロトコルを使用して通信しますが、SRD は使用しません。

インスタンスのネットワークドライバーが最適なパフォーマンスを発揮できるように構成するには、ENA ドライバーの推奨ベストプラクティスを確認してください。これらのベストプラクティスは ENA Express にも当てはまります。詳細については、GitHub ウェブサイトの「[ENA Linux ドライバーのベストプラクティスとパフォーマンス最適化ガイド](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/ENA_Linux_Best_Practices.rst)」を参照してください。

**注記**  
Amazon EC2 では、インスタンスとそれにアタッチされたネットワークインターフェイスとの関係をアタッチメントと呼びます。ENA Express の設定がアタッチメントに適用されます。ネットワークインターフェースがインスタンスからデタッチされると、アタッチメントは存在しなくなり、そのアタッチメントに適用されていた ENA Express 設定は無効になります。ネットワークインターフェースが残っていても、インスタンスが終了した場合、同様になります。

送信側と受信側の両方のインスタンスでネットワークインターフェイスをアタッチできるように ENA Express を有効にすると、インスタンスが SRD テクノロジーで実現されるパフォーマンス向上を全面的に享受できることを、ENA Express メトリクスを使用して容易に確認できます。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\$164 | 
| m6a.16xlarge | x86\$164 | 
| m6a.24xlarge | x86\$164 | 
| m6a.32xlarge | x86\$164 | 
| m6a.48xlarge | x86\$164 | 
| m6a.metal | x86\$164 | 
| m6i.8xlarge | x86\$164 | 
| m6i.12xlarge | x86\$164 | 
| m6i.16xlarge | x86\$164 | 
| m6i.24xlarge | x86\$164 | 
| m6i.32xlarge | x86\$164 | 
| m6i.metal | x86\$164 | 
| m6id.8xlarge | x86\$164 | 
| m6id.12xlarge | x86\$164 | 
| m6id.16xlarge | x86\$164 | 
| m6id.24xlarge | x86\$164 | 
| m6id.32xlarge | x86\$164 | 
| m6id.metal | x86\$164 | 
| m6idn.8xlarge | x86\$164 | 
| m6idn.12xlarge | x86\$164 | 
| m6idn.16xlarge | x86\$164 | 
| m6idn.24xlarge | x86\$164 | 
| m6idn.32xlarge | x86\$164 | 
| m6idn.metal | x86\$164 | 
| m6in.8xlarge | x86\$164 | 
| m6in.12xlarge | x86\$164 | 
| m6in.16xlarge | x86\$164 | 
| m6in.24xlarge | x86\$164 | 
| m6in.32xlarge | x86\$164 | 
| m6in.metal | x86\$164 | 
| m7a.12xlarge | x86\$164 | 
| m7a.16xlarge | x86\$164 | 
| m7a.24xlarge | x86\$164 | 
| m7a.32xlarge | x86\$164 | 
| m7a.48xlarge | x86\$164 | 
| m7a.metal-48xl | x86\$164 | 
| m7g.12xlarge | arm64 | 
| m7g.16xlarge | arm64 | 
| m7g.metal | arm64 | 
| m7gd.12xlarge | arm64 | 
| m7gd.16xlarge | arm64 | 
| m7gd.metal | arm64 | 
| m7i.12xlarge | x86\$164 | 
| m7i.16xlarge | x86\$164 | 
| m7i.24xlarge | x86\$164 | 
| m7i.48xlarge | x86\$164 | 
| m7i.metal-24xl | x86\$164 | 
| m7i.metal-48xl | x86\$164 | 
| m8a.16xlarge | x86\$164 | 
| m8a.24xlarge | x86\$164 | 
| m8a.48xlarge | x86\$164 | 
| m8a.metal-24xl | x86\$164 | 
| m8a.metal-48xl | x86\$164 | 
| m8azn.12xlarge | x86\$164 | 
| m8azn.24xlarge | x86\$164 | 
| m8azn.metal-12xl | x86\$164 | 
| m8azn.metal-24xl | x86\$164 | 
| 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\$164 | 
| m8i.32xlarge | x86\$164 | 
| m8i.48xlarge | x86\$164 | 
| m8i.96xlarge | x86\$164 | 
| m8i.metal-48xl | x86\$164 | 
| m8i.metal-96xl | x86\$164 | 
| m8id.24xlarge | x86\$164 | 
| m8id.32xlarge | x86\$164 | 
| m8id.48xlarge | x86\$164 | 
| m8id.96xlarge | x86\$164 | 
| m8id.metal-48xl | x86\$164 | 
| m8id.metal-96xl | x86\$164 | 

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


| インスタンスタイプ | アーキテクチャ | 
| --- | --- | 
| c6a.12xlarge | x86\$164 | 
| c6a.16xlarge | x86\$164 | 
| c6a.24xlarge | x86\$164 | 
| c6a.32xlarge | x86\$164 | 
| c6a.48xlarge | x86\$164 | 
| c6a.metal | x86\$164 | 
| c6gn.4xlarge | arm64 | 
| c6gn.8xlarge | arm64 | 
| c6gn.12xlarge | arm64 | 
| c6gn.16xlarge | arm64 | 
| c6i.8xlarge | x86\$164 | 
| c6i.12xlarge | x86\$164 | 
| c6i.16xlarge | x86\$164 | 
| c6i.24xlarge | x86\$164 | 
| c6i.32xlarge | x86\$164 | 
| c6i.metal | x86\$164 | 
| c6id.8xlarge | x86\$164 | 
| c6id.12xlarge | x86\$164 | 
| c6id.16xlarge | x86\$164 | 
| c6id.24xlarge | x86\$164 | 
| c6id.32xlarge | x86\$164 | 
| c6id.metal | x86\$164 | 
| c6in.8xlarge | x86\$164 | 
| c6in.12xlarge | x86\$164 | 
| c6in.16xlarge | x86\$164 | 
| c6in.24xlarge | x86\$164 | 
| c6in.32xlarge | x86\$164 | 
| c6in.metal | x86\$164 | 
| c7a.12xlarge | x86\$164 | 
| c7a.16xlarge | x86\$164 | 
| c7a.24xlarge | x86\$164 | 
| c7a.32xlarge | x86\$164 | 
| c7a.48xlarge | x86\$164 | 
| c7a.metal-48xl | x86\$164 | 
| 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\$164 | 
| c7i.16xlarge | x86\$164 | 
| c7i.24xlarge | x86\$164 | 
| c7i.48xlarge | x86\$164 | 
| c7i.metal-24xl | x86\$164 | 
| c7i.metal-48xl | x86\$164 | 
| c8a.16xlarge | x86\$164 | 
| c8a.24xlarge | x86\$164 | 
| c8a.48xlarge | x86\$164 | 
| c8a.metal-24xl | x86\$164 | 
| c8a.metal-48xl | x86\$164 | 
| 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\$164 | 
| c8i.32xlarge | x86\$164 | 
| c8i.48xlarge | x86\$164 | 
| c8i.96xlarge | x86\$164 | 
| c8i.metal-48xl | x86\$164 | 
| c8i.metal-96xl | x86\$164 | 
| c8id.24xlarge | x86\$164 | 
| c8id.32xlarge | x86\$164 | 
| c8id.48xlarge | x86\$164 | 
| c8id.96xlarge | x86\$164 | 
| c8id.metal-48xl | x86\$164 | 
| c8id.metal-96xl | x86\$164 | 

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


| インスタンスタイプ | アーキテクチャ | 
| --- | --- | 
| r6a.12xlarge | x86\$164 | 
| r6a.16xlarge | x86\$164 | 
| r6a.24xlarge | x86\$164 | 
| r6a.32xlarge | x86\$164 | 
| r6a.48xlarge | x86\$164 | 
| r6a.metal | x86\$164 | 
| r6i.8xlarge | x86\$164 | 
| r6i.12xlarge | x86\$164 | 
| r6i.16xlarge | x86\$164 | 
| r6i.24xlarge | x86\$164 | 
| r6i.32xlarge | x86\$164 | 
| r6i.metal | x86\$164 | 
| r6id.8xlarge | x86\$164 | 
| r6id.12xlarge | x86\$164 | 
| r6id.16xlarge | x86\$164 | 
| r6id.24xlarge | x86\$164 | 
| r6id.32xlarge | x86\$164 | 
| r6id.metal | x86\$164 | 
| r6idn.8xlarge | x86\$164 | 
| r6idn.12xlarge | x86\$164 | 
| r6idn.16xlarge | x86\$164 | 
| r6idn.24xlarge | x86\$164 | 
| r6idn.32xlarge | x86\$164 | 
| r6idn.metal | x86\$164 | 
| r6in.8xlarge | x86\$164 | 
| r6in.12xlarge | x86\$164 | 
| r6in.16xlarge | x86\$164 | 
| r6in.24xlarge | x86\$164 | 
| r6in.32xlarge | x86\$164 | 
| r6in.metal | x86\$164 | 
| r7a.12xlarge | x86\$164 | 
| r7a.16xlarge | x86\$164 | 
| r7a.24xlarge | x86\$164 | 
| r7a.32xlarge | x86\$164 | 
| r7a.48xlarge | x86\$164 | 
| r7a.metal-48xl | x86\$164 | 
| r7g.12xlarge | arm64 | 
| r7g.16xlarge | arm64 | 
| r7g.metal | arm64 | 
| r7gd.12xlarge | arm64 | 
| r7gd.16xlarge | arm64 | 
| r7gd.metal | arm64 | 
| r7i.12xlarge | x86\$164 | 
| r7i.16xlarge | x86\$164 | 
| r7i.24xlarge | x86\$164 | 
| r7i.48xlarge | x86\$164 | 
| r7i.metal-24xl | x86\$164 | 
| r7i.metal-48xl | x86\$164 | 
| r7iz.8xlarge | x86\$164 | 
| r7iz.12xlarge | x86\$164 | 
| r7iz.16xlarge | x86\$164 | 
| r7iz.32xlarge | x86\$164 | 
| r7iz.metal-16xl | x86\$164 | 
| r7iz.metal-32xl | x86\$164 | 
| r8a.16xlarge | x86\$164 | 
| r8a.24xlarge | x86\$164 | 
| r8a.48xlarge | x86\$164 | 
| r8a.metal-24xl | x86\$164 | 
| r8a.metal-48xl | x86\$164 | 
| 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\$164 | 
| r8i.32xlarge | x86\$164 | 
| r8i.48xlarge | x86\$164 | 
| r8i.96xlarge | x86\$164 | 
| r8i.metal-48xl | x86\$164 | 
| r8i.metal-96xl | x86\$164 | 
| r8id.24xlarge | x86\$164 | 
| r8id.32xlarge | x86\$164 | 
| r8id.48xlarge | x86\$164 | 
| r8id.96xlarge | x86\$164 | 
| r8id.metal-48xl | x86\$164 | 
| r8id.metal-96xl | x86\$164 | 
| u7i-6tb.112xlarge | x86\$164 | 
| u7i-8tb.112xlarge | x86\$164 | 
| u7i-12tb.224xlarge | x86\$164 | 
| u7in-16tb.224xlarge | x86\$164 | 
| u7in-24tb.224xlarge | x86\$164 | 
| u7in-32tb.224xlarge | x86\$164 | 
| u7inh-32tb.480xlarge | x86\$164 | 
| x2idn.16xlarge | x86\$164 | 
| x2idn.24xlarge | x86\$164 | 
| x2idn.32xlarge | x86\$164 | 
| x2idn.metal | x86\$164 | 
| x2iedn.8xlarge | x86\$164 | 
| x2iedn.16xlarge | x86\$164 | 
| x2iedn.24xlarge | x86\$164 | 
| x2iedn.32xlarge | x86\$164 | 
| x2iedn.metal | x86\$164 | 
| x8g.12xlarge | arm64 | 
| x8g.16xlarge | arm64 | 
| x8g.24xlarge | arm64 | 
| x8g.48xlarge | arm64 | 
| x8g.metal-24xl | arm64 | 
| x8g.metal-48xl | arm64 | 
| x8aedz.24xlarge | x86\$164 | 
| x8aedz.metal-24xl | x86\$164 | 
| x8i.24xlarge | x86\$164 | 
| x8i.32xlarge | x86\$164 | 
| x8i.48xlarge | x86\$164 | 
| x8i.64xlarge | x86\$164 | 
| x8i.96xlarge | x86\$164 | 
| x8i.metal-48xl | x86\$164 | 
| x8i.metal-96xl | x86\$164 | 

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


| インスタンスタイプ | アーキテクチャ | 
| --- | --- | 
| g6.48xlarge | x86\$164 | 
| g6e.12xlarge | x86\$164 | 
| g6e.24xlarge | x86\$164 | 
| g6e.48xlarge | x86\$164 | 
| g7e.12xlarge | x86\$164 | 
| g7e.24xlarge | x86\$164 | 
| g7e.48xlarge | x86\$164 | 
| p5.4xlarge | x86\$164 | 
| p5.48xlarge | x86\$164 | 
| p5e.48xlarge | x86\$164 | 
| p5en.48xlarge | x86\$164 | 
| p6-b200.48xlarge | x86\$164 | 
| p6-b300.48xlarge | x86\$164 | 

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


| インスタンスタイプ | アーキテクチャ | 
| --- | --- | 
| i4g.4xlarge | arm64 | 
| i4g.8xlarge | arm64 | 
| i4g.16xlarge | arm64 | 
| i4i.8xlarge | x86\$164 | 
| i4i.12xlarge | x86\$164 | 
| i4i.16xlarge | x86\$164 | 
| i4i.24xlarge | x86\$164 | 
| i4i.32xlarge | x86\$164 | 
| i4i.metal | x86\$164 | 
| i7i.12xlarge | x86\$164 | 
| i7i.16xlarge | x86\$164 | 
| i7i.24xlarge | x86\$164 | 
| i7i.48xlarge | x86\$164 | 
| i7i.metal-24xl | x86\$164 | 
| i7i.metal-48xl | x86\$164 | 
| i7ie.12xlarge | x86\$164 | 
| i7ie.18xlarge | x86\$164 | 
| i7ie.24xlarge | x86\$164 | 
| i7ie.48xlarge | x86\$164 | 
| i7ie.metal-24xl | x86\$164 | 
| i7ie.metal-48xl | x86\$164 | 
| 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 インスタンスの前提条件
<a name="ena-express-prereq-linux"></a>

ENA Express を効果的に動作させるには、以下のように Linux インスタンスの設定を更新します。
+ インスタンスでジャンボフレームを使用している場合は、次のコマンドを実行して最大送信単位 (MTU) を `8900` に設定します。

  ```
  [ec2-user ~]$ sudo ip link set dev eth0 mtu 8900
  ```
+ 受信側 (Rx) のリングサイズを次のように大きくします。

  ```
  [ec2-user ~]$ ethtool -G device rx 8192
  ```
+ ENA Expressの帯域幅を最大化するには、TCP キュー制限を次のように設定します。

  1. TCP の小規模なキューの制限を 1 MB 以上に設定します。これにより、ソケット上で送信キューのデータが増えます。

     ```
     sudo sh -c 'echo 1048576 > /proc/sys/net/ipv4/tcp_limit_output_bytes'
     ```

  1. お使いの Linux ディストリビューションで eth デバイスのバイトキュー制限が有効になっている場合は、それを無効にしてください。これにより、デバイスキューの送信待ちのデータが増加します。

     ```
     sudo sh -c 'for txq in /sys/class/net/eth0/queues/tx-*; do echo max > ${txq}/byte_queue_limits/limit_min; done'
     ```
**注記**  
Amazon Linux ディストリビューションの ENA ドライバーは、デフォルトでバイトキュー制限を無効にします。
+ ENA Express TCP トラフィックの遅延を最小限に抑えるには、TCP 自動コーキング機能を無効にします。これにより、パケットオーバーヘッドがわずかに増加する可能性があります。

  ```
  sudo bash -c 'echo 0 > /proc/sys/net/ipv4/tcp_autocorking'
  ```

## Linux インスタンスで ENA Express 設定のパフォーマンスをチューニングする
<a name="ena-express-tune"></a>

Linux インスタンス構成で ENA Express の最適なパフォーマンスを確認するには、Amazon GitHub リポジトリにある次のスクリプトを実行します。

[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)

このスクリプトは一連のテストを実行し、推奨設定変更および必須設定変更を提案します。

# EC2 インスタンスの ENA Express 設定を確認する
<a name="ena-express-list-view"></a>

ENA Express 設定は、インスタンスまたはネットワークインターフェイスで確認できます。ENA Express 設定を更新するには、[ご使用の EC2 インスタンスに適した ENA Express を設定する](ena-express-configure.md)を参照してください。

------
#### [ Console ]

**ネットワークインターフェイスの ENA Express 設定を表示するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左側のナビゲーションペインで、**[ネットワークインターフェース]** を選択してください。

1. ネットワークインターフェイスを選択すると、そのインスタンスの詳細が表示されます。**[ネットワークインターフェース ID]** リンクを選択して詳細ページを開くか、リストの左側のチェックボックスを選択してページ下部の詳細ペインで詳細を表示できます。

1. **[詳細]** タブまたは詳細ページの **[ネットワークインターフェイスのアタッチメント]** セクションで、**[ENA Express]** と **[ENA Express UDP]** の設定を確認します。

**インスタンスの ENA Express 設定を表示するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーションペインで、**[インスタンス]** をクリックしてください。

1. インスタンスを選択すると、そのインスタンスの詳細が表示されます。**[インスタンス ID]** リンクを選択して詳細ページを開くことも、リストの左側のチェックボックスを選択してページ下部の詳細ペインに詳細を表示することもできます。

1. **[ネットワーキング]** タブの **[ネットワークインターフェース]** セクションを右にスクロールして **[ENA Express]** と **[ENA Express UDP]** の設定を確認します。

------
#### [ AWS CLI ]

**インスタンスの ENA Express 設定を取得するには**  
[https://docs.aws.amazon.com/cli/latest/reference/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/describe-instances.html) コマンドを使用します。このコマンド例は、`--instance-ids` パラメータで指定された実行中の各インスタンスに接続されているネットワークインターフェイスの ENA Express 設定のリストを返します。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 i-0598c7d356eba48d7 \
    --query 'Reservations[*].Instances[*].[InstanceId, NetworkInterfaces[*].Attachment.EnaSrdSpecification]'
```

以下は出力の例です。

```
[
    [
        [
            "i-1234567890abcdef0",
            [
                {
                    "EnaSrdEnabled": true,
                    "EnaSrdUdpSpecification": {
                        "EnaSrdUdpEnabled": false
                    }
                }
            ]
        ]
    ],
    [
        [
            "i-0598c7d356eba48d7",
            [
            {
                    "EnaSrdEnabled": true,
                    "EnaSrdUdpSpecification": {
                        "EnaSrdUdpEnabled": false
                    }
                }
            ]
        ]
    ]
]
```

**ネットワークインターフェイスの ENA Express 設定を取得するには**  
[https://docs.aws.amazon.com/cli/latest/reference/describe-network-interfaces.html](https://docs.aws.amazon.com/cli/latest/reference/describe-network-interfaces.html) コマンドを使用します。

```
aws ec2 describe-network-interfaces \
    --network-interface-ids eni-1234567890abcdef0 \
    --query NetworkInterfaces[].[NetworkInterfaceId,Attachment.EnaSrdSpecification]
```

以下は出力の例です。

```
[
    [
        "eni-1234567890abcdef0",
        {
            "EnaSrdEnabled": true,
            "EnaSrdUdpSpecification": {
                "EnaSrdUdpEnabled": false
            }
        }
    ]
]
```

------
#### [ PowerShell ]

**ネットワークインターフェイスの ENA Express 設定を取得するには**  
[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2NetworkInterface.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2NetworkInterface.html) コマンドレットを使用します。

```
Get-EC2NetworkInterface `
    -NetworkInterfaceId eni-1234567890abcdef0 | `
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-1234567890abcdef0
InstanceOwnerId     : 111122223333
Status              : attached
EnaSrdEnabled       : True
EnaSrdUdpEnabled    : False
```

------

# ご使用の EC2 インスタンスに適した ENA Express を設定する
<a name="ena-express-configure"></a>

ENA Express は、対応する EC2 インスタンスタイプに対して、追加のソフトウェアをインストールすることなく設定できます。詳細については、[ENA Express でサポートされるインスタンスタイプ](ena-express.md#ena-express-supported-instance-types)を参照してください。

------
#### [ Console ]

**ネットワークインターフェイスの ENA Express を管理するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左側のナビゲーションペインで、**[ネットワークインターフェース]** 　を選択してください。

1. インスタンスにアタッチされるネットワークインターフェースを指定します。**[ネットワークインターフェース ID]** リンクを選択して詳細ページを開くことも、リストの左側にあるチェックボックスを選択することもできます。

1. ページ右上の **[アクション]** メニューから **[ENA Express の管理]** を選択してください。これにより、選択したネットワークインターフェイス ID と現在の設定が表示された **[ENA Express の管理]** ダイアログが開きます。

   選択したネットワークインターフェースがインスタンスに接続されていない場合、このアクションはメニューに表示されません。

1. **[ENA Express]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. ENA Express が有効になっている場合、UDP 設定を構成できます。**[ENA Express UDP]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. 設定を保存するには **[保存]** を選択してください。

**インスタンスの ENA Express を管理するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーションペインで、**[インスタンス]** をクリックしてください。

1. 管理するインスタンスを選択してください。**[インスタンス ID]** を選択して詳細ページを開くか、リストの左側にあるチェックボックスを選択してください。

1. インスタンスに設定する**[ネットワークインターフェイス]** を選択してください。

1. ページ右上の **[アクション]** メニューから **[ENA Express の管理]** を選択してください。

1. インスタンスにアタッチされているネットワークインターフェイスに ENA Express を設定するには、**[ネットワークインターフェイス]** リストから選択してください。

1. 選択したネットワークインターフェイスアタッチメントに **[ENA Express]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. ENA Express が有効になっている場合、UDP 設定を構成できます。**[ENA Express UDP]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. 設定を保存するには **[保存]** を選択してください。

**ネットワークインターフェイスをアタッチする際に ENA Express を設定するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左側のナビゲーションペインで、**[ネットワークインターフェース]** を選択してください。

1. インスタンスにアタッチされていないネットワークインターフェイスを選択します (**[ステータス]** が **[利用可]** のもの)。**[ネットワークインターフェース ID]** リンクを選択して詳細ページを開くことも、リストの左側にあるチェックボックスを選択することもできます。

1. アタッチする **[インスタンス]** を選択してください。

1. ネットワークインターフェイスをインスタンスにアタッチした後に **[ENA Express]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. ENA Express が有効になっている場合、UDP 設定を構成できます。**[ENA Express UDP]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. ネットワークインターフェイスをインスタンスにアタッチし、ENA Express の設定を保存するには、**[アタッチ]** を選択してください。

------
#### [ AWS CLI ]

**ネットワークインターフェイスをアタッチする際に ENA Express を設定するには**  
次の例に示すように [https://docs.aws.amazon.com/cli/latest/reference/;attach-network-interface.html](https://docs.aws.amazon.com/cli/latest/reference/;attach-network-interface.html) コマンドを使用します。

**例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない**  
この例では、`EnaSrdEnabled` を `true` に設定し、`EnaSrdUdpEnabled` をデフォルトで `false` になるよう設定します。

```
aws ec2 attach-network-interface \
    --network-interface-id eni-1234567890abcdef0 \
    --instance-id i-1234567890abcdef0 \
    --device-index 1 \
    --ena-srd-specification 'EnaSrdEnabled=true'
```

**例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する**  
この例では、`EnaSrdEnabled` と `EnaSrdUdpEnabled` の両方を `true` に設定します。

```
aws ec2 attach-network-interface \
    --network-interface-id eni-1234567890abcdef0 \
    --instance-id i-1234567890abcdef0 \
    --device-index 1 \
    --ena-srd-specification 'EnaSrdEnabled=true,EnaSrdUdpSpecification={EnaSrdUdpEnabled=true}'
```

**ネットワークインターフェイスアタッチメントの ENA Express 設定を更新するには**  
次の例に示すように [https://docs.aws.amazon.com/cli/latest/reference/modify-network-interface-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/modify-network-interface-attribute.html) コマンドを使用します。

**例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない**  
この例では、`EnaSrdEnabled` を `true` に設定し、以前に設定したことがない場合は `EnaSrdUdpEnabled` をデフォルトで `false` になるよう設定します。

```
aws ec2 modify-network-interface-attribute \
    --network-interface-id eni-1234567890abcdef0 \
    --ena-srd-specification 'EnaSrdEnabled=true'
```

**例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する**  
この例では、`EnaSrdEnabled` と `EnaSrdUdpEnabled` の両方を `true` に設定します。

```
aws ec2 modify-network-interface-attribute \
    --network-interface-id eni-1234567890abcdef0 \
    --ena-srd-specification 'EnaSrdEnabled=true,EnaSrdUdpSpecification={EnaSrdUdpEnabled=true}'
```

**例 3: UDP トラフィックでの ENA Express の使用を停止する**  
この例では、`EnaSrdUdpEnabled` を `false` に設定します。

```
aws ec2 modify-network-interface-attribute \
    --network-interface-id eni-1234567890abcdef0 \
    --ena-srd-specification 'EnaSrdUdpSpecification={EnaSrdUdpEnabled=false}'
```

------
#### [ PowerShell ]

**ネットワークインターフェイスをアタッチする際に ENA Express を設定するには**  
次の例に示すように、[https://docs.aws.amazon.com/powershell/latest/reference/items/Add-EC2NetworkInterface.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Add-EC2NetworkInterface.html) コマンドレットを使用します。

**例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない**  
この例では、`EnaSrdEnabled` を `true` に設定し、`EnaSrdUdpEnabled` をデフォルトで `false` になるよう設定します。

```
Add-EC2NetworkInterface `
    -NetworkInterfaceId eni-1234567890abcdef0 `
    -InstanceId i-1234567890abcdef0 `
    -DeviceIndex 1 `
    -EnaSrdSpecification_EnaSrdEnabled $true
```

**例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する**  
この例では、`EnaSrdEnabled` と `EnaSrdUdpEnabled` の両方を `true` に設定します。

```
Add-EC2NetworkInterface `
    -NetworkInterfaceId eni-1234567890abcdef0 `
    -InstanceId i-1234567890abcdef0 `
    -DeviceIndex 1 `
    -EnaSrdSpecification_EnaSrdEnabled $true `
    -EnaSrdUdpSpecification_EnaSrdUdpEnabled $true
```

**ネットワークインターフェイスアタッチメントの ENA Express 設定を設定するには**  
次の例に示すように、[https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2NetworkInterfaceAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2NetworkInterfaceAttribute.html) コマンドレットを使用します。

**例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない**  
この例では、`EnaSrdEnabled` を `true` に設定し、以前に設定したことがない場合は `EnaSrdUdpEnabled` をデフォルトで `false` になるよう設定します。

```
Edit-EC2NetworkInterfaceAttribute `
    -NetworkInterfaceId eni-1234567890abcdef0 `
    -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
```

**例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する**  
この例では、`EnaSrdEnabled` と `EnaSrdUdpEnabled` の両方を `true` に設定します。

```
Edit-EC2NetworkInterfaceAttribute `
    -NetworkInterfaceId eni-1234567890abcdef0 `
    -EnaSrdSpecification_EnaSrdEnabled $true `
    -EnaSrdSpecification_EnaSrdUdpSpecification_EnaSrdUdpEnabled $true ;
Get-EC2NetworkInterface -NetworkInterfaceId eni-1234567890abcdef0 | `
Select-Object `
    NetworkInterfaceId, 
    @{Name = 'EnaSrdEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdEnabled }}, 
    @{Name = 'EnaSrdUdpEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdUdpSpecification.EnaSrdUdpEnabled }} | `
Format-List
```

**例 3: UDP トラフィックでの ENA Express の使用を停止する**  
この例では、`EnaSrdUdpEnabled` を `false` に設定します。

```
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
```

------

## 起動時に ENA Express を設定する
<a name="ena-express-configure-on-launch"></a>

インスタンスを起動するときに、以下のいずれかの方法を使用して ENA Express を直接設定できます。設定されているリンクをたどると、AWS マネジメントコンソールからこれらの方法を行う手順を確認できます。
+ **インスタンス起動ウィザード** – インスタンス起動ウィザードでは、起動時に ENA Express を設定できます。詳細については、インスタンス起動ウィザードの [ネットワーク設定](ec2-instance-launch-parameters.md#liw-network-settings)、「**Advanced network configuration**」を参照してください。
+ **起動テンプレート** – 起動テンプレートを使用すると、起動時に ENA Express を設定できます。詳細については、「[Amazon EC2 起動テンプレートを作成する](create-launch-template.md)」ページを参照し、**[ネットワーク設定]** セクションを展開して、**[高度なネットワーク設定]** を確認してください。