ENA Express を使用して EC2 インスタンス間のネットワークパフォーマンスを高める
ENA Express は、AWS スケーラブルで信頼性の高いデータグラム (SRD) テクノロジーを搭載しています。SRD は、動的ルーティングを使用してスループットを向上させ、テールレイテンシーを最小限に抑える高性能なネットワークトランスポートプロトコルです。ENA Express を使用すると、同じアベイラビリティゾーン内、または同じリージョン内の異なるアベイラビリティゾーンにある 2 つの EC2 インスタンス間で通信を行うことができます。
ENA Express の利点
-
同一リージョン内において、単一フローが利用可能な最大帯域幅を 5Gbps から 25Gbps まで引き上げ、インスタンス全体の合計上限値まで適用可能にします。
-
同じアベイラビリティゾーン内の EC2 インスタンス間のネットワークトラフィックのテールレイテンシを低減します。特にネットワーク負荷が高い時間帯において効果的です。
-
混雑したネットワークパスを検出して回避します。
-
受信側でのパケットの並べ替えや、必要とされるほとんどの再送信など、一部のタスクをネットワーク層で直接処理します。これにより、アプリケーション層が解放され、他の作業に充てることができるようになります。
-
アプリケーションで 1 秒あたりのパケット数が多く、輻輳していない時間帯の遅延を最適化する必要がある場合は、拡張ネットワーク の方が適しているかもしれません。
-
ローカルゾーン内で ENA Express トラフィックを送信することはできません。
-
南米 (サンパウロ)、中東 (バーレーン)、および中東 (UAE) では、アベイラビリティゾーン間のトラフィックに対する 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 までに制限されます。
-
同じアベイラビリティゾーン内で長時間実行されているプロセスでは、ネットワークが混雑している期間中、テールレイテンシが低減されます。
-
プロセスには、ネットワークの応答時間をよりスムーズに、より標準的にディストリビューションできるという利点があります。
ENA Express の仕組み
ENA Express は、AWS スケーラブルで信頼性の高いデータグラム (SRD) テクノロジーを搭載しています。各ネットワークフローのパケットをさまざまな AWS ネットワークパスに分散し、輻輳の兆候を検出すると配信を動的に調整します。また、受信側でのパケットの並べ替えも管理します。
ENA Express がネットワークトラフィックを意図したとおりに管理できるようにするには、送受信インスタンスと受信側インスタンス間の通信が次の要件をすべて満たしている必要があります。
-
送信側と受信側の両方のインスタンスタイプがサポートされています。詳細については、ENA Express でサポートされるインスタンスタイプの表を参照してください。
-
送信側と受信側の両方のインスタンスに ENA Express が設定されている必要があります。設定に違いがあると、トラフィックがデフォルトで標準の ENA 送信になる状況が発生する可能性があります。発生し得る状況を次のシナリオで説明します。
シナリオ: 設定の違い
| インスタンス |
ENA Express が有効になっている |
UDP は ENA Express を使用する |
| インスタンス 1 |
はい |
はい |
| インスタンス 2 |
はい |
いいえ |
この場合、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 ドライバーのベストプラクティスとパフォーマンス最適化ガイド」を参照してください。
Amazon EC2 では、インスタンスとそれにアタッチされたネットワークインターフェイスとの関係をアタッチメントと呼びます。ENA Express の設定がアタッチメントに適用されます。ネットワークインターフェースがインスタンスからデタッチされると、アタッチメントは存在しなくなり、そのアタッチメントに適用されていた ENA Express 設定は無効になります。ネットワークインターフェースが残っていても、インスタンスが終了した場合、同様になります。
送信側と受信側の両方のインスタンスでネットワークインターフェイスをアタッチできるように ENA Express を有効にすると、インスタンスが SRD テクノロジーで実現されるパフォーマンス向上を全面的に享受できることを、ENA Express メトリクスを使用して容易に確認できます。ENA Express のメトリクスに関する詳細は、ENA Express のメトリクスを参照してください。
ENA Express でサポートされるインスタンスタイプ
次のインスタンスタイプが 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 設定のパフォーマンスをチューニングする
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
このスクリプトは、以下の設定と構成を確認します:
-
MTU サイズ – ENA Express では、追加の AWS SRD ヘッダーを収容するために、デフォルトよりも小さい MTU が必要です。この問題を軽減するため、新しく確立された TCP 接続では MSS が自動的に制限されますが、UDP トラフィックでは依然としてより低い MTU が必要です。
-
TCP 出力キューのサイズ制限 – ソケットごとの処理中のバイト数の上限が、高いスループットを維持するのに十分であるかを確認します。ネットワークの遅延が大きい環境では、より高い上限値が必要です。
-
バイトキュー制限 — ネットワークインターフェースでバイトキュー制限 (BQL) が無効になっていることを確認します。BQL は、デバイスレベルでの送信のためにキューに入れられるデータ量を制限することができ、これにより ENA Express のパフォーマンスが低下します。
Amazon Linux ディストリビューションの ENA ドライバーは、デフォルトでバイトキュー制限を無効にします。
-
TCP オートコーキング — TCP オートコーキングが無効になっているかどうかを確認します。オートコーキングを無効にすると、リクエスト・レスポンス型のワークロードなど、特定の ENA Express TCP トラフィックパターンにおいてレイテンシを低減できる場合があります。これにより、パケット処理のオーバーヘッドがわずかに増加する可能性があります。
-
TX キューサイズと Large LLQ – ネットワークインターフェースの送信キューサイズが、最適なパフォーマンスを発揮するのに十分な大きさであることを確認します。また、このスクリプトでは、ENA モジュールのパラメータによって Large Low Latency Queue (Large LLQ) 機能が明示的に無効化されていないかどうかも確認します。これは、この機能が利用可能な TX キューの深さを減少させる可能性があるためです。Large LLQ および TX キューサイズへの影響に関する詳細については、GitHub の 「Large Low Latency Queue (Large LLQ)」 を参照してください。
-
RX キューサイズ – ネットワークインターフェースの受信リングバッファが、着信トラフィックを効率的に処理し、負荷がかかった際にパケットがドロップされないように十分な容量を確保しているかを確認します。
-
TCP およびネットワークソケットバッファサイズ – TCP の受信および送信バッファの最大サイズ、ならびにコアネットワークソケットのバッファのデフォルト値および最大値が、高いスループットを維持するのに十分な大きさであることを検証します。これらの設定は、ネットワークの遅延が大きくなる環境において、接続を有効に活用するために大きなバッファが必要となる場合に重要です。
-
TCP 輻輳制御 – ネットワーク遅延が大きい環境において、TCP 輻輳制御の設定が ENA Express での使用に最適化されていることを確認します。
このスクリプトは、ENA ドライバのバージョン、ENA SRD の統計情報、割り込み調整設定、キュー構成、ソケットバッファサイズなど、その他の診断情報も報告します。この情報は、ENA Express のパフォーマンスに関する問題のトラブルシューティングに役立ちます。
インスタンスのネットワークドライバが最適なパフォーマンスを発揮するように設定されていることを確認するため、GitHub にある 「ENA Linux ドライバーのベストプラクティスとパフォーマンス最適化ガイド」 も確認してください。