EC2 インスタンスでの ENA 設定のネットワークパフォーマンスのモニタリング
Elastic Network Adapter (ENA) ドライバーは、有効になっているインスタンスからネットワークパフォーマンスメトリクスを公開します。このようなメトリクスを使用して、インスタンスのパフォーマンスの問題のトラブルシューティング、ワークロードに適したインスタンスサイズの選択、スケーリングアクティビティの事前計画、およびアプリケーションのベンチマークにより、メトリクスがインスタンスで利用できるパフォーマンスを最大化するかどうかを判断できます。
Amazon EC2 は、インスタンスレベルでネットワーク最大値を定義し、インスタンスサイズ全体で一貫したネットワークパフォーマンスを含め、質の高いネットワークエクスペリエンスを実現します。AWS は、各インスタンスに次の最大値を提供します。
-
帯域幅機能 - 各 EC2 インスタンスには、インスタンスタイプとサイズに基づいて、集計したインバウンドトラフィックとアウトバウンドトラフィックの最大帯域幅があります。インスタンスの一部は、ネットワーク I/O クレジットメカニズムを使用して、平均帯域幅使用率に基づいて、ネットワーク帯域幅を割り当てます。また、Amazon EC2 には、AWS Direct Connect およびインターネットへのトラフィックに最大帯域幅があります。詳細については、「Amazon EC2 インスタンスのネットワーク帯域幅」を参照してください。
-
Packet-per-second (PPS) パフォーマンス - 各 EC2 インスタンスには、インスタンスタイプとサイズに基づいて、最大 PPS パフォーマンスがあります。
-
追跡された接続 - セキュリティグループは、確立された各接続を追跡し、リターンパケットが期待どおりに配信されることを確認します。インスタンスごとに追跡できる接続の最大数があります。詳細については、「Amazon EC2 セキュリティグループの接続の追跡」を参照してください。
-
リンクローカルサービスアクセス - Amazon EC2 は、DNS サービス、インスタンスメタデータサービス、Amazon Time Sync Service などのサービスへのトラフィックに対して、ネットワークインターフェイスごとに最大 PPS を提供します。
インスタンスのネットワークトラフィックが最大値を超えると、AWS はネットワークパケットをキューイングしてから破棄することによって、最大値を超えるトラフィックを調整します。ネットワークパフォーマンスメトリクスを使用して、トラフィックが最大値を超えるタイミングをモニタリングできます。これらのメトリクスは、ネットワークトラフィックへの影響、およびネットワークパフォーマンスの問題の可能性をリアルタイムで通知します。
内容
要件
Linux インスタンス
-
ENA ドライババージョン 2.2.10 以降をインストールします。インストールしたバージョンを検証するには、ethtool コマンドを使用します。次の例では、バージョンは最小要件を満たしています。
[ec2-user ~]$
ethtool -i eth0 | grep version
version: 2.2.10
ENA ドライバーをアップグレードするには、拡張ネットワーキングを参照してください。
-
これらのメトリクスを Amazon CloudWatch にインポートするには、CloudWatch エージェントをインストールします。詳細については、Amazon CloudWatch ユーザーガイドのネットワークパフォーマンスメトリクスの収集を参照してください。
-
conntrack_allowance_available
メトリクスをサポートするには、ENA ドライバーのバージョン 2.8.1 をインストールします。
Windows インスタンス
-
ENA ドライバーバージョン 2.2.2 以降をインストールします。インストールされているバージョンを確認するには、次のようにデバイスマネージャーを使用します。
-
devmgmt.msc
を実行して、デバイスマネージャを開きます。 -
[Network Adapters] を展開します。
-
[Amazon Elastic Network Adapter]、[Properties] を選択します。
-
[Driver] タブで、[Driver Version] を探します。
ENA ドライバーをアップグレードするには、拡張ネットワーキングを参照してください。
-
-
これらのメトリクスを Amazon CloudWatch にインポートするには、CloudWatch エージェントをインストールします。詳細については、Amazon CloudWatch ユーザーガイドの高度なネットワークメトリクスの収集を参照してください。
ENA ドライバーのメトリクス
ENA ドライバーは、次のメトリクスをリアルタイムでインスタンスに配信します。前回のドライバーのリセット以降に、各ネットワークインターフェイスでキューまたはドロップされたパケットの累積数を示します。
メトリクス | 説明 | 以下でサポートされます |
---|---|---|
bw_in_allowance_exceeded |
インバウンド集計帯域幅がインスタンスの最大値を超えたためにキューまたはドロップされたパケットの数。 |
すべてのインスタンスタイプ |
bw_out_allowance_exceeded |
アウトバウンド集計帯域幅がインスタンスの最大値を超えたためにキューまたはドロップされたパケットの数。 |
すべてのインスタンスタイプ |
conntrack_allowance_exceeded |
接続トラッキングがインスタンスの最大数を超え、新しい接続を確立できなかったためにドロップされたパケットの数。これにより、インスタンスとの間で送受信されるトラフィックのパケット損失が発生する可能性があります。 |
すべてのインスタンスタイプ |
conntrack_allowance_available |
そのインスタンスタイプの Connections Tracked 許容量に達する前にインスタンスが確立できる接続トラッキング数。 | |
linklocal_allowance_exceeded |
ローカルプロキシサービスへのトラフィックの PPS がネットワークインターフェイスの最大値を超えたためにドロップされたパケットの数。これは、DNS サービス、インスタンスメタデータサービス、および Amazon Time Sync Service へのトラフィックに影響します。 |
すべてのインスタンスタイプ |
pps_allowance_exceeded |
双方向 PPS がインスタンスの最大値を超えたためにキューまたはドロップされたパケットの数。この制限には、ENI あたり 1024 PPS を超えるエグレスフラグメントドロップもカウントされます。 |
すべてのインスタンスタイプ |
/ インスタンスのネットワークパフォーマンスメトリクスを表示します。
使用する手順は、インスタンスのオペレーティングシステムによって異なります。
メトリクスをお気に入りのツールに公開して、メトリクスデータを視覚化できます。例えば、CloudWatch エージェントを使用してメトリックスを Amazon CloudWatch に公開できます。エージェントにより、個々のメトリクスを選択し、公開を制御できます。
ethtool を使用して、次のように eth0 などの各ネットワークインターフェイスのメトリクスを取得することもできます。
[ec2-user ~]$
ethtool -S
eth0
bw_in_allowance_exceeded: 0 bw_out_allowance_exceeded: 0 pps_allowance_exceeded: 0 conntrack_allowance_exceeded: 0 linklocal_allowance_exceeded: 0 conntrack_allowance_available: 136812
Windows パフォーマンスカウンターの任意のコンシューマーを使用して、メトリクスを表示できます。EnaPerfCounters マニフェストに従って、データを解析できます。これは、パフォーマンスカウンタープロバイダーとそのカウンターセットを定義する XML ファイルです。
マニフェストをインストールするには
ENA ドライバー 2.2.2 以降を含む AMI を使用してインスタンスを起動した場合、または ENA ドライバー 2.2.2 のドライバーパッケージにインストールスクリプトを使用した場合、マニフェストは既にインストールされています。マニフェストを手動でインストールするには、次の手順を実行します。
-
次のコマンドを使用して、既存のマニフェストを削除します。
unlodctr /m:EnaPerfCounters.man
-
マニフェストファイル
EnaPerfCounters.man
をドライバインストールパッケージから%SystemRoot%\System32\drivers
にコピーします。 -
次のコマンドを使用して、新しいマニフェストをインストールします。
lodctr /m:EnaPerfCounters.man
パフォーマンスモニタを使用してメトリクスを表示するには
-
パフォーマンスモニタを開きます。
-
Ctrl+N キーを押して、新しいカウンターを追加します。
-
リストから [ENA Packets Shaping] を選択します。
-
モニタリングするインスタンスを選択し、[Add] を選択します。
-
[OK] を選択します。
ENA Express のメトリクス
ENA Express は、AWS Scalable Reliable Datagram (SRD) テクノロジーを搭載しています。SRD は、動的ルーティングを使用してスループットを向上させ、テールレイテンシーを最小限に抑える高性能なネットワークトランスポートプロトコルです。送信側と受信側の両方のインスタンスでネットワークインターフェイスをアタッチできるように ENA Express を有効にすると、インスタンスが SRD テクノロジーで実現されるパフォーマンス向上を全面的に享受できることを、ENA Express メトリクスを使用して容易に確認できます。例:
-
より多くの SRD 接続を確立するのに十分な容量があることを確認するために、リソースを評価します。
-
対象となる送信パケットで SRD を使用できない原因となる潜在的な問題がある箇所を特定します。
-
インスタンスに SRD を使用する送信トラフィックの割合を計算します。
-
インスタンスに SRD を使用する受信トラフィックの割合を計算します。
注記
メトリクスを生成するには、ドライバーバージョン 2.8 以降を使用してください。
ENA Express 用にフィルタリングされた Linux インスタンスのメトリクスのリストを表示するには、ネットワークインターフェイスで以下の ethtool コマンドを実行します (ここでは eth0
として表示されています)。ena_srd_mode
メトリクスの値に注意してください。
[ec2-user ~]$
ethtool -S
eth0
| grep ena_srdNIC statistics: ena_srd_mode: 1 ena_srd_tx_pkts: 0 ena_srd_eligible_tx_pkts: 0 ena_srd_rx_pkts: 0 ena_srd_resource_utilization: 0
次のメトリクスは、ENA Express が有効になっているすべてのインスタンスで利用できます。
- ena_srd_mode
-
ENA Express のどの機能が有効になっているかを説明します。値は次のとおりです。
-
0
= ENA Express がオフ、UDP がオフ -
1
= ENA Express がオン、UDP がオフ -
2
= ENA Express がオフ、UDP がオン注記
これは、ENA Express が最初に有効になっていて、UDP がそれを使用するように設定されている場合にのみ発生します。UDP トラフィックの以前の値は保持されます。
-
3
= ENA Express がオン、UDP がオン
-
- ena_srd_eligible_tx_pkts
-
ネットワークの数。次のとおりです。
-
送信側と受信側の両方のインスタンスタイプがサポートされています。詳細については「ENA Express でサポートされるインスタンスタイプ」の表を参照してください。
-
送信側と受信側の両方のインスタンスに ENA Express が設定されている必要があります。
-
送信側と受信側のインスタンスは同じアベイラビリティゾーンで実行する必要があります。
-
インスタンス間のネットワークパスには、ミドルウェアボックスを含めないようにしてください。ENA Express は現在、ミドルウェアボックスをサポートしていません。
注記
ENA Express の適格性メトリクスには、ソースと送信先の要件、および 2 つのエンドポイント間のネットワークが含まれます。対象となるパケットは、既にカウントされた後でも失格となる可能性があります。例えば、対象となるパケットが最大送信単位 (MTU) の制限を超えている場合、そのパケットはカウンターに適格として反映されますが、標準の ENA 送信にフォールバックします。
-
- ena_srd_tx_pkts
-
一定期間内に送信した SRD パケット数。
- ena_srd_rx_pkts
-
一定期間内に受信した SRD パケット数。
- ena_srd_resource_utilization
-
インスタンスが消費した同時 SRD 接続の最大許容メモリ使用量の割合。
パケット送信に SRD が使用されているかどうかを確認するには、対象パケットの数 (ena_srd_eligible_tx_pkts
メトリクス) と特定の期間に送信された SRD パケットの数 (ena_srd_tx_pkts
メトリクス) を比較します。
エグレストラフィック (送信パケット)
エグレストラフィックが想定どおりに SRD を使用するようにするには、SRD 送信に適格なパケットの数 (ena_srd_eligible_tx_pkts
) と、特定の期間に送信された SRD パケットの数 (ena_srd_tx_pkts
) を比較します。
使用可能なパケット数と送信された SRD パケット数の差が大きい場合、リソース使用率の問題が原因である可能性が高いです。インスタンスにアタッチされたネットワークカードが最大リソースを使い果たしている場合、またはパケットが MTU 制限を超えている場合、適格なパケットでも SRD 経由で送信できないため、標準の ENA 送信にフォールバックする必要があります。ライブ移行中やライブサーバー更新中にもパケットがこのギャップに陥る可能性があります。根本原因を特定するには、追加のトラブルシューティングが必要です。
注記
適格なパケット数と SRD パケット数のわずかな違いは無視してかまいません。これは、例えば、インスタンスが SRD トラフィック用に別のインスタンスへの接続を確立した場合に発生する可能性があります。
特定の期間における総エグレストラフィックの何パーセントで SRD が使用されているかを調べるには、送信された SRD パケット数 (ena_srd_tx_pkts
) と、その期間にインスタンスに送信されたパケットの総数 (NetworkPacketOut
) を比較します。
イングレストラフィック (受信パケット)
総イングレストラフィックの何パーセントで SRD が使用されているかを調べるには、特定の期間に受信した SRD パケット数 (ena_srd_rx_pkts
) と、その期間にインスタンスで受信されたパケットの総数 (NetworkPacketIn
) を比較します。
リソース使用率
リソース使用率は、1 つのインスタンスが一定時間に保持できる SRD の同時接続数に基づいています。リソース使用率メトリクス (ena_srd_resource_utilization
) は、インスタンスの現在の使用率を追跡します。使用率が 100% に近づくと、パフォーマンスの問題が発生することが予想されます。ENA Express は SRD から標準の ENA 送信にフォールバックし、パケットドロップの可能性が高まります。リソース使用率が高い場合は、ネットワークパフォーマンスを向上させるためにインスタンスをスケールアウトする時期が来たと判断できます。
注記
インスタンスのネットワークトラフィックが最大値を超えると、AWS はネットワークパケットをキューイングしてから破棄することによって、最大値を超えるトラフィックを調整します。
永続的
エグレスメトリクスとイングレスメトリクスは、インスタンスで ENA Express が有効になっている間に発生します。ENA Express が非アクティブ化されるとメトリクスの発生しなくなりますが、インスタンスがまだ実行されている限り持続します。インスタンスが再起動または終了した場合、またはネットワークインターフェイスがインスタンスから切り離されると、メトリクスはリセットされます。
ENA 用の DPDK ドライバーを備えたネットワークパフォーマンスメトリクス
ENA ドライババージョン 2.2.0 以降では、ネットワークメトリクスのレポートがサポートされています。DPDK 20.11 には ENA ドライバー 2.2.0 が含まれており、この機能をサポートする最初の DPDK バージョンです。
サンプルアプリケーションを使用して、DPDK 統計を表示できます。サンプルアプリケーションの対話型バージョンを開始するには、次のコマンドを実行します。
./app/dpdk-testpmd -- -i
この対話型セッションでは、コマンドを入力してポートの拡張統計情報を取得できます。次のコマンド例では、ポート 0 の統計情報を取得します。
show port xstats 0
次に、DPDK サンプルアプリケーションとの対話型セッションの例を示します。
[root@ip-192.0.2.0 build]# ./app/dpdk-testpmd -- -i EAL: Detected 4 lcore(s) EAL: Detected 1 NUMA nodes EAL: Multi-process socket /var/run/dpdk/rte/mp_socket EAL: Selected IOVA mode 'PA' EAL: Probing VFIO support... EAL: Invalid NUMA socket, default to 0 EAL: Invalid NUMA socket, default to 0 EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket 0) EAL: No legacy callbacks, legacy socket not created Interactive-mode selected Port 0: link state change event testpmd: create a new mbuf pool <mb_pool_0>: n=171456, size=2176, socket=0 testpmd: preferred mempool ops selected: ring_mp_mc Warning! port-topology=paired and odd forward ports number, the last port will pair with itself. Configuring Port 0 (socket 0) Port 0: 02:C7:17:A2:60:B1 Checking link statuses... Done Error during enabling promiscuous mode for port 0: Operation not supported - ignore testpmd> show port xstats 0 ###### NIC extended statistics for port 0 rx_good_packets: 0 tx_good_packets: 0 rx_good_bytes: 0 tx_good_bytes: 0 rx_missed_errors: 0 rx_errors: 0 tx_errors: 0 rx_mbuf_allocation_errors: 0 rx_q0_packets: 0 rx_q0_bytes: 0 rx_q0_errors: 0 tx_q0_packets: 0 tx_q0_bytes: 0 wd_expired: 0 dev_start: 1 dev_stop: 0 tx_drops: 0 bw_in_allowance_exceeded: 0 bw_out_allowance_exceeded: 0 pps_allowance_exceeded: 0 conntrack_allowance_exceeded: 0 linklocal_allowance_exceeded: 0 rx_q0_cnt: 0 rx_q0_bytes: 0 rx_q0_refill_partial: 0 rx_q0_bad_csum: 0 rx_q0_mbuf_alloc_fail: 0 rx_q0_bad_desc_num: 0 rx_q0_bad_req_id: 0 tx_q0_cnt: 0 tx_q0_bytes: 0 tx_q0_prepare_ctx_err: 0 tx_q0_linearize: 0 tx_q0_linearize_failed: 0 tx_q0_tx_poll: 0 tx_q0_doorbells: 0 tx_q0_bad_req_id: 0 tx_q0_available_desc: 1023 testpmd>
サンプルアプリケーションとその使用による拡張統計情報の取得の詳細については、DPDK ドキュメントのTestpmd アプリケーションユーザーガイド
FreeBSD を実行しているインスタンスのメトリクス
ENA FreeBSD ドライバーのバージョン 2.3.0 以降では、FreeBSD を実行しているインスタンスでのネットワークパフォーマンスメトリクスの収集をサポートしています。FreeBSD メトリクスの収集を有効にするには、次のコマンドを入力し、[間隔
]を 1~3600 の値に設定します。FreeBSD メトリクスを収集する頻度を秒単位で特定します。
sysctl dev.ena.
network_interface
.eni_metrics.sample_interval=interval
例えば、次のコマンドは、ネットワークインターフェイス 1 の FreeBSD メトリクスを 10 秒ごとに収集するようにドライバーを設定します。
sysctl dev.ena.1.eni_metrics.sample_interval=10
FreeBSD メトリクスの収集をオフにするには、上記のコマンドを実行し、[間隔
]を 0
に指定します。
FreeBSD メトリクスの収集を有効にすると、次のコマンドを実行することで、収集されたメトリクスの最新セットを取得できます。
sysctl dev.ena.
network_interface
.eni_metrics