

# EC2 インスタンスでの ENA 設定のネットワークパフォーマンスのモニタリング
<a name="monitoring-network-performance-ena"></a>

Elastic Network Adapter (ENA) ドライバーは、有効になっているインスタンスからネットワークパフォーマンスメトリクスを公開します。このようなメトリクスを使用して、インスタンスのパフォーマンスの問題のトラブルシューティング、ワークロードに適したインスタンスサイズの選択、スケーリングアクティビティの事前計画、およびアプリケーションのベンチマークにより、メトリクスがインスタンスで利用できるパフォーマンスを最大化するかどうかを判断できます。

Amazon EC2 は、インスタンスレベルでネットワーク最大値を定義し、インスタンスサイズ全体で一貫したネットワークパフォーマンスを含め、質の高いネットワークエクスペリエンスを実現します。AWS は、各インスタンスに次の最大値を提供します。
+ **帯域幅機能** - 各 EC2 インスタンスには、インスタンスタイプとサイズに基づいて、集計したインバウンドトラフィックとアウトバウンドトラフィックの最大帯域幅があります。インスタンスの一部は、ネットワーク I/O クレジットメカニズムを使用して、平均帯域幅使用率に基づいて、ネットワーク帯域幅を割り当てます。また、Amazon EC2 には、Direct Connect およびインターネットへのトラフィックに最大帯域幅があります。詳細については、「[Amazon EC2 インスタンスのネットワーク帯域幅](ec2-instance-network-bandwidth.md)」を参照してください。
+ **Packet-per-second (PPS) パフォーマンス** - 各 EC2 インスタンスには、インスタンスタイプとサイズに基づいて、最大 PPS パフォーマンスがあります。
+ **追跡された接続** - セキュリティグループは、確立された各接続を追跡し、リターンパケットが期待どおりに配信されることを確認します。インスタンスごとに追跡できる接続の最大数があります。詳細については、[Amazon EC2 セキュリティグループの接続の追跡](security-group-connection-tracking.md)を参照してください。
+ **リンクローカルサービスアクセス** - Amazon EC2 は、Amazon DNS サービス、インスタンスメタデータサービス、Amazon Time Sync Service などのローカルプロキシサービスへのトラフィックに対して、ネットワークインターフェイスごとに最大 PPS を提供します。

インスタンスのネットワークトラフィックが最大値を超えると、AWS はネットワークパケットをキューイングしてから破棄することによって、最大値を超えるトラフィックを調整します。ネットワークパフォーマンスメトリクスを使用して、トラフィックが最大値を超えるタイミングをモニタリングできます。これらのメトリクスは、ネットワークトラフィックへの影響、およびネットワークパフォーマンスの問題の可能性をリアルタイムで通知します。

**Topics**
+ [要件](#network-performance-metrics-requirements)
+ [ENA ドライバーのメトリクス](#network-performance-metrics)
+ [/ インスタンスのネットワークパフォーマンスメトリクスを表示します。](#view-network-performance-metrics)
+ [ENA Express のメトリクス](#network-performance-metrics-ena-express)
+ [ENA 用の DPDK ドライバーを備えたネットワークパフォーマンスメトリクス](#network-performance-metrics-dpdk)
+ [FreeBSD を実行しているインスタンスのメトリクス](#network-performance-metrics-freebsd)

## 要件
<a name="network-performance-metrics-requirements"></a>

**Linux インスタンス**
+ ENA ドライババージョン 2.2.10 以降をインストールします。インストールしたバージョンを検証するには、**ethtool** コマンドを使用します。次の例では、バージョンは最小要件を満たしています。

  ```
  [ec2-user ~]$ ethtool -i eth0 | grep version
  version: 2.2.10
  ```

  ENA ドライバーをアップグレードするには、[拡張ネットワーキング](enhanced-networking-ena.md)を参照してください。
+ これらのメトリクスを Amazon CloudWatch にインポートするには、CloudWatch エージェントをインストールします。詳細については、*Amazon CloudWatch ユーザーガイド*の[ネットワークパフォーマンスメトリクスの収集](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-network-performance.html)を参照してください。
+ `conntrack_allowance_available` メトリクスをサポートするには、ENA ドライバーのバージョン 2.8.1 以降をインストールします。
+ エグレスフラグメント PPS の制限である 1024 を上書きするには、ENA ドライバーのバージョン 2.13.3 以降をインストールします。

**Windows インスタンス**
+ ENA ドライバーバージョン 2.2.2 以降をインストールします。インストールされているバージョンを確認するには、次のようにデバイスマネージャーを使用します。

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

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

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

  1. [**Driver**] タブで、[**Driver Version**] を探します。

  ENA ドライバーをアップグレードするには、[拡張ネットワーキング](enhanced-networking-ena.md)を参照してください。
+ これらのメトリクスを Amazon CloudWatch にインポートするには、CloudWatch エージェントをインストールします。詳細については、*Amazon CloudWatch ユーザーガイド*の[高度なネットワークメトリクスの収集](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-network-performance.html)を参照してください。

## ENA ドライバーのメトリクス
<a name="network-performance-metrics"></a>

ENA ドライバーは、次のメトリクスをリアルタイムでインスタンスに配信します。前回のドライバーのリセット以降に、各ネットワークインターフェイスでキューまたはドロップされたパケットの累積数を示します。


| メトリクス | 説明 | 以下でサポートされます | 
| --- | --- | --- | 
| bw\$1in\$1allowance\$1exceeded |  インバウンド集計帯域幅がインスタンスの最大値を超えたためにキューまたはドロップされたパケットの数。  | すべてのインスタンスタイプ | 
| bw\$1out\$1allowance\$1exceeded |  アウトバウンド集計帯域幅がインスタンスの最大値を超えたためにキューまたはドロップされたパケットの数。  | すべてのインスタンスタイプ | 
| conntrack\$1allowance\$1exceeded |  接続トラッキングがインスタンスの最大数を超え、新しい接続を確立できなかったためにドロップされたパケットの数。これにより、インスタンスとの間で送受信されるトラフィックのパケット損失が発生する可能性があります。  | すべてのインスタンスタイプ | 
| conntrack\$1allowance\$1available | そのインスタンスタイプの Connections Tracked 許容量に達する前にインスタンスが確立できる接続トラッキング数。 | [Nitro ベースのインスタンス](instance-types.md#instance-hypervisor-type)のみ  | 
| linklocal\$1allowance\$1exceeded |  ローカルプロキシサービスへのトラフィックの PPS がネットワークインターフェイスの最大値を超えたためにドロップされたパケットの数。これは、Amazon DNS サービス、インスタンスメタデータサービス、および Amazon Time Sync Service へのトラフィックに影響しますが、カスタム DNS リゾルバーへのトラフィックには影響しません。  | すべてのインスタンスタイプ | 
| pps\$1allowance\$1exceeded |  双方向 PPS がインスタンスの最大値を超えたためにキューまたはドロップされたパケットの数。\$1  | すべてのインスタンスタイプ | 

\$1 ENA Linux ドライバーのバージョン 2.13.3 以降では、フラグメントプロキシモードの設定によっては、この制限にネットワークインターフェイスの 1024 PPS を超えるエグレスフラグメントドロップが含まれる場合があります。Linux ドライバーでフラグメントプロキシモードが有効になっている場合、エグレスフラグメントドロップは、通常であれば適用される 1024 PPS の制限を回避し、標準の PPS 許容値内でカウントされます。フラグメントプロキシモードはデフォルトで無効になっています。

## / インスタンスのネットワークパフォーマンスメトリクスを表示します。
<a name="view-network-performance-metrics"></a>

使用する手順は、インスタンスのオペレーティングシステムによって異なります。

### Linux インスタンス
<a name="view-network-performance-metrics-linux"></a>

メトリクスをお気に入りのツールに公開して、メトリクスデータを視覚化できます。例えば、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 インスタンス
<a name="view-network-performance-metrics-windows"></a>

Windows パフォーマンスカウンターの任意のコンシューマーを使用して、メトリクスを表示できます。EnaPerfCounters マニフェストに従って、データを解析できます。これは、パフォーマンスカウンタープロバイダーとそのカウンターセットを定義する XML ファイルです。

**マニフェストをインストールするには**

ENA ドライバー 2.2.2 以降を含む AMI を使用してインスタンスを起動した場合、または ENA ドライバー 2.2.2 のドライバーパッケージにインストールスクリプトを使用した場合、マニフェストは既にインストールされています。マニフェストを手動でインストールするには、次の手順を実行します。

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

   ```
   unlodctr /m:EnaPerfCounters.man
   ```

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

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

   ```
   lodctr /m:EnaPerfCounters.man
   ```

**パフォーマンスモニタを使用してメトリクスを表示するには**

1. パフォーマンスモニタを開きます。

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

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

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

1. [**OK**] を選択してください。

## ENA Express のメトリクス
<a name="network-performance-metrics-ena-express"></a>

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\$1srd\$1mode**  
ENA Express のどの機能が有効になっているかを説明します。値は次のとおりです。  
+ `0` = ENA Express がオフ、UDP がオフ
+ `1` = ENA Express がオン、UDP がオフ
+ `2` = ENA Express がオフ、UDP がオン
**注記**  
これは、ENA Express が最初に有効になっていて、UDP がそれを使用するように設定されている場合にのみ発生します。UDP トラフィックの以前の値は保持されます。
+ `3` = ENA Express がオン、UDP がオン

**ena\$1srd\$1eligible\$1tx\$1pkts**  
ネットワークの数。次のとおりです。  
+ 送信側と受信側の両方のインスタンスタイプがサポートされています。詳細については「[ENA Express でサポートされるインスタンスタイプ](ena-express.md#ena-express-supported-instance-types)」の表を参照してください。
+ 送信側と受信側の両方のインスタンスに ENA Express が設定されている必要があります。
+ 送信側と受信側のインスタンスは同じアベイラビリティゾーンで実行する必要があります。
+ インスタンス間のネットワークパスには、ミドルウェアボックスを含めないようにしてください。ENA Express は現在、ミドルウェアボックスをサポートしていません。
ENA Express の適格性メトリクスには、ソースと送信先の要件、および 2 つのエンドポイント間のネットワークが含まれます。対象となるパケットは、既にカウントされた後でも失格となる可能性があります。例えば、対象となるパケットが最大送信単位 (MTU) の制限を超えている場合、そのパケットはカウンターに適格として反映されますが、標準の ENA 送信にフォールバックします。

**ena\$1srd\$1tx\$1pkts**  
一定期間内に送信した SRD パケット数。

**ena\$1srd\$1rx\$1pkts**  
一定期間内に受信した SRD パケット数。

**ena\$1srd\$1resource\$1utilization**  
インスタンスが消費した同時 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 ドライバーを備えたネットワークパフォーマンスメトリクス
<a name="network-performance-metrics-dpdk"></a>

ENA ドライババージョン 2.2.0 以降では、ネットワークメトリクスのレポートがサポートされています。DPDK 20.11 には ENA ドライバー 2.2.0 が含まれており、この機能をサポートする最初の DPDK バージョンです。

DPDK ドライバー v25.03 以降では、フラグメントプロキシモードがサポートされています。DPDK ドライバーでフラグメントプロキシモードが有効になっている場合、エグレスフラグメントドロップは、通常であれば適用される 1024 PPS の制限を回避し、標準の PPS 許容値内でカウントされます。フラグメントプロキシモードはデフォルトで無効になっています。

サンプルアプリケーションを使用して、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 アプリケーションユーザーガイド](https://doc.dpdk.org/guides/testpmd_app_ug/)を参照してください。

## FreeBSD を実行しているインスタンスのメトリクス
<a name="network-performance-metrics-freebsd"></a>

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