EC2 インスタンスで ENA Express を使用してネットワークパフォーマンスを向上させる
ENA Express は、AWS Scalable Reliable Datagram (SRD) テクノロジーを搭載しています。SRD は、動的ルーティングを使用してスループットを向上させ、テールレイテンシーを最小限に抑える高性能なネットワークトランスポートプロトコルです。ENA Express を使用すると、同じアベイラビリティゾーン内の 2 つの EC2 インスタンス間で通信できます。
ENA Express の利点
-
アベイラビリティーゾーン内で 1 つのフローで使用できる集約インスタンスの制限までの最大帯域幅を、5 Gbps から 25 Gbps に拡大します。
-
特にネットワーク負荷が高い期間に、EC2 インスタンス間のネットワークトラフィックのテールレイテンシーを短縮します。
-
混雑したネットワークパスを検出して回避します。
-
受信側でのパケットの並べ替えや、必要とされるほとんどの再送信など、一部のタスクをネットワーク層で直接処理します。これにより、アプリケーション層が解放され、他の作業に充てることができるようになります。
アプリケーションが 1 秒間に大量のパケットを送受信し、ほとんどの場合、特にネットワークに輻輳がない時間帯にレイテンシーを最適化する必要がある場合は、拡張ネットワーク の方がネットワークに適している場合があります。
ネットワークトラフィックが少ない時間帯に、パケットが ENA Express を使用すると、パケットのレイテンシーがわずかに増加することがあります (数十マイクロ秒)。このような場合、特定のネットワークパフォーマンス特性を優先するアプリケーションには、次のような ENA Express の利点があります。
-
プロセスは、集約インスタンスの制限までの同じアベイラビリティゾーン内におけるシングルフローの最大帯域幅を 5 Gbps から 25 Gbps に拡大するという利点を得られます。たとえば、特定のインスタンスタイプが最大 12.5 Gbps までサポートする場合、シングルフローの帯域幅も 12.5 Gbps までに制限されます。
-
実行時間が長いプロセスでは、ネットワークが混雑している間のテールレイテンシーが減少するはずです。
-
プロセスには、ネットワークの応答時間をよりスムーズに、より標準的にディストリビューションできるという利点があります。
Linux インスタンスの前提条件
ENA Express が効果的に動作できるようにするには、次のようにインスタンスの設定を更新します。
-
インスタンスでジャンボフレームを使用している場合は、次のコマンドを実行して最大送信単位 (MTU) を 8900
に設定します。
[ec2-user ~]$
sudo ip link set dev eth0
mtu 8900
-
受信側 (Rx) のリングサイズを次のように大きくします。
[ec2-user ~]$
ethtool -G device
rx 8192
-
ENA Expressの帯域幅を最大化するには、TCP キュー制限を次のように設定します。
-
TCP の小規模なキューの制限を 1 MB 以上に設定します。これにより、ソケット上で送信キューのデータが増えます。
sudo sh -c 'echo 1048576
> /proc/sys/net/ipv4/tcp_limit_output_bytes'
-
お使いの 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 の仕組み
ENA Express は、AWS Scalable Reliable Datagram (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 Driver Best Practices and Performance Optimization Guide」(ENA Linux ドライバーのベストプラクティスとパフォーマンス最適化ガイド) を参照してください。
Amazon EC2 では、インスタンスとそれにアタッチされたネットワークインターフェイスとの関係をアタッチメントと呼びます。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 |
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 |
- 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.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 |
c7g.12xlarge |
arm64 |
c7g.16xlarge |
arm64 |
c7g.metal |
arm64 |
c7gd.12xlarge |
arm64 |
c7gd.16xlarge |
arm64 |
c7gd.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 |
- 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 |
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 |
r8g.12xlarge |
arm64 |
r8g.16xlarge |
arm64 |
r8g.24xlarge |
arm64 |
r8g.48xlarge |
arm64 |
r8g.metal-24xl |
arm64 |
r8g.metal-48xl |
arm64 |
u7i-12tb.224xlarge |
x86_64 |
u7in-16tb.224xlarge |
x86_64 |
u7in-24tb.224xlarge |
x86_64 |
u7in-32tb.224xlarge |
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
-
インスタンスタイプ |
アーキテクチャ |
g6.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 |
im4gn.4xlarge |
arm64 |
im4gn.8xlarge |
arm64 |
im4gn.16xlarge |
arm64 |
ENA Express の設定を一覧化して表示する
このセクションでは、AWS Management Console または AWS CLI から ENA Express 情報を一覧化して表示する方法について説明します。詳細については、使用する方法に一致するタブを選択してください。
- Console
-
このタブでは、現在の ENA Express 設定に関する情報を確認する方法と、AWS Management Console でインスタンスタイプのサポートを確認する方法について説明します。
インスタンスタイプのサポートを表示する
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。
-
左のナビゲーションペインで、[Instance types] (インスタンスタイプ) を選択します。
-
インスタンスタイプを選択すると、そのインスタンスの詳細が表示されます。[Instance type] (インスタンスタイプ) のリンクを選択して詳細ページを開くか、リストの左側のチェックボックスを選択してページ下部の詳細ペインで詳細を表示できます。
-
[Networking] タブまたは詳細ページのそのセクションの [ENA Express Support] (ENA Express サポート) に、インスタンスタイプがこの機能をサポートしているかどうかを示す値が true または false と表示されます。
ネットワークインターフェースリストから設定を表示する
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。
-
左側のナビゲーションペインで、[Network Interfaces] (ネットワークインターフェース) を選択します。
-
ネットワークインターフェイスを選択すると、そのインスタンスの詳細が表示されます。[Network interface ID] (ネットワークインターフェース ID) リンクを選択して詳細ページを開くか、リストの左側のチェックボックスを選択してページ下部の詳細ペインで詳細を表示できます。
-
[Details] (詳細) タブまたは詳細ページの [Network interface attachment] (ネットワークインターフェース接続) セクションで、[ENA Express] と [ENA Express UDP] の設定を確認します。
インスタンスから設定を表示する
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。
-
左のナビゲーションペインで、[Instances] (インスタンス) をクリックします。
-
インスタンスを選択すると、そのインスタンスの詳細が表示されます。[Instance ID] (インスタンス ID) リンクを選択して詳細ページを開くことも、リストの左側のチェックボックスを選択してページ下部の詳細ペインに詳細を表示することもできます。
-
[Networking] (ネットワーキング) タブの [Network interfaces] (ネットワークインターフェース) セクションを右にスクロールして [ENA Express] と [ENA Express UDP] の設定を確認します。
- AWS CLI
-
このタブでは、現在の ENA Express 設定に関する情報を確認する方法と、AWS CLI でインスタンスタイプのサポートを確認する方法について説明します。
インスタンスタイプを記述する
特定のインスタンスタイプのインスタンスタイプ設定については、AWS CLI で describe-instance-types コマンドを実行し、インスタンスタイプを次のように置き換えてください。
[ec2-user ~]$
aws ec2 describe-instance-types --instance-types m6i.metal
{
"InstanceTypes": [
{
"InstanceType": "m6i.metal",
"CurrentGeneration": true,
...
},
"NetworkInfo": {
...
"EnaSrdSupported": true
},
...
}
]
}
インスタンスの説明
特定のインスタンスの ENA Express 設定について詳しくは、AWS CLI で describe-instances コマンドを実行してください。例を示します。このコマンド例は、--instance-ids
パラメータで指定された実行中の各インスタンスに接続されているネットワークインターフェイスの ENA Express 設定のリストを返します。
[ec2-user ~]$
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 設定の情報については、describe-network-interfaces コマンドを AWS CLI で次のように実行します。
[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-1234567890abcdef0",
"InstanceOwnerId": "111122223333",
"Status": "attached",
"EnaSrdSpecification": {
"EnaSrdEnabled": true,
"EnaSrdUdpSpecification": {
"EnaSrdUdpEnabled": true
}
}
},
...
"NetworkInterfaceId": "eni-1234567890abcdef0",
"OwnerId": "111122223333",
...
}
]
}
- PowerShell
-
このタブでは、現在の ENA Express 設定に関する情報を確認する方法と、PowerShell を使用してインスタンスタイプのサポートを確認する方法について説明します。
インスタンスタイプを記述する
特定のインスタンスタイプのインスタンスタイプ設定については、Tools for PowerShell で Get-EC2InstanceType Cmdlet コマンドを実行し、インスタンスタイプを次のように置き換えてください。
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
ENA Express が有効になっている場合、値 True
が返されます。
ネットワークインターフェースを記述する
ネットワークインターフェイスの ENA Express 設定の詳細については、Tools for PowerShell で Get-EC2NetworkInterface Cmdlet を次のように実行してください。
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
ENA Express は、対応する EC2 インスタンスタイプに対して、追加のソフトウェアをインストールすることなく設定できます。
このセクションでは、AWS Management Console または AWS CLI から ENA Express を設定する方法について説明します。詳細については、使用する方法に一致するタブを選択してください。
- Console
-
このタブでは、インスタンスにアタッチされているネットワークインターフェースの ENA Express 設定を管理する方法について説明します。
ネットワークインターフェースリストから ENA Express を管理する
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。
-
左側のナビゲーションペインで、[Network Interfaces] (ネットワークインターフェース) を選択します。
-
インスタンスにアタッチされるネットワークインターフェースを指定します。[Network interface ID] (ネットワークインターフェース ID) リンクを選択して詳細ページを開くことも、リストの左側にあるチェックボックスを選択することもできます。
-
ページ右上の [Action] (アクション) メニューから [Manage ENA Express] (ENA Express の管理) を選択します。これにより、選択したネットワークインターフェイス ID と現在の設定が表示された [Manage ENA Express] (ENA Express の管理) ダイアログが開きます。
選択したネットワークインターフェースがインスタンスに接続されていない場合、このアクションはメニューに表示されません。
-
[ENA Express] を使用するには、[Enable] (有効にする) チェックボックスを選択します。
-
ENA Express が有効になっている場合、UDP 設定を構成できます。[ENA Express UDP] を使用するには、[Enable] (有効にする) チェックボックスを選択します。
-
設定を保存するには [Save] (保存) を選択します。
インスタンスリストから ENA Express を管理する
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。
-
左のナビゲーションペインで、[Instances] (インスタンス) をクリックします。
-
管理するインスタンスを選択します。[Instance ID] (インスタンス ID) を選択して詳細ページを開くか、リストの左側にあるチェックボックスを選択します。
-
インスタンスに設定する[Network interface] (ネットワークインターフェイス) を選択します。
-
ページ右上の [Action] (アクション) メニューから [Manage ENA Express] (ENA Express の管理) を選択します。
-
インスタンスにアタッチされているネットワークインターフェイスに ENA Express を設定するには、[Network interface] (ネットワークインターフェイス) リストから選択します。
-
選択したネットワークインターフェースアタッチメントに [ENA Express] を使用するには、[Enable] (有効にする) チェックボックスを選択します。
-
ENA Express が有効になっている場合、UDP 設定を構成できます。[ENA Express UDP] を使用するには、[Enable] (有効にする) チェックボックスを選択します。
-
設定を保存するには [Save] (保存) を選択します。
ネットワークインターフェースを EC2 インスタンスにアタッチする際に ENA Express を設定する
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。
-
左側のナビゲーションペインで、[Network Interfaces] (ネットワークインターフェース) を選択します。
-
インスタンスにアタッチされていないネットワークインターフェイスを選択します ([Status] (ステータス) が [Available] (利用可) のもの)。[Network interface ID] (ネットワークインターフェース ID) リンクを選択して詳細ページを開くことも、リストの左側にあるチェックボックスを選択することもできます。
-
アタッチする [Instance] (インスタンス) を選択します。
-
ネットワークインターフェースをインスタンスに接続した後に [ENA Express] を使用するには、[Enable] (有効にする) チェックボックスを選択します。
-
ENA Express が有効になっている場合、UDP 設定を構成できます。[ENA Express UDP] を使用するには、[Enable] (有効にする) チェックボックスを選択します。
-
ネットワークインターフェイスをインスタンスにアタッチし、ENA Express 設定を保存するには、[Attach] (アタッチ) を選択します。
- AWS CLI
-
このタブでは、AWS CLI で ENA Express の設定を行う方法について説明します。
ネットワークインターフェースをアタッチする際の ENA Express の設定
ネットワークインターフェイスをインスタンスに接続するときに ENA Express を設定するには、次の例に示すように AWS CLI で、attach-network-interface コマンドを実行します。
例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない
この例では、EnaSrdEnabled
を true に設定し、EnaSrdUdpEnabled
をデフォルトで 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"
}
例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する
この例では、EnaSrdEnabled
と EnaSrdUdpEnabled
の両方を 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"
}
ネットワークインターフェースアタッチメントの ENA Express 設定を更新する
インスタンスにアタッチされているネットワークインターフェイスの ENA Express 設定を更新するには、次の例に示すように、AWS CLI で modify-network-interface-attribute コマンドを実行します。
例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない
この例では EnaSrdEnabled
を true に設定し、以前に設定したことがない場合は EnaSrdUdpEnabled
をデフォルトで false になるよう設定します。
[ec2-user ~]$
aws ec2 modify-network-interface-attribute --network-interface-id eni-0123f4567890a1b23
--ena-srd-specification 'EnaSrdEnabled=true'
例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する
この例では、EnaSrdEnabled
と EnaSrdUdpEnabled
の両方を true に設定します。
[ec2-user ~]$
aws ec2 modify-network-interface-attribute --network-interface-id eni-0123f4567890a1b23
--ena-srd-specification 'EnaSrdEnabled=true,EnaSrdUdpSpecification={EnaSrdUdpEnabled=true}'
例 3: UDP トラフィックでの ENA Express の使用を停止する
この例では、EnaSrdUdpEnabled
を false に設定しています。
[ec2-user ~]$
aws ec2 modify-network-interface-attribute --network-interface-id eni-0123f4567890a1b23
--ena-srd-specification 'EnaSrdUdpSpecification={EnaSrdUdpEnabled=false}'
- PowerShell
-
このタブでは、PowerShell を使用して ENA Express の設定を行う方法について説明します。
ネットワークインターフェースをアタッチする際の ENA Express の設定
ネットワークインターフェイスの ENA Express 設定を構成するには、次の例に示すように、Tools for PowerShell で Add-EC2NetworkInterface Cmdlet を実行します。
例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない
この例では、EnaSrdEnabled
を true に設定し、EnaSrdUdpEnabled
をデフォルトで false になるように設定します。
PS C:\>
Add-EC2NetworkInterface `
-NetworkInterfaceId eni-0123f4567890a1b23
`
-InstanceId i-0f1a234b5cd67e890
`
-DeviceIndex 1
`
-EnaSrdSpecification_EnaSrdEnabled $true
eni-attach-012c3d45e678f9012
例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する
この例では、EnaSrdEnabled
と EnaSrdUdpEnabled
の両方を true に設定します。
PS C:\>
Add-EC2NetworkInterface `
-NetworkInterfaceId eni-0123f4567890a1b23
`
-InstanceId i-0f1a234b5cd67e890
`
-DeviceIndex 1
`
-EnaSrdSpecification_EnaSrdEnabled $true `
-EnaSrdUdpSpecification_EnaSrdUdpEnabled $true
eni-attach-012c3d45e678f9012
ネットワークインターフェースアタッチメントの ENA Express 設定を更新する
インスタンスにアタッチされているネットワークインターフェイスの ENA Express 設定を更新するには、次の例に示すように、Tools for PowerShell で Add-EC2NetworkInterface Cmdlet コマンドを実行します。
例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない
この例では EnaSrdEnabled
を true に設定し、以前に設定したことがない場合は EnaSrdUdpEnabled
をデフォルトで false になるよう設定します。
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
例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する
この例では、EnaSrdEnabled
と EnaSrdUdpEnabled
の両方を 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
例 3: UDP トラフィックでの ENA Express の使用を停止する
この例では、EnaSrdUdpEnabled
を 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
AWS Management Console からインスタンスを起動する際、次の方法のいずれかを使用して AMI に ENA Express を設定できます。
-
インスタンス起動ウィザードでのインスタンスの起動時に、AMI に ENA Express を設定できます。設定の詳細については、インスタンス起動ウィザードの ネットワーク設定、「Advanced network configuration」を参照してください。
-
起動テンプレートの使用時に、AMI に ENA Express を設定できます。起動テンプレートの設定についての詳細は、起動テンプレートの ネットワーク設定、「Advanced network configuration」を参照してください。
ENA Express のパフォーマンスをモニタリングする
送信側インスタンスと受信側インスタンスの両方で、ネットワークインターフェースアタッチメントの ENA Express を有効にしたら、ENA Express メトリックを使用して、SRD テクノロジーによるパフォーマンスの向上をインスタンスが最大限に活用できるようにします。
ENA Express 用にフィルタリングされたメトリクスのリストを表示するには、ネットワークインターフェースで以下の ethtool コマンドを実行します (ここでは eth0
として表示されています)。
[ec2-user ~]$
ethtool -S eth0
| grep ena_srd
NIC 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
インスタンスの ENA Express 設定を確認する
インスタンスのネットワークインターフェースアタッチメントの現在の ENA Express 設定を確認するには、ethtool
コマンドを実行して ENA Express メトリクスを一覧表示し、ena_srd_mode
メトリクスの値を書き留めます。値は次のとおりです。
-
0
= ENA Express がオフ、UDP がオフ
-
1
= ENA Express がオン、UDP がオフ
-
2
= ENA Express がオフ、UDP がオン
これは、ENA Express が最初に有効になっていて、UDP がそれを使用するように設定されている場合にのみ発生します。UDP トラフィックの以前の値は保持されます。
-
3
= ENA Express がオン、UDP がオン
インスタンスのネットワークインターフェイスアタッチメントで ENA Express を有効にした後、送信側インスタンスは受信側インスタンスとの通信を開始し、SRD は ENA Express が送信側インスタンスと受信側インスタンスの両方で動作しているかどうかを検出します。ENA Express が動作している場合、通信に SRD 送信を使用できます。ENA Express が動作していない場合、通信は標準の ENA 送信にフォールバックします。パケット送信に SRD が使用されているかどうかを確認するには、対象パケットの数 (ena_srd_eligible_tx_pkts
メトリクス) と特定の期間に送信された SRD パケットの数 (ena_srd_tx_pkts
メトリクス) を比較します。
ena_srd_resource_utilization
メトリクスを使用して SRD リソースの使用率をモニタリングできます。インスタンスで SRD リソースが使い果たされそうになっていたら、インスタンスをスケールアウトする時期であると判断できます。
ENA Express のメトリクスに関する詳細は、「ENA Express のメトリクス」を参照してください。
ENA Express 設定のパフォーマンスを調整する
Linux インスタンス構成で ENA Express の最適なパフォーマンスを確認するには、Amazon GitHub リポジトリにある次のスクリプトを実行します。
https://github.com/amzn/amzn-ec2-ena-utilities/blob/main/ena-express/check-ena-express-settings.sh
このスクリプトは一連のテストを実行し、推奨設定変更および必須設定変更を提案します。