EC2 インスタンスでの ENA 設定のネットワークパフォーマンスのモニタリング - Amazon Elastic Compute Cloud

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 以降をインストールします。インストールされているバージョンを確認するには、次のようにデバイスマネージャーを使用します。

    1. devmgmt.msc を実行して、デバイスマネージャを開きます。

    2. [Network Adapters] を展開します。

    3. [Amazon Elastic Network Adapter]、[Properties] を選択します。

    4. [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 許容量に達する前にインスタンスが確立できる接続トラッキング数。

Nitro ベースのインスタンスのみ

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 のドライバーパッケージにインストールスクリプトを使用した場合、マニフェストは既にインストールされています。マニフェストを手動でインストールするには、次の手順を実行します。

  1. 次のコマンドを使用して、既存のマニフェストを削除します。

    unlodctr /m:EnaPerfCounters.man
  2. マニフェストファイル EnaPerfCounters.man をドライバインストールパッケージから %SystemRoot%\System32\drivers にコピーします。

  3. 次のコマンドを使用して、新しいマニフェストをインストールします。

    lodctr /m:EnaPerfCounters.man
パフォーマンスモニタを使用してメトリクスを表示するには
  1. パフォーマンスモニタを開きます。

  2. Ctrl+N キーを押して、新しいカウンターを追加します。

  3. リストから [ENA Packets Shaping] を選択します。

  4. モニタリングするインスタンスを選択し、[Add] を選択します。

  5. [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_srd NIC 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