

# Amazon EC2 インスタンスでの拡張ネットワーキング
<a name="enhanced-networking"></a>

拡張ネットワーキングでは、シングルルート I/O 仮想化 (SR-IOV) を使用して、における高性能ネットワーキング機能が提供されます。SR-IOV は、従来の仮想化ネットワークインターフェイスと比較し、I/O パフォーマンスが高く、CPU 利用率が低いデバイス仮想化の手法です。拡張ネットワーキングは、より高い帯域幅、1 秒あたりのパケット (PPS) のより高いパフォーマンス、常により低いインスタンス間レイテンシーを実現します。拡張ネットワーキングは追加料金なしで使用できます。

各インスタンスタイプでサポートされているネットワーク速度については、[Amazon EC2インスタンスタイプ](https://aws.amazon.com/ec2/instance-types/)を参照してください。

次のいずれかのメカニズムを使用して、拡張ネットワークを有効にすることができます。

**Elastic Network Adapter (ENA)**  
Elastic Network Adapter (ENA) は、サポート対象のインスタンスタイプに対して最大 100 Gbps のネットワーク速度をサポートします。  
すべての [Nitro ベースのインスタンス](instance-types.md#instance-hypervisor-type)が ENA を使用してネットワーキングを強化しています。さらに、次の Xen ベースのインスタンスタイプは ENA (H1、I3、G3、`m4.16xlarge`、P2、P3、P3dn、R4) を使用しています。  
詳細については、「[EC2 インスタンスで ENA による拡張ネットワーキングを有効にする](enhanced-networking-ena.md)」を参照してください。

**Intel 82599 Virtual Function (VF) インターフェイス**  
Intel 82599 Virtual Function インターフェイスでは、サポートされているインスタンスタイプについて最大 10 Gbps のネットワーク速度がサポートされています。  
インスタンスタイプ C3、C4、D2、I2、M4 (m4.16xlarge を除く)、R3 では、拡張ネットワーキングに Intel 82599 VF インターフェイスが使用されます。  
詳細については、「[Intel 82599 VF インターフェイスを使用する拡張ネットワーキング](sriov-networking.md)」を参照してください。

**Topics**
+ [Elastic Network Adapter (ENA)](enhanced-networking-ena.md)
+ [ENA Express](ena-express.md)
+ [Intel 82599 VF](sriov-networking.md)
+ [ネットワークパフォーマンスのモニタリング](monitoring-network-performance-ena.md)
+ [Linux のネットワークレイテンシーを改善する](ena-improve-network-latency-linux.md)
+ [Nitro のパフォーマンスに関する考慮事項](ena-nitro-perf.md)
+ [Windows でのネットワークパフォーマンスを最適化する](enhanced-networking-os.md)

# EC2 インスタンスで ENA による拡張ネットワーキングを有効にする
<a name="enhanced-networking-ena"></a>

Amazon EC2 は、Elastic Network Adapter (ENA) を介してネットワーキング機能を提供します。拡張ネットワーキングを使用するには、必要な ENA ドライバーを定義した AMI を使用するか、必要な ENA ドライバーを手動でインストールする必要があります。その後、インスタンスで ENA サポートを有効にできます。

ENA ドライバーのリリースノートやインストール手順を確認するには、ご使用のインスタンスオペレーティングシステムプラットフォームに応じたタブを参照してください。

------
#### [ Linux ]

GitHub では、以下のドキュメントを参照できます。
+ GitHub で「[ENA Linux kernel driver release notes](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/RELEASENOTES.md)」を確認してください。
+ インストール手順が含まれている ENA Linux カーネルドライバーの概要については、GitHub で「[Elastic Network Adapter (ENA) ファミリー用Linuxカーネルドライバ](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/README.rst)」を参照してください。

------
#### [ Windows ]

このガイドの「**Manage device drivers**」セクションから、以下のドキュメントを確認できます。
+ [ENA Windows ドライバーのバージョンリリースを追跡する](ena-driver-releases-windows.md).
+ [EC2 Windows インスタンスに ENA ドライバーをインストールする](ena-adapter-driver-install-upgrade-win.md).

------

Nitro ベースのインスタンスの場合、拡張ネットワーキング機能はインスタンスタイプが実装する Nitro のバージョンによって異なります。

インスタンスのネットワーク仕様を確認するには、インスタンスタイプのインスタンスファミリーリンクを選択してください。適用されるインスタンスファミリーがわからない場合は、「*Amazon EC2 インスタンスタイプ*」ガイドの「[Naming conventions](https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-type-names.html)」を参照してください。
+ [高速コンピューティングインスタンスのネットワーク仕様](https://docs.aws.amazon.com/ec2/latest/instancetypes/ac.html#ac_network)
+ [コンピューティング最適化インスタンスのネットワーク仕様](https://docs.aws.amazon.com/ec2/latest/instancetypes/co.html#co_network)
+ [汎用インスタンスのネットワーク仕様](https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html#gp_network)
+ [ハイパフォーマンスコンピューティングインスタンスのネットワーク仕様](https://docs.aws.amazon.com/ec2/latest/instancetypes/hpc.html#hpc_network)
+ [メモリ最適化インスタンスのネットワーク仕様](https://docs.aws.amazon.com/ec2/latest/instancetypes/mo.html#mo_network)
+ [ストレージ最適化インスタンスのネットワーク仕様](https://docs.aws.amazon.com/ec2/latest/instancetypes/so.html#so_network)

**Topics**
+ [ENA を使用した拡張ネットワーキングの前提条件](#ena-requirements)
+ [拡張ネットワーキングが有効化されているかどうかのテスト](test-enhanced-networking-ena.md)
+ [インスタンスでの拡張ネットワーキングの有効化](enabling_enhanced_networking.md)
+ [ENA キュー](ena-queues.md)
+ [Linux での ENA カーネルドライバーのトラブルシューティング](troubleshooting-ena.md)
+ [エラスティックネットワークアダプタ Windows ドライバーのトラブルシューティング](troubleshoot-ena-driver.md)

## ENA を使用した拡張ネットワーキングの前提条件
<a name="ena-requirements"></a>

ENA を使用した拡張ネットワーキングを準備するには、次のようにインスタンスをセットアップします。
+ [Nitro ベースのインスタンス](instance-types.md#instance-hypervisor-type)を起動します。
+ インスタンスがインターネットに接続されていることを確認します。
+ 保持する必要がある重要なデータがインスタンスにある場合、インスタンスから AMI を作成してそのデータをバックアップする必要があります。`enaSupport` 属性を有効にすると共に、ENA カーネルドライバーを更新すると、互換性のないインスタンスがレンダリングされたり、オペレーティングシステムに接続できなくなったりする可能性があります。最近のバックアップがある場合はこれが発生してもデータは保持されます。
+ **Linux インスタンス** – インスタンスに対して ENA 拡張ネットワーキングが自動的に有効化されるように、サポートされているバージョンの Linux カーネルとサポートされているディストリビューションを使用してインスタンスを起動します。詳細については、[ENA Linux Kernel Driver リリースノート](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/RELEASENOTES.md)を参照してください。
+ **Windows インスタンス** – インスタンスで Windows Server 2008 R2 SP1 を実行している場合は、[SHA-2 コード署名サポートが更新](https://support.microsoft.com/en-us/help/4474419/sha-2-code-signing-support-update)されていることを確認します。
+ 選択した任意のコンピュータ、できればローカルのデスクトップまたはノートパソコンで、AWS マネジメントコンソール から [AWS CloudShell](https://console.aws.amazon.com/cloudshell) を使用するか、[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) もしくは [AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/) をインストールし設定します。詳細については[Amazon EC2 へのアクセス](concepts.md#access-ec2)もしくは [AWS CloudShell ユーザーガイド](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)を参照してください。拡張ネットワーキングは、Amazon EC2 コンソールから管理することはできません。

# 拡張ネットワーキングが有効化されているかどうかのテスト
<a name="test-enhanced-networking-ena"></a>

インスタンスまたは AMI で拡張ネットワーキングが有効になっているかどうかをテストできます。

**インスタンス属性**  
`enaSupport` インスタンス属性の値を確認します。

------
#### [ AWS CLI ]

[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) コマンドを使用します。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query "Reservations[].Instances[].EnaSupport"
```

拡張ネットワーキングが有効になっている場合、出力は次のようになります。

```
[
    true
]
```

------
#### [ PowerShell ]

[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) コマンドレットを使用します。

```
(Get-EC2Instance -InstanceId i-1234567890abcdef0).Instances.EnaSupport
```

拡張ネットワーキングが有効になっている場合、出力は次のようになります。

```
True
```

------

**イメージ属性**  
`enaSupport` イメージ属性の値を確認します。

------
#### [ AWS CLI ]

[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --image-id ami-0abcdef1234567890 \
    --query "Images[].EnaSupport"
```

拡張ネットワーキングが有効になっている場合、出力は次のようになります。

```
[
    true
]
```

------
#### [ PowerShell ]

[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).EnaSupport
```

拡張ネットワーキングが有効になっている場合、出力は次のようになります。

```
True
```

------

**Linux ネットワークインターフェイスドライバー**  
以下のコマンドを使用して、`ena` カーネルドライバーが特定のインターフェイスで使用されていることを確認し、チェックするインターフェイス名に置き換えます。単一のインターフェイス (デフォルト) を使用している場合は`eth0` です。Linux ディストリビューションが予測可能なネットワーク名をサポートしている場合、これは `ens5` のような名前である可能性があります。詳細については、[インスタンスでの拡張ネットワーキングの有効化](enabling_enhanced_networking.md) の RHEL、SUSE、および CentOS のセクションを展開します。

以下の例では、リストされているドライバーは `vif` であるため、`ena` カーネルドライバーはロードされません。

```
[ec2-user ~]$ ethtool -i eth0
driver: vif
version:
firmware-version:
bus-info: vif-0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
```

この例では、`ena` カーネルドライバーが最小推奨バージョンでロードされています。このインスタンスでは拡張ネットワーキングが適切に設定されています。

```
[ec2-user ~]$ ethtool -i eth0
driver: ena
version: 1.5.0g
firmware-version:
expansion-rom-version:
bus-info: 0000:00:05.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
```

# インスタンスでの拡張ネットワーキングの有効化
<a name="enabling_enhanced_networking"></a>

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

## Amazon Linux
<a name="enable-enhanced-networking-ena-AL"></a>

拡張ネットワーキングには ENA 搭載のカーネルドライバーが必要であり、Amazon Linux 向け AMI であれば、そうしたドライバーが含まれ、ENA にも対応しています。したがって、サポートされるインスタンスタイプで HVM バージョンの Amazon Linux を使用してインスタンスを起動した場合、拡張ネットワーキングは既にインスタンスで有効になっています。詳細については、「[拡張ネットワーキングが有効化されているかどうかのテスト](test-enhanced-networking-ena.md)」を参照してください。

## Ubuntu
<a name="enhanced-networking-ena-ubuntu"></a>

拡張ネットワーキングには ENA 搭載のカーネルドライバーが必要であり、最新の Ubuntu HVM AMI であれば、そうしたドライバーが含まれ、ENA にも対応しています。したがって、サポートされるインスタンスタイプで最新の Ubuntu HVM AMI を使用してインスタンスを起動した場合、拡張ネットワーキングは既にインスタンスで有効になっています。詳細については、[拡張ネットワーキングが有効化されているかどうかのテスト](test-enhanced-networking-ena.md)を参照してください。

以前の AMI を使用してインスタンスを起動した場合、まだ拡張ネットワーキングが有効になっていなければ、`linux-aws` カーネルパッケージをインストールして最新の拡張ネットワーキングドライバーを取得して、必要な属性を更新できます。

**`linux-aws` カーネルパッケージをインストールするには (Ubuntu 16.04 以降)**  
Ubuntu 16.04 および 18.04 には、Ubuntu カスタムカーネル (`linux-aws` カーネルパッケージ) が付属しています。別のカーネルを使用するには、[サポート](https://console.aws.amazon.com/support) にお問い合わせください。<a name="ubuntu-enhanced-networking-ena-procedure"></a>

**`linux-aws` カーネルパッケージをインストールするには (Ubuntu Trusty 14.04)**

1. <a name="ubuntu-enhanced-networking-ena-start-step"></a>インスタンスに接続します。

1. パッケージキャッシュおよびパッケージを更新します。

   ```
   ubuntu:~$ sudo apt-get update && sudo apt-get upgrade -y linux-aws
   ```
**重要**  
更新プロセス中に `grub` をインストールするよう求められた場合は、`/dev/xvda` のインストール先として `grub` を使用し、現在のバージョンの `/boot/grub/menu.lst` を保持することを選択してください。

1. [EBS-backed インスタンス] ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを停止します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) (AWS CLI)、[https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html) (AWS Tools for Windows PowerShell)。

   [Instance store-backed インスタンス] インスタンスを停止して属性を変更することはできません。代わりに、この手順に進んでください: [Ubuntu で拡張ネットワーキングを有効にするには (Instance store-backed インスタンス)](#enhanced-networking-ena-instance-store-ubuntu)。

1. ローカルコンピュータから、次のいずれかのコマンドを使用して拡張ネットワーキングの属性を有効化します。
   + [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) (AWS CLI)

     ```
     aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --ena-support
     ```
   + [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) (Windows PowerShell 用のツール）

     ```
     Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -EnaSupport $true
     ```

1. (オプション) [Amazon EBS-backed AMI を作成する](creating-an-ami-ebs.md)の説明に従って、インスタンスから AMI を作成します。AMI は、インスタンスから拡張ネットワーキング `enaSupport` 属性を継承します。このため、この AMI を使用することで、拡張ネットワーキングがデフォルトで有効になっている別のインスタンスを起動できます。

1. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを開始します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) (AWS CLI)、[https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) (AWS Tools for Windows PowerShell)。<a name="enhanced-networking-ena-instance-store-ubuntu"></a>

**Ubuntu で拡張ネットワーキングを有効にするには (Instance store-backed インスタンス)**

インスタンスを停止するステップまで、前の手順に従います。[Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md)に記述されているように、新しい AMI を作成します。AMI を登録するときに拡張ネットワーキング属性を有効にしてください。
+ [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) (AWS CLI)

  ```
  aws ec2 register-image --ena-support ...
  ```
+ [https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) (AWS Tools for Windows PowerShell)

  ```
  Register-EC2Image -EnaSupport $true ...
  ```

## RHEL、SUSE、CentOS
<a name="enhanced-networking-ena-linux"></a>

拡張ネットワーキングには ENA 搭載のカーネルドライバーが必要であり、Red Hat Enterprise Linux、SUSE Linux Enterprise Server、および CentOS 用の最新の AMI であれば、そうしたドライバーが含まれ、ENA にも対応しています。したがって、サポートされるインスタンスタイプで最新の AMI を使用してインスタンスを起動した場合、拡張ネットワーキングは既にインスタンスで有効になっています。詳細については、[拡張ネットワーキングが有効化されているかどうかのテスト](test-enhanced-networking-ena.md)を参照してください。

次の手順では、Amazon Linux AMI または Ubuntu 以外の Linux ディストリビューションで拡張ネットワーキングを有効にするための一般的なステップを説明します。コマンドの詳細な構文、ファイルの場所、パッケージやツールのサポートなどの詳細については、使用する Linux ディストリビューションのドキュメントを参照してください。

**Linux で拡張ネットワーキングを有効化するには**

1. <a name="other-linux-enhanced-networking-ena-start-step"></a>インスタンスに接続します。

1. [https://github.com/amzn/amzn-drivers](https://github.com/amzn/amzn-drivers) の GitHub からインスタンスで `ena` カーネルドライバーのソースコードのクローンを作成します。(SUSE Linux Enterprise Server 12 SP2 以降には、デフォルトで ENA 2.02 が含まれているため、ENA ドライバーをダウンロードしてコンパイルする必要はありません。SUSE Linux Enterprise Server 12 SP2 以降では、必要なドライバーバージョンを標準カーネルに追加するためリクエストを申請する必要があります。) 

   ```
   git clone https://github.com/amzn/amzn-drivers
   ```

1. インスタンスで `ena` カーネルドライバーをコンパイルし、インストールします。これらの手順は Linux ディストリビューションによって異なります。Red Hat Enterprise Linux でのカーネルドライバーのコンパイルの詳細については、「[RHEL を実行する Amazon EC2 インスタンスに拡張ネットワークサポート用の最新の ENS ドライバーをインストールする方法](https://repost.aws/knowledge-center/install-ena-driver-rhel-ec2)」を参照してください。

1. **sudo depmod** コマンドを実行して、カーネルドライバーの依存関係を更新します。

1. <a name="other-linux-enhanced-networking-ena-stop-step"></a>起動時に新しいカーネルドライバーがロードされるように、インスタンスの `initramfs` を更新します。例えば、ディストリビューションで **dracut** がサポートされる場合、次のコマンドを使用できます。

   ```
   dracut -f -v
   ```

1. <a name="predictable-network-names-ena"></a>システムがデフォルトで予測可能なネットワークインターフェイス名を使用するかどうかを確認します。**systemd** または **udev** のバージョン 197 以上を使用するシステムの場合、イーサネットデバイスの名前を変更でき、単一ネットワークインターフェイスの名前が `eth0` になることは保証されません。この動作はインスタンスに接続する際に問題の原因となる可能性があります。詳細と他の設定オプションについては、freedesktop.org ウェブサイトで[Predictable Network Interface Names/](https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/)を参照してください。

   1. 次のコマンドを使用して、RPM ベースのシステムで **systemd** または **udev** のバージョンを確認できます。

      ```
      rpm -qa | grep -e '^systemd-[0-9]\+\|^udev-[0-9]\+'
      systemd-208-11.el7_0.2.x86_64
      ```

      上記の Red Hat Enterprise Linux 7 の例では**systemd** のバージョンは 208 であるため、予測可能なネットワークインターフェイス名は無効になっている必要があります。

   1. `net.ifnames=0` オプションを `GRUB_CMDLINE_LINUX` の `/etc/default/grub` 行に追加することによって、予測可能なネットワークインターフェイス名を無効にします。

      ```
      sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/\ net\.ifnames\=0\"/' /etc/default/grub
      ```

   1. grub の設定ファイルを再ビルドします。

      ```
      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      ```

1. [EBS-backed インスタンス] ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを停止します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) (AWS CLI)、[https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html) (AWS Tools for Windows PowerShell)。

   [Instance store-backed インスタンス] インスタンスを停止して属性を変更することはできません。代わりに、この手順に進んでください: [Linux で拡張ネットワーキングを有効にするには (Instance store-backed インスタンス)](#other-linux-enhanced-networking-ena-instance-store)。

1. ローカルコンピュータから、次のいずれかのコマンドを使用して拡張ネットワーキングの `enaSupport` 属性を有効化します。
   + [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) (AWS CLI)

     ```
     aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --ena-support
     ```
   + [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) (Windows PowerShell 用のツール）

     ```
     Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -EnaSupport $true
     ```

1. (オプション) [Amazon EBS-backed AMI を作成する](creating-an-ami-ebs.md)の説明に従って、インスタンスから AMI を作成します。AMI は、インスタンスから拡張ネットワーキング `enaSupport` 属性を継承します。このため、この AMI を使用することで、拡張ネットワーキングがデフォルトで有効になっている別のインスタンスを起動できます。

   インスタンスオペレーティングシステムに `/etc/udev/rules.d/70-persistent-net.rules` が含まれている場合にはAMI を作成する前にそれを削除する必要があります。このファイルには元のインスタンスのイーサネットアダプターの MAC アドレスが保存されています。別のインスタンスがこのファイルを使用して起動した場合、オペレーティングシステムがそのデバイスを検出できなくなり、`eth0` が失敗して、起動に関する問題が発生することがあります。このファイルは次の起動サイクルで再び生成され、AMI から起動されるインスタンスごとに独自のバージョンが作成されます。

1. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを開始します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) (AWS CLI)、[https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) (AWS Tools for Windows PowerShell)。

1. (オプション) インスタンスに接続し、カーネルドライバーがインストールされていることを確認します。

   拡張ネットワーキングを有効にした後にインスタンスに接続できない場合、[Linux での ENA カーネルドライバーのトラブルシューティング](troubleshooting-ena.md)を参照してください。<a name="other-linux-enhanced-networking-ena-instance-store"></a>

**Linux で拡張ネットワーキングを有効にするには (Instance store-backed インスタンス)**

インスタンスを停止するステップまで、前の手順に従います。[Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md)に記述されているように、新しい AMI を作成します。AMI を登録するときに拡張ネットワーキング属性を有効にしてください。
+ [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) (AWS CLI)

  ```
  aws ec2 register-image --ena-support ...
  ```
+ [https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) (AWS Tools for Windows PowerShell)

  ```
  Register-EC2Image -EnaSupport ...
  ```

## DKMS を備えた Ubuntu
<a name="enhanced-networking-ena-ubuntu-dkms"></a>

この方法は、テストおよびフィードバックのみを目的としています。本番稼働用デプロイによる使用を目的としていません。本番稼働デプロイについては、[Ubuntu](#enhanced-networking-ena-ubuntu)を参照してください。

**重要**  
DKMS を使用すると、サブスクリプションのサポート契約が無効になります。本稼働環境では使用しないでください。

**Ubuntu で ENA を使用した拡張ネットワーキングを有効にするには (EBS-backed インスタンス)**

1. [Ubuntu](#enhanced-networking-ena-ubuntu) のステップ 1 および 2 を行います。

1. `build-essential` パッケージをインストールしてカーネルドライバーと `dkms` パッケージをコンパイルし、カーネルが更新されるたびに `ena` カーネルドライバーが再構築されるようにします。

   ```
   ubuntu:~$ sudo apt-get install -y build-essential dkms
   ```

1. [https://github.com/amzn/amzn-drivers](https://github.com/amzn/amzn-drivers) の GitHub からインスタンスで `ena` カーネルドライバーのソースのクローンを作成します。

   ```
   ubuntu:~$ git clone https://github.com/amzn/amzn-drivers
   ```

1. `amzn-drivers` パッケージを `/usr/src/` ディレクトリに移動して、カーネルの更新のたびに DKMS がこのパッケージを見つけて構築できるようにします。ソースコードのバージョン番号 (現在のバージョン番号はリリースノートにあります) をディレクトリ名に付加します。例えば、バージョン `1.0.0` は以下のようになります。

   ```
   ubuntu:~$ sudo mv amzn-drivers /usr/src/amzn-drivers-1.0.0
   ```

1. 以下の値を使用して DKMS 設定ファイルを作成し、`ena` のバージョンに置き換えます。

   ファイルを作成します。

   ```
   ubuntu:~$ sudo touch /usr/src/amzn-drivers-1.0.0/dkms.conf
   ```

   ファイルを編集し、次の値を追加します。

   ```
   ubuntu:~$ sudo vim /usr/src/amzn-drivers-1.0.0/dkms.conf
   PACKAGE_NAME="ena"
   PACKAGE_VERSION="1.0.0"
   CLEAN="make -C kernel/linux/ena clean"
   MAKE="make -C kernel/linux/ena/ BUILD_KERNEL=${kernelver}"
   BUILT_MODULE_NAME[0]="ena"
   BUILT_MODULE_LOCATION="kernel/linux/ena"
   DEST_MODULE_LOCATION[0]="/updates"
   DEST_MODULE_NAME[0]="ena"
   AUTOINSTALL="yes"
   ```

1. DKMS を使用して、インスタンスで `ena` カーネルドライバーを追加、構築、インストールします。

   DKMS にカーネルドライバーを追加します。

   ```
   ubuntu:~$ sudo dkms add -m amzn-drivers -v 1.0.0
   ```

   **dkms** コマンドでカーネルドライバーを構築します。

   ```
   ubuntu:~$ sudo dkms build -m amzn-drivers -v 1.0.0
   ```

   **dkms** を使用してカーネルドライバーをインストールします。

   ```
   ubuntu:~$ sudo dkms install -m amzn-drivers -v 1.0.0
   ```

1. 起動時に正しいカーネルドライバーがロードされるように、`initramfs` を再構築します。

   ```
   ubuntu:~$ sudo update-initramfs -u -k all
   ```

1. [拡張ネットワーキングが有効化されているかどうかのテスト](test-enhanced-networking-ena.md) から modinfo ena コマンドを使用して、`ena` カーネルドライバーがインストールされていることを確認します。

   ```
   ubuntu:~$ modinfo ena
   filename:	   /lib/modules/3.13.0-74-generic/updates/dkms/ena.ko
   version:		1.0.0
   license:		GPL
   description:	Elastic Network Adapter (ENA)
   author:		 Amazon.com, Inc. or its affiliates
   srcversion:	 9693C876C54CA64AE48F0CA
   alias:		  pci:v00001D0Fd0000EC21sv*sd*bc*sc*i*
   alias:		  pci:v00001D0Fd0000EC20sv*sd*bc*sc*i*
   alias:		  pci:v00001D0Fd00001EC2sv*sd*bc*sc*i*
   alias:		  pci:v00001D0Fd00000EC2sv*sd*bc*sc*i*
   depends:
   vermagic:	   3.13.0-74-generic SMP mod_unload modversions
   parm:		   debug:Debug level (0=none,...,16=all) (int)
   parm:		   push_mode:Descriptor / header push mode (0=automatic,1=disable,3=enable)
   		  0 - Automatically choose according to device capability (default)
   		  1 - Don't push anything to device memory
   		  3 - Push descriptors and header buffer to device memory (int)
   parm:		   enable_wd:Enable keepalive watchdog (0=disable,1=enable,default=1) (int)
   parm:		   enable_missing_tx_detection:Enable missing Tx completions. (default=1) (int)
   parm:		   numa_node_override_array:Numa node override map
   (array of int)
   parm:		   numa_node_override:Enable/Disable numa node override (0=disable)
   (int)
   ```

1. [Ubuntu](#enhanced-networking-ena-ubuntu) のステップ 3 に進みます。

## Windows の拡張ネットワーキングの有効化
<a name="enable-enhanced-networking-ena-windows"></a>

インスタンスを起動し、すでに拡張ネットワーキングが有効になっていない場合、必要なネットワークアダプタードライバーをダウンロードしてインスタンスにインストールし、拡張ネットワーキングを有効にするように `enaSupport` インスタンス属性を設定する必要があります。

**拡張ネットワーキングを有効にするには**

1. インスタンスに接続してローカル管理者としてログインします。

1. [Windows Server 2016 と 2019 のみ] 以下の EC2Launch PowerShell スクリプトを実行して、ドライバーのインストール後にインスタンスを設定します。

   ```
   PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
   ```

1. インスタンスから、次のようにドライバーをインストールします。

   1. インスタンスに最新のドライバーを[ダウンロード](https://s3.amazonaws.com/ec2-windows-drivers-downloads/ENA/Latest/AwsEnaNetworkDriver.zip)します。

   1. zip アーカイブを展開します。

   1. `install.ps1` PowerShell スクリプトを実行してドライバーをインストールします。
**注記**  
実行ポリシーエラーが発生した場合は、ポリシーを `Unrestricted` に設定します (デフォルトでは、`Restricted` または `RemoteSigned` に設定されています)。コマンドラインで、`Set-ExecutionPolicy -ExecutionPolicy Unrestricted` を実行し、次に PowerShell スクリプト `install.ps1` を再度実行します。

1. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを停止します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) (AWS CLI)/[https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html)、 (AWS Tools for Windows PowerShell)。

1. 次のように、インスタンスの ENA サポートを有効にします。

   1. ローカルコンピュータから、次のいずれかのコマンドを実行して、インスタンスの EC2 インスタンス ENA サポート属性を確認します。属性が有効になっていない場合、出力は「[]」 または空白です。`EnaSupport`はデフォルトで `false` に設定されます。
      + [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) (AWS CLI)

        ```
        aws ec2 describe-instances --instance-ids i-1234567890abcdef0 --query "Reservations[].Instances[].EnaSupport"
        ```
      + [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) (Windows PowerShell 用のツール）

        ```
        (Get-EC2Instance -InstanceId i-1234567890abcdef0).Instances.EnaSupport
        ```

   1. ENA サポートを有効にするには、次のいずれかのコマンドを実行します:
      + [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) (AWS CLI)

        ```
        aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --ena-support
        ```
      + [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) (AWS Tools for Windows PowerShell)

        ```
        Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -EnaSupport $true
        ```

      インスタンスを再開するときに問題が発生した場合は、次のいずれかのコマンドを使用して ENA サポートを無効にすることもできます。
      + [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) (AWS CLI)

        ```
        aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --no-ena-support
        ```
      + [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) (AWS Tools for Windows PowerShell)

        ```
        Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -EnaSupport $false
        ```

   1. 前述のように **describe-instances** または **Get-EC2Instance** を使用して、属性が `true` に設定されていることを確認します。次のような出力が表示されます。

      ```
      [
      	true
      ]
      ```

1. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを開始します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) (AWS CLI)、[https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) (AWS Tools for Windows PowerShell)。

1. インスタンスで、次のように ENA ドライバーがインストールされて有効であることを検証します。

   1. ネットワークアイコンを右クリックして、[**Open Network and Sharing Center**] を選択してください。

   1. イーサネットアダプター ([**Ethernet 2**] など) を選択してください。

   1. [**Details**] を選択してください。[**Network Connection Details**] で、[**Description**] が [**Amazon Elastic Network Adapter**] であることを確認します。

1. (オプション) インスタンスから AMI を作成します。AMI は、インスタンスから `enaSupport` 属性を継承します。したがって、この AMI を使用して、ENA がデフォルトで有効になっている別のインスタンスを起動できます。

# ENA キュー
<a name="ena-queues"></a>

ENA キューは、インスタンスのタイプとサイズに基づくデフォルトの静的制限を用いてネットワークインターフェイスに割り当てられます。サポートされているインスタンスタイプでは、これらのキューを Elastic Network Interface (ENI) 全体に動的に割り当てることができます。インスタンスあたりのキューの合計数はインスタンスのタイプとサイズによって異なりますが、ENI キューは、ENI とインスタンスの最大キュー数に到達するまで複数の ENI に設定できます。

柔軟な ENA キューの割り当てはリソース配分を最適化するため、vCPU を最大限に活用できます。通常、ネットワークパフォーマンスの高いワークロードには複数の ENA キューが必要です。特定のワークロードニーズに応じてキュー数を調整することで、ネットワークパフォーマンスと 1 秒あたりのパケット数 (PPS) をファインチューニングできます。例えば、ネットワーク集約型アプリケーションには CPU 集約型アプリケーションよりも多くのキューが必要になる場合があります。

**Topics**
+ [サポートされているインスタンス](#supported-instances)
+ [キュー数の変更](#modify)

## サポートされているインスタンス
<a name="supported-instances"></a>

以下のインスタンスは、複数の ENA キューの動的な割り当てをサポートしています。

### 汎用
<a name="supported-instances-ena-queues-gp"></a>


| インスタンスタイプ | インターフェイスあたりのデフォルトの ENA キュー | インターフェイスあたりの最大 ENA キュー | インスタンスあたりの最大 ENA キュー | 
| --- | --- | --- | --- | 
| M6i | 
| m6i.large | 2 | 2 | 6 | 
| m6i.xlarge | 4 | 4 | 16 | 
| m6i.2xlarge | 8 | 8 | 32 | 
| m6i.4xlarge | 8 | 16 | 64 | 
| m6i.8xlarge | 8 | 32 | 64 | 
| m6i.12xlarge | 8 | 32 | 64 | 
| m6i.16xlarge | 8 | 32 | 120 | 
| m6i.24xlarge | 8 | 32 | 120 | 
| m6i.32xlarge | 8 | 32 | 120 | 
| M6id | 
| m6id.large | 2 | 2 | 6 | 
| m6id.xlarge | 4 | 4 | 16 | 
| m6id.2xlarge | 8 | 8 | 32 | 
| m6id.4xlarge | 8 | 16 | 64 | 
| m6id.8xlarge | 8 | 32 | 64 | 
| m6id.12xlarge | 8 | 32 | 64 | 
| m6id.16xlarge | 8 | 32 | 120 | 
| m6id.24xlarge | 8 | 32 | 120 | 
| m6id.32xlarge | 8 | 32 | 120 | 
| M6idn | 
| m6idn.large | 2 | 2 | 6 | 
| m6idn.xlarge | 4 | 4 | 16 | 
| m6idn.2xlarge | 8 | 8 | 32 | 
| m6idn.4xlarge | 8 | 16 | 64 | 
| m6idn.8xlarge | 16 | 32 | 128 | 
| m6idn.12xlarge | 16 | 32 | 128 | 
| m6idn.16xlarge | 16 | 32 | 240 | 
| m6idn.24xlarge | 32 | 32 | 480 | 
| m6idn.32xlarge | 32 | 32 | 512 \$1 | 
| M6in | 
| m6in.large | 2 | 2 | 6 | 
| m6in.xlarge | 4 | 4 | 16 | 
| m6in.2xlarge | 8 | 8 | 32 | 
| m6in.4xlarge | 8 | 16 | 64 | 
| m6in.8xlarge | 16 | 32 | 128 | 
| m6in.12xlarge | 16 | 32 | 128 | 
| m6in.16xlarge | 16 | 32 | 240 | 
| m6in.24xlarge | 32 | 32 | 480 | 
| m6in.32xlarge | 32 | 32 | 512 \$1 | 
| M8a | 
| m8a.medium | 1 | 1 | 3 | 
| m8a.large | 2 | 2 | 6 | 
| m8a.xlarge | 4 | 4 | 16 | 
| m8a.2xlarge | 8 | 8 | 32 | 
| m8a.4xlarge | 8 | 16 | 64 | 
| m8a.8xlarge | 8 | 32 | 128 | 
| m8a.12xlarge | 16 | 64 | 192 | 
| m8a.16xlarge | 16 | 64 | 256 | 
| m8a.24xlarge | 16 | 128 | 384 | 
| m8a.48xlarge | 32 | 128 | 768 | 
| m8a.metal-24xl | 16 | 128 | 384 | 
| m8a.metal-48xl | 32 | 128 | 768 | 
| M8azn | 
| m8azn.medium | 1 | 1 | 3 | 
| m8azn.large | 2 | 2 | 8 | 
| m8azn.xlarge | 4 | 4 | 16 | 
| m8azn.3xlarge | 4 | 16 | 48 | 
| m8azn.6xlarge | 8 | 32 | 96 | 
| m8azn.12xlarge | 8 | 64 | 192 | 
| m8azn.24xlarge | 16 | 128 | 384 | 
| m8azn.metal-12xl | 8 | 64 | 192 | 
| m8azn.metal-24xl | 16 | 128 | 384 | 
| M8gb | 
| m8gb.medium | 1 | 1 | 2 | 
| m8gb.large | 2 | 2 | 6 | 
| m8gb.xlarge | 4 | 4 | 16 | 
| m8gb.2xlarge | 8 | 8 | 32 | 
| m8gb.4xlarge | 8 | 16 | 64 | 
| m8gb.8xlarge | 8 | 32 | 128 | 
| m8gb.12xlarge | 16 | 64 | 192 | 
| m8gb.16xlarge | 16 | 64 | 256 | 
| m8gb.24xlarge | 16 | 128 | 384 | 
| m8gb.48xlarge | 32 | 128 | 768 \$1 | 
| m8gb.metal-24xl | 32 | 128 | 768 | 
| m8gb.metal-48xl | 32 | 128 | 768 \$1 | 
| M8gn | 
| m8gn.medium | 1 | 1 | 2 | 
| m8gn.large | 2 | 2 | 6 | 
| m8gn.xlarge | 4 | 4 | 16 | 
| m8gn.2xlarge | 8 | 8 | 32 | 
| m8gn.4xlarge | 8 | 16 | 64 | 
| m8gn.8xlarge | 8 | 32 | 128 | 
| m8gn.12xlarge | 16 | 64 | 192 | 
| m8gn.16xlarge | 16 | 64 | 256 | 
| m8gn.24xlarge | 16 | 128 | 384 | 
| m8gn.48xlarge | 32 | 128 | 768 \$1 | 
| m8gn.metal-24xl | 32 | 128 | 768 | 
| m8gn.metal-48xl | 32 | 128 | 768 \$1 | 
| M8i | 
| m8i.large | 2 | 2 | 6 | 
| m8i.xlarge | 4 | 4 | 16 | 
| m8i.2xlarge | 8 | 8 | 32 | 
| m8i.4xlarge | 8 | 16 | 64 | 
| m8i.8xlarge | 8 | 32 | 128 | 
| m8i.12xlarge | 16 | 64 | 192 | 
| m8i.16xlarge | 16 | 64 | 256 | 
| m8i.24xlarge | 16 | 128 | 384 | 
| m8i.32xlarge | 16 | 128 | 512 | 
| m8i.48xlarge | 32 | 128 | 768 | 
| m8i.96xlarge | 32 | 128 | 1536 | 
| m8i.metal-48xl | 32 | 128 | 768 | 
| m8i.metal-96xl | 32 | 128 | 1536 | 
| M8id | 
| m8id.large | 2 | 2 | 6 | 
| m8id.xlarge | 4 | 4 | 16 | 
| m8id.2xlarge | 8 | 8 | 32 | 
| m8id.4xlarge | 8 | 16 | 64 | 
| m8id.8xlarge | 8 | 32 | 128 | 
| m8id.12xlarge | 16 | 64 | 192 | 
| m8id.16xlarge | 16 | 64 | 256 | 
| m8id.24xlarge | 16 | 128 | 384 | 
| m8id.32xlarge | 16 | 128 | 512 | 
| m8id.48xlarge | 32 | 128 | 768 | 
| m8id.96xlarge | 32 | 128 | 1536 | 
| m8id.metal-48xl | 32 | 128 | 768 | 
| m8id.metal-96xl | 32 | 128 | 1536 | 
| M8i-flex | 
| m8i-flex.large | 1 | 1 | 3 | 
| m8i-flex.xlarge | 2 | 2 | 8 | 
| m8i-flex.2xlarge | 4 | 4 | 16 | 
| m8i-flex.4xlarge | 4 | 8 | 32 | 
| m8i-flex.8xlarge | 4 | 16 | 64 | 
| m8i-flex.12xlarge | 8 | 32 | 96 | 
| m8i-flex.16xlarge | 8 | 32 | 128 | 

**注記**  
\$1 これらのインスタンスタイプには複数のネットワークカードが搭載されています。他のインスタンスタイプには単一のネットワークカードが搭載されています。詳細については、「[ネットワークカード](using-eni.md#network-cards)」を参照してください。

### コンピューティングの最適化
<a name="supported-instances-ena-queues-co"></a>


| インスタンスタイプ | インターフェイスあたりのデフォルトの ENA キュー | インターフェイスあたりの最大 ENA キュー | インスタンスあたりの最大 ENA キュー | 
| --- | --- | --- | --- | 
| C6i | 
| c6i.large | 2 | 2 | 6 | 
| c6i.xlarge | 4 | 4 | 16 | 
| c6i.2xlarge | 8 | 8 | 32 | 
| c6i.4xlarge | 8 | 16 | 64 | 
| c6i.8xlarge | 8 | 32 | 64 | 
| c6i.12xlarge | 8 | 32 | 64 | 
| c6i.16xlarge | 8 | 32 | 120 | 
| c6i.24xlarge | 8 | 32 | 120 | 
| c6i.32xlarge | 8 | 32 | 120 | 
| C6id | 
| c6id.large | 2 | 2 | 6 | 
| c6id.xlarge | 4 | 4 | 16 | 
| c6id.2xlarge | 8 | 8 | 32 | 
| c6id.4xlarge | 8 | 16 | 64 | 
| c6id.8xlarge | 8 | 32 | 64 | 
| c6id.12xlarge | 8 | 32 | 64 | 
| c6id.16xlarge | 8 | 32 | 120 | 
| c6id.24xlarge | 8 | 32 | 120 | 
| c6id.32xlarge | 8 | 32 | 120 | 
| C6in | 
| c6in.large | 2 | 2 | 6 | 
| c6in.xlarge | 4 | 4 | 16 | 
| c6in.2xlarge | 8 | 8 | 32 | 
| c6in.4xlarge | 8 | 16 | 64 | 
| c6in.8xlarge | 16 | 32 | 128 | 
| c6in.12xlarge | 16 | 32 | 128 | 
| c6in.16xlarge | 16 | 32 | 240 | 
| c6in.24xlarge | 32 | 32 | 480 | 
| c6in.32xlarge | 32 | 32 | 512 \$1 | 
| C8a | 
| c8a.medium | 1 | 1 | 3 | 
| c8a.large | 2 | 2 | 6 | 
| c8a.xlarge | 4 | 4 | 16 | 
| c8a.2xlarge | 8 | 8 | 32 | 
| c8a.4xlarge | 8 | 16 | 64 | 
| c8a.8xlarge | 8 | 32 | 128 | 
| c8a.12xlarge | 16 | 64 | 192 | 
| c8a.16xlarge | 16 | 64 | 256 | 
| c8a.24xlarge | 16 | 128 | 384 | 
| c8a.48xlarge | 32 | 128 | 768 | 
| c8a.metal-24xl | 16 | 128 | 384 | 
| c8a.metal-48xl | 32 | 128 | 768 | 
| C8gb | 
| c8gb.medium | 1 | 1 | 2 | 
| c8gb.large | 2 | 2 | 6 | 
| c8gb.xlarge | 4 | 4 | 16 | 
| c8gb.2xlarge | 8 | 8 | 32 | 
| c8gb.4xlarge | 8 | 16 | 64 | 
| c8gb.8xlarge | 8 | 32 | 128 | 
| c8gb.12xlarge | 16 | 64 | 192 | 
| c8gb.16xlarge | 16 | 64 | 256 | 
| c8gb.24xlarge | 16 | 128 | 384 | 
| c8gb.48xlarge | 32 | 128 | 768 \$1 | 
| c8gb.metal-24xl | 32 | 128 | 768 | 
| c8gb.metal-48xl | 32 | 128 | 768 \$1 | 
| C8gn | 
| c8gn.medium | 1 | 1 | 2 | 
| c8gn.large | 2 | 2 | 6 | 
| c8gn.xlarge | 4 | 4 | 16 | 
| c8gn.2xlarge | 8 | 8 | 32 | 
| c8gn.4xlarge | 8 | 16 | 64 | 
| c8gn.8xlarge | 8 | 32 | 128 | 
| c8gn.12xlarge | 16 | 64 | 192 | 
| c8gn.16xlarge | 16 | 64 | 256 | 
| c8gn.24xlarge | 16 | 128 | 384 | 
| c8gn.48xlarge | 32 | 128 | 768 \$1 | 
| c8gn.metal-24xl | 32 | 128 | 768 | 
| c8gn.metal-48xl | 32 | 128 | 768 \$1 | 
| C8i | 
| c8i.large | 2 | 2 | 6 | 
| c8i.xlarge | 4 | 4 | 16 | 
| c8i.2xlarge | 8 | 8 | 32 | 
| c8i.4xlarge | 8 | 16 | 64 | 
| c8i.8xlarge | 8 | 32 | 128 | 
| c8i.12xlarge | 16 | 64 | 192 | 
| c8i.16xlarge | 16 | 64 | 256 | 
| c8i.24xlarge | 16 | 128 | 384 | 
| c8i.32xlarge | 16 | 128 | 512 | 
| c8i.48xlarge | 32 | 128 | 768 | 
| c8i.96xlarge | 32 | 128 | 1536 | 
| c8i.metal-48xl | 32 | 128 | 768 | 
| c8i.metal-96xl | 32 | 128 | 1536 | 
| C8id | 
| c8id.large | 2 | 2 | 6 | 
| c8id.xlarge | 4 | 4 | 16 | 
| c8id.2xlarge | 8 | 8 | 32 | 
| c8id.4xlarge | 8 | 16 | 64 | 
| c8id.8xlarge | 8 | 32 | 128 | 
| c8id.12xlarge | 16 | 64 | 192 | 
| c8id.16xlarge | 16 | 64 | 256 | 
| c8id.24xlarge | 16 | 128 | 384 | 
| c8id.32xlarge | 16 | 128 | 512 | 
| c8id.48xlarge | 32 | 128 | 768 | 
| c8id.96xlarge | 32 | 128 | 1536 | 
| c8id.metal-48xl | 32 | 128 | 768 | 
| c8id.metal-96xl | 32 | 128 | 1536 | 
| C8i-flex | 
| c8i-flex.large | 1 | 1 | 3 | 
| c8i-flex.xlarge | 2 | 2 | 8 | 
| c8i-flex.2xlarge | 4 | 4 | 16 | 
| c8i-flex.4xlarge | 4 | 8 | 32 | 
| c8i-flex.8xlarge | 4 | 16 | 64 | 
| c8i-flex.12xlarge | 8 | 32 | 96 | 
| c8i-flex.16xlarge | 8 | 32 | 128 | 

**注記**  
\$1 これらのインスタンスタイプには複数のネットワークカードが搭載されています。他のインスタンスタイプには単一のネットワークカードが搭載されています。詳細については、「[ネットワークカード](using-eni.md#network-cards)」を参照してください。

### メモリ最適化
<a name="supported-instances-ena-queues-mo"></a>


| インスタンスタイプ | インターフェイスあたりのデフォルトの ENA キュー | インターフェイスあたりの最大 ENA キュー | インスタンスあたりの最大 ENA キュー | 
| --- | --- | --- | --- | 
| R6i | 
| r6i.large | 2 | 2 | 6 | 
| r6i.xlarge | 4 | 4 | 16 | 
| r6i.2xlarge | 8 | 8 | 32 | 
| r6i.4xlarge | 8 | 16 | 64 | 
| r6i.8xlarge | 8 | 32 | 64 | 
| r6i.12xlarge | 8 | 32 | 64 | 
| r6i.16xlarge | 8 | 32 | 120 | 
| r6i.24xlarge | 8 | 32 | 120 | 
| r6i.32xlarge | 8 | 32 | 120 | 
| R6id | 
| r6id.large | 2 | 2 | 6 | 
| r6id.xlarge | 4 | 4 | 16 | 
| r6id.2xlarge | 8 | 8 | 32 | 
| r6id.4xlarge | 8 | 16 | 64 | 
| r6id.8xlarge | 8 | 32 | 64 | 
| r6id.12xlarge | 8 | 32 | 64 | 
| r6id.16xlarge | 8 | 32 | 120 | 
| r6id.24xlarge | 8 | 32 | 120 | 
| r6id.32xlarge | 8 | 32 | 120 | 
| R6idn | 
| r6idn.large | 2 | 2 | 6 | 
| r6idn.xlarge | 4 | 4 | 16 | 
| r6idn.2xlarge | 8 | 8 | 32 | 
| r6idn.4xlarge | 8 | 16 | 64 | 
| r6idn.8xlarge | 16 | 32 | 128 | 
| r6idn.12xlarge | 16 | 32 | 128 | 
| r6idn.16xlarge | 16 | 32 | 240 | 
| r6idn.24xlarge | 32 | 32 | 480 | 
| r6idn.32xlarge | 32 | 32 | 512 \$1 | 
| R6in | 
| r6in.large | 2 | 2 | 6 | 
| r6in.xlarge | 4 | 4 | 16 | 
| r6in.2xlarge | 8 | 8 | 32 | 
| r6in.4xlarge | 8 | 16 | 64 | 
| r6in.8xlarge | 16 | 32 | 128 | 
| r6in.12xlarge | 16 | 32 | 128 | 
| r6in.16xlarge | 16 | 32 | 240 | 
| r6in.24xlarge | 32 | 32 | 480 | 
| r6in.32xlarge | 32 | 32 | 512 \$1 | 
| R8a | 
| r8a.medium | 1 | 1 | 3 | 
| r8a.large | 2 | 2 | 6 | 
| r8a.xlarge | 4 | 4 | 16 | 
| r8a.2xlarge | 8 | 8 | 32 | 
| r8a.4xlarge | 8 | 16 | 64 | 
| r8a.8xlarge | 8 | 32 | 128 | 
| r8a.12xlarge | 16 | 64 | 192 | 
| r8a.16xlarge | 16 | 64 | 256 | 
| r8a.24xlarge | 16 | 128 | 384 | 
| r8a.48xlarge | 32 | 128 | 768 | 
| r8a.metal-24xl | 16 | 128 | 384 | 
| r8a.metal-48xl | 32 | 128 | 768 | 
| R8gb | 
| r8gb.medium | 1 | 1 | 2 | 
| r8gb.large | 2 | 2 | 6 | 
| r8gb.xlarge | 4 | 4 | 16 | 
| r8gb.2xlarge | 8 | 8 | 32 | 
| r8gb.4xlarge | 8 | 16 | 64 | 
| r8gb.8xlarge | 8 | 32 | 128 | 
| r8gb.12xlarge | 16 | 64 | 192 | 
| r8gb.16xlarge | 16 | 64 | 256 | 
| r8gb.24xlarge | 16 | 128 | 384 | 
| r8gb.48xlarge | 32 | 128 | 768 \$1 | 
| r8gb.metal-24xl | 32 | 128 | 768 | 
| r8gb.metal-48xl | 32 | 128 | 768 \$1 | 
| R8gn | 
| r8gn.medium | 1 | 1 | 2 | 
| r8gn.large | 2 | 2 | 6 | 
| r8gn.xlarge | 4 | 4 | 16 | 
| r8gn.2xlarge | 8 | 8 | 32 | 
| r8gn.4xlarge | 8 | 16 | 64 | 
| r8gn.8xlarge | 8 | 32 | 128 | 
| r8gn.12xlarge | 16 | 64 | 192 | 
| r8gn.16xlarge | 16 | 64 | 256 | 
| r8gn.24xlarge | 16 | 128 | 384 | 
| r8gn.48xlarge | 32 | 128 | 768 \$1 | 
| r8gn.metal-24xl | 32 | 128 | 768 | 
| r8gn.metal-48xl | 32 | 128 | 768 \$1 | 
| R8i | 
| r8i.large | 2 | 2 | 6 | 
| r8i.xlarge | 4 | 4 | 16 | 
| r8i.2xlarge | 8 | 8 | 32 | 
| r8i.4xlarge | 8 | 16 | 64 | 
| r8i.8xlarge | 8 | 32 | 128 | 
| r8i.12xlarge | 16 | 64 | 192 | 
| r8i.16xlarge | 16 | 64 | 256 | 
| r8i.24xlarge | 16 | 128 | 384 | 
| r8i.32xlarge | 16 | 128 | 512 | 
| r8i.48xlarge | 32 | 128 | 768 | 
| r8i.96xlarge | 32 | 128 | 1536 | 
| r8i.metal-48xl | 32 | 128 | 768 | 
| r8i.metal-96xl | 32 | 128 | 1536 | 
| R8id | 
| r8id.large | 2 | 2 | 6 | 
| r8id.xlarge | 4 | 4 | 16 | 
| r8id.2xlarge | 8 | 8 | 32 | 
| r8id.4xlarge | 8 | 16 | 64 | 
| r8id.8xlarge | 8 | 32 | 128 | 
| r8id.12xlarge | 16 | 64 | 192 | 
| r8id.16xlarge | 16 | 64 | 256 | 
| r8id.24xlarge | 16 | 128 | 384 | 
| r8id.32xlarge | 16 | 128 | 512 | 
| r8id.48xlarge | 32 | 128 | 768 | 
| r8id.96xlarge | 32 | 128 | 1536 | 
| r8id.metal-48xl | 32 | 128 | 768 | 
| r8id.metal-96xl | 32 | 128 | 1536 | 
| R8i-flex | 
| r8i-flex.large | 1 | 1 | 3 | 
| r8i-flex.xlarge | 2 | 2 | 8 | 
| r8i-flex.2xlarge | 4 | 4 | 16 | 
| r8i-flex.4xlarge | 4 | 8 | 32 | 
| r8i-flex.8xlarge | 4 | 16 | 64 | 
| r8i-flex.12xlarge | 8 | 32 | 96 | 
| r8i-flex.16xlarge | 8 | 32 | 128 | 
| X8aedz | 
| x8aedz.large | 2 | 2 | 8 | 
| x8aedz.xlarge | 4 | 4 | 16 | 
| x8aedz.3xlarge | 4 | 16 | 48 | 
| x8aedz.6xlarge | 8 | 32 | 96 | 
| x8aedz.12xlarge | 8 | 64 | 192 | 
| x8aedz.24xlarge | 16 | 128 | 384 | 
| x8aedz.metal-12xl | 8 | 64 | 192 | 
| x8aedz.metal-24xl | 16 | 128 | 384 | 
| X8i | 
| x8i.large | 2 | 2 | 6 | 
| x8i.xlarge | 4 | 4 | 16 | 
| x8i.2xlarge | 8 | 8 | 32 | 
| x8i.4xlarge | 8 | 16 | 64 | 
| x8i.8xlarge | 8 | 32 | 128 | 
| x8i.12xlarge | 16 | 64 | 192 | 
| x8i.16xlarge | 16 | 64 | 256 | 
| x8i.24xlarge | 16 | 128 | 384 | 
| x8i.32xlarge | 16 | 128 | 512 | 
| x8i.48xlarge | 32 | 128 | 768 | 
| x8i.64xlarge | 32 | 128 | 1024 | 
| x8i.96xlarge | 32 | 128 | 1536 | 
| x8i.metal-48xl | 32 | 128 | 768 | 
| x8i.metal-96xl | 32 | 128 | 1536 | 

**注記**  
\$1 これらのインスタンスタイプには複数のネットワークカードが搭載されています。他のインスタンスタイプには単一のネットワークカードが搭載されています。詳細については、「[ネットワークカード](using-eni.md#network-cards)」を参照してください。

## キュー数の変更
<a name="modify"></a>

ENA キューの数は、AWS マネジメントコンソールまたは AWS CLI を使用して変更できます。AWS マネジメントコンソールでは、各 **[ネットワークインターフェイス]** 設定に ENA キューの設定があります。

AWS CLI を使用して ENA キューの数を変更するには、次のコマンドのいずれかを使用します。キュー数を変更する前に、以下のコマンドを使用して現在のキュー数を確認してください。

```
aws ec2 describe-instances --instance-id i-1234567890abcdef0
```

**注記**  
ENA キューの数を変更する前に、インスタンスを停止しておく必要があります。
ENA キューの値は、2 のべき乗 (1、2、4、8、16、32 など) にする必要があります。
単一の ENI に割り当てるキューの数は、インスタンスで利用できる vCPU の数を超えない必要があります。

`[attach-network-interface](https://docs.aws.amazon.com/cli/latest/reference/ec2/attach-network-interface.html)`

以下の例では、ENI に 32 個の ENA キューが設定されます。

```
aws ec2 attach-network-interface \
  --network-interface-id eni-001aa1bb223cdd4e4 \
  --instance-id i-1234567890abcdef0 \
  --device-index 1 \
  --ena-queue-count 32
```

`[run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html)`

以下の例では、3 個の ENI にそれぞれ 2 個の ENA キューが設定されます。

```
aws ec2 run-instances \
  --image-id ami-12ab3c30 \
  --instance-type c6i.large \
  --min-count 1 \
  --max-count 1 \
  --network-interfaces \
    "[{\"DeviceIndex\":0,\"SubnetId\":\"subnet-123456789012a345a\",\"EnaQueueCount\":2},
      {\"DeviceIndex\":1,\"SubnetId\":\"subnet-123456789012a345a\",\"EnaQueueCount\":2},
      {\"DeviceIndex\":2,\"SubnetId\":\"subnet-123456789012a345a\",\"EnaQueueCount\":2}]"
```

`[modify-network-interface-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-network-interface-attribute.html)`

以下の例では、ENI に 32 個の ENA キューが設定されます。

```
aws ec2 modify-network-interface-attribute \
--network-interface-id eni-1234567890abcdef0 \
--attachment AttachmentId=eni-attach-12345678,EnaQueueCount=32
```

以下の例では、ENA 数がデフォルト値にリセットされます。

```
aws ec2 modify-network-interface-attribute \
--network-interface-id eni-1234567890abcdef0 \
--attachment AttachmentId=eni-attach-12345678,DefaultEnaQueueCount=true
```

# Linux での ENA カーネルドライバーのトラブルシューティング
<a name="troubleshooting-ena"></a>

Elastic Network Adapter (ENA) は、オペレーティング システムのヘルスを向上し、予期しないハードウェア動作や障害による長期的な停止の可能性を減らすように設計されています。ENA アーキテクチャでは、デバイスやドライバーの障害がシステムに対して可能な限り透過的に保持されます。このトピックでは、ENA のトラブルシューティングについて説明します。

インスタンスに接続できない場合は、まず[接続に関する問題のトラブルシューティング](#ena-connectivity-issues)セクションを参照してください。

第 6 世代のインスタンスタイプに移行した後にパフォーマンスの低下が発生した場合は、記事「[ネットワークのパフォーマンスを最大限に引き出すには、EC2 インスタンスを第 6 世代インスタンスに移行する前、何をする必要がありますか?](https://repost.aws/knowledge-center/migrate-to-gen6-ec2-instance)」を参照してください。

インスタンスに接続できる場合、このトピックの以降のセクションに記載されている障害検出/復旧メカニズムを使用して診断情報を収集することができます。

**Topics**
+ [接続に関する問題のトラブルシューティング](#ena-connectivity-issues)
+ [キープアライブメカニズム](#ena-keep-alive)
+ [読み取りタイムアウトの登録](#register-read-timeout-ena)
+ [統計](#statistics-ena)
+ [syslog のドライバーエラーログ](#driver-error-logs-ena)
+ [最適とは言えない構成に関する通知](#ts-ena-sub-opt-config-notification)

## 接続に関する問題のトラブルシューティング
<a name="ena-connectivity-issues"></a>

拡張ネットワーキングを有効化しているときに接続が失われると、`ena` モジュールとインスタンスの現在実行中のカーネルの互換性が保たれない可能性があります。これは、特定のカーネルバージョンのモジュールをインストール (**dkms** を使用しないか、不適切な設定の **dkms.conf** ファイルを使用) したため、インスタンスカーネルが更新された場合に発生します。起動時にロードされるインスタンスカーネルにより、`ena` モジュールが正しくインストールされない場合、インスタンスがネットワークアダプタを認識せず、インスタンスが到達不可能になります。

PV インスタンスまたは AMI で拡張ネットワーキングを有効にすると、お使いのインスタンスにも到達できなくなります。

ENA を使用して拡張ネットワーキングを有効した後インスタンスが到達不可能になった場合、インスタンスの `enaSupport` 属性を無効にすると、ストックネットワークアダプタにフォールバックできます。

**ENA を使用して拡張ネットワーキングを無効にするには (EBS-backed インスタンス)**

1. ローカルコンピュータから、Amazon EC2 コンソール、[stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) コマンド (AWS CLI)、[Stop-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html) コマンドレット (AWS Tools for PowerShell) のいずれかを使用して、インスタンスを停止します。

1. ローカルコンピュータから、[modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) コマンドを `--no-ena-support`オプションと共に使用するか、[Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) コマンドレットを `-EnaSupport $false` パラメータ共に使用して、拡張ネットワーキング属性を無効にします。

1. ローカルコンピュータから、Amazon EC2 コンソール、[start-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) コマンド、[Start-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) コマンドレットのいずれかを使用して、インスタンスを停止します。

1. (オプション) インスタンスに接続し、`ena`のステップに従って、現在のカーネルバージョンを使用して [EC2 インスタンスで ENA による拡張ネットワーキングを有効にする](enhanced-networking-ena.md) モジュールの再インストールを試みます。<a name="disable-enhanced-networking-ena-instance-store"></a>

**ENA を使用して拡張ネットワーキングを無効にするには (Instance store-backed インスタンス)**

1. 「[Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md)」の説明に従って、新しい AMI を作成します。

1. AMI を登録するときは、[stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) コマンド (AWS CLI) に `--no-ena-support` オプションを、または [Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) コマンドレットに `-EnaSupport $false` パラメータを、必ず含めます。

## キープアライブメカニズム
<a name="ena-keep-alive"></a>

ENA デバイスは、キープアライブイベントを一定の速度 (通常は 1 秒に 1 回) で送信します。ENA ドライバーは、これらのキープアライブメッセージの存在を確認するウォッチドッグメカニズムを実装します。メッセージが存在する場合、ウォッチドッグが再実装されます。存在しない場合、ドライバーはデバイスで障害が発生したと判断し、次の処理を行います。
+ 現在の統計を syslog にダンプする
+ ENA デバイスをリセットする
+ ENA のドライバー状態をリセットする

上記のリセット手順を実行すると、トラフィックが短時間失われる可能性がありますが (TCP 接続は回復可能です)、ユーザーに影響は及びません。

ENA デバイスは、キープアライブ通知を送信しないことによりデバイスリセット手順を間接的にリクエストすることがあります。例えば、ENA デバイスが回復不可能な設定をロードした後に不明な状態になった場合などです。

リセット手順の例を以下に示します。

```
[18509.800135] ena 0000:00:07.0 eth1: Keep alive watchdog timeout. // The watchdog process initiates a reset
[18509.815244] ena 0000:00:07.0 eth1: Trigger reset is on		
[18509.825589] ena 0000:00:07.0 eth1: tx_timeout: 0 // The driver logs the current statistics
[18509.834253] ena 0000:00:07.0 eth1: io_suspend: 0
[18509.842674] ena 0000:00:07.0 eth1: io_resume: 0
[18509.850275] ena 0000:00:07.0 eth1: wd_expired: 1
[18509.857855] ena 0000:00:07.0 eth1: interface_up: 1
[18509.865415] ena 0000:00:07.0 eth1: interface_down: 0
[18509.873468] ena 0000:00:07.0 eth1: admin_q_pause: 0
[18509.881075] ena 0000:00:07.0 eth1: queue_0_tx_cnt: 0
[18509.888629] ena 0000:00:07.0 eth1: queue_0_tx_bytes: 0
[18509.895286] ena 0000:00:07.0 eth1: queue_0_tx_queue_stop: 0
.......
........
[18511.280972] ena 0000:00:07.0 eth1: free uncompleted tx skb qid 3 idx 0x7 // At the end of the down process, the driver discards incomplete packets.
[18511.420112] [ENA_COM: ena_com_validate_version] ena device version: 0.10 //The driver begins its up process
[18511.420119] [ENA_COM: ena_com_validate_version] ena controller version: 0.0.1 implementation version 1
[18511.420127] [ENA_COM: ena_com_admin_init] ena_defs : Version:[b9692e8] Build date [Wed Apr  6 09:54:21 IDT 2016]
[18512.252108] ena 0000:00:07.0: Device watchdog is Enabled
[18512.674877] ena 0000:00:07.0: irq 46 for MSI/MSI-X
[18512.674933] ena 0000:00:07.0: irq 47 for MSI/MSI-X
[18512.674990] ena 0000:00:07.0: irq 48 for MSI/MSI-X
[18512.675037] ena 0000:00:07.0: irq 49 for MSI/MSI-X
[18512.675085] ena 0000:00:07.0: irq 50 for MSI/MSI-X
[18512.675141] ena 0000:00:07.0: irq 51 for MSI/MSI-X
[18512.675188] ena 0000:00:07.0: irq 52 for MSI/MSI-X
[18512.675233] ena 0000:00:07.0: irq 53 for MSI/MSI-X
[18512.675279] ena 0000:00:07.0: irq 54 for MSI/MSI-X
[18512.772641] [ENA_COM: ena_com_set_hash_function] Feature 10 isn't supported
[18512.772647] [ENA_COM: ena_com_set_hash_ctrl] Feature 18 isn't supported
[18512.775945] ena 0000:00:07.0: Device reset completed successfully // The reset process is complete
```

## 読み取りタイムアウトの登録
<a name="register-read-timeout-ena"></a>

ENA アーキテクチャでは、Memory Mapped I/O (MMIO) の読み取りオペレーションの限定的に使用することが推奨されます。MMIO レジスタには、初期化手順中のみ ENA デバイスドライバーがアクセスします。

ドライバーログ (**dmesg** 出力にあります) が読み取りオペレーションの失敗を示している場合、互換性のないドライバーまたは適切にコンパイルされていないドライバー、ビジー状態のハードウェアドライバー、ハードウェア障害が原因の可能性があります。

読み取りオペレーションの失敗を示すログエントリが断続的に発生する場合は、問題とみなさないでください。この場合はドライバーによって再試行されます。ただし、読み取りの失敗を含むログエントリが連続して発生する場合は、ドライバーまたはハードウェアの問題を示しています。

タイムアウトによる読み取りオペレーション失敗を示すドライバーログエントリの例を以下に示します。

```
[ 47.113698] [ENA_COM: ena_com_reg_bar_read32] reading reg failed for timeout. expected: req id[1] offset[88] actual: req id[57006] offset[0] 
[ 47.333715] [ENA_COM: ena_com_reg_bar_read32] reading reg failed for timeout. expected: req id[2] offset[8] actual: req id[57007] offset[0] 
[ 47.346221] [ENA_COM: ena_com_dev_reset] Reg read32 timeout occurred
```

## 統計
<a name="statistics-ena"></a>

ネットワークパフォーマンスが不十分な場合やレイテンシーの問題がある場合、デバイス統計情報を取得して調査する必要があります。これらの統計は、以下に示すように **ethtool** を使用して取得できます。

```
[ec2-user ~]$ ethtool -S ethN
NIC statistics:
	tx_timeout: 0
	suspend: 0
	resume: 0
	wd_expired: 0
	interface_up: 1
	interface_down: 0
	admin_q_pause: 0
	bw_in_allowance_exceeded: 0
	bw_out_allowance_exceeded: 0
	pps_allowance_exceeded: 0
	conntrack_allowance_available: 450878
	conntrack_allowance_exceeded: 0
	linklocal_allowance_exceeded: 0
	queue_0_tx_cnt: 4329
	queue_0_tx_bytes: 1075749
	queue_0_tx_queue_stop: 0
	...
```

次のコマンド出力パラメータの説明を以下に示します。

`tx_timeout`: *N*  
Netdev ウォッチドッグがアクティブになった回数。

`suspend`: *N*  
ドライバーが停止操作を実行した回数。

`resume`: *N*  
ドライバーが再開操作を実行した回数。

`wd_expired`: *N*  
ドライバーが直近 3 秒以内にキープアライブイベントを受け取らなかった回数。

`interface_up`: *N*  
ENA インターフェイスが起動された回数。

`interface_down`: *N*  
ENA インターフェイスが停止された回数。

`admin_q_pause`: *N*  
管理キューが実行状態で見つからなかった回数。

`bw_in_allowance_exceeded`: *N*  
インバウンド集計帯域幅がインスタンスの最大値を超えたためにキューまたはドロップされたパケットの数。

`bw_out_allowance_exceeded`: *N*  
アウトバウンド集計帯域幅がインスタンスの最大値を超えたためにキューまたはドロップされたパケットの数。

`pps_allowance_exceeded`: *N*  
双方向 PPS がインスタンスの最大値を超えたためにキューまたはドロップされたパケットの数。\$1

`conntrack_allowance_available`: *N*  
そのインスタンスタイプの Connections Tracked 許容量に達する前にインスタンスが確立できる接続トラッキング数。Nitro ベースのインスタンスでのみ使用できます。FreeBSD インスタンスまたは DPDK 環境ではサポートされません。

`conntrack_allowance_exceeded`: *N*  
接続トラッキングがインスタンスの最大数を超え、新しい接続を確立できなかったためにドロップされたパケットの数。これにより、インスタンスとの間で送受信されるトラフィックのパケット損失が発生する可能性があります。

`linklocal_allowance_exceeded`: *N*  
ローカルプロキシサービスへのトラフィックの PPS がネットワークインターフェイスの最大値を超えたためにドロップされたパケットの数。これは、Amazon DNS サービス、インスタンスメタデータサービス、および Amazon Time Sync Service へのトラフィックに影響しますが、カスタム DNS リゾルバーへのトラフィックには影響しません。

`queue_N_tx_cnt`: *N*  
このキューの送信パケット数。

`queue_N_tx_bytes`: *N*  
このキューの送信バイト数。

`queue_N_tx_queue_stop`: *N*  
キュー *N* がいっぱいになって停止された回数。

`queue_N_tx_queue_wakeup`: *N*  
停止後にキュー *N* が再開された回数。

`queue_N_tx_dma_mapping_err`: *N*  
直接メモリアクセスエラーの数。この値が 0 の場合は、システムリソースが低いことを示しています。

`queue_N_tx_linearize`: *N*  
このキューに SKB 線形化が試行された回数。

`queue_N_tx_linearize_failed`: *N*  
このキューで SKB 線形化が失敗した回数。

`queue_N_tx_napi_comp`: *N*  
`napi` ハンドラーがこのキューの `napi_complete` を呼び出した回数。

`queue_N_tx_tx_poll`: *N*  
`napi` ハンドラーがこのキューにスケジュールされた回数。

`queue_N_tx_doorbells`: *N*  
このキューの送信ドアベルの数。

`queue_N_tx_prepare_ctx_err`: *N*  
このキューで `ena_com_prepare_tx` が失敗した回数。

`queue_N_tx_bad_req_id`: *N*  
このキューの `req_id` が無効です。有効な `req_id` は 0、マイナス `queue_size`、マイナス 1 です。

`queue_N_tx_llq_buffer_copy`: *N*  
このキューの llq エントリよりもヘッダーサイズが大きいパケットの数。

`queue_N_tx_missed_tx`: *N*  
このキューの未処理のパケット数。

`queue_N_tx_unmask_interrupt`: *N*  
このキューで tx 割り込みがマスク解除された回数。

`queue_N_rx_cnt`: *N*  
このキューで受信したパケット数。

`queue_N_rx_bytes`: *N*  
このキューの受信バイト数。

`queue_N_rx_rx_copybreak_pkt`: *N*  
rx キューが、このキューの rx\$1copybreak パケットサイズより小さいパケットを受信した回数。

`queue_N_rx_csum_good`: *N*  
rx キューが、チェックサムをチェックし、このキューに対して正しいパケットを受信した回数。

`queue_N_rx_refil_partial`: *N*  
ドライバーが rx キューの空いている部分にこのキューのバッファーを補充できなかった回数。この値が 0 でない場合、メモリリソースが低いことを示しています。

`queue_N_rx_bad_csum`: *N*  
`rx` キューに、このキューの不良なチェックサムがあった回数 (rx チェックサムオフロードがサポートされている場合のみ)。

`queue_N_rx_page_alloc_fail`: *N*  
このキューのページ割り当てに失敗した回数。この値が 0 でない場合、メモリリソースが低いことを示しています。

`queue_N_rx_skb_alloc_fail`: *N*  
このキューの SKB 割り当てに失敗した回数。この値が 0 でない場合、システムリソースが低いことを示しています。

`queue_N_rx_dma_mapping_err`: *N*  
直接メモリアクセスエラーの数。この値が 0 の場合は、システムリソースが低いことを示しています。

`queue_N_rx_bad_desc_num`: *N*  
パケットあたりのバッファーが多すぎます。この値が 0 でない場合、バッファーの使用量が非常に少ないことを示しています。

`queue_N_rx_bad_req_id`: *N*  
このキューの req\$1id は無効です。有効な req\$1id は [0, queue\$1size - 1 ] です。

`queue_N_rx_empty_rx_ring`: *N*  
このキューの rx キューが空だった回数。

`queue_N_rx_csum_unchecked`: *N*  
rx キューが、このキューに対してチェックサムがチェックされなかったパケットを受信した回数。

`queue_N_rx_xdp_aborted`: *N*  
XDP パケットが XDP\$1ABORT として分類された回数。

`queue_N_rx_xdp_drop`: *N*  
XDP パケットが XDP\$1DROP として分類された回数。

`queue_N_rx_xdp_pass`: *N*  
XDP パケットが XDP\$1PASS として分類された回数。

`queue_N_rx_xdp_tx`: *N*  
XDP パケットが XDP\$1TX として分類された回数。

`queue_N_rx_xdp_invalid`: *N*  
パケットの XDP リターンコードが無効な回数。

`queue_N_rx_xdp_redirect`: *N*  
XDP パケットが XDP\$1REDIRECT として分類された回数。

`queue_N_xdp_tx_cnt`: *N*  
このキューの送信パケット数。

`queue_N_xdp_tx_bytes`: *N*  
このキューの送信バイト数。

`queue_N_xdp_tx_queue_stop`: *N*  
このキューがいっぱいになって停止した回数。

`queue_N_xdp_tx_queue_wakeup`: *N*  
停止後にこのキューが再開された回数。

`queue_N_xdp_tx_dma_mapping_err`: *N*  
直接メモリアクセスエラーの数。この値が 0 の場合は、システムリソースが低いことを示しています。

`queue_N_xdp_tx_linearize`: *N*  
このキューに XDP バッファ線形化が試行された回数。

`queue_N_xdp_tx_linearize_failed`: *N*  
このキューで XDP バッファ線形化が失敗した回数。

`queue_N_xdp_tx_napi_comp`: *N*  
このキューで napi ハンドラーが napi\$1complete を呼び出した回数。

`queue_N_xdp_tx_tx_poll`: *N*  
このキューで napi ハンドラーがスケジュールされた回数。

`queue_N_xdp_tx_doorbells`: *N*  
このキューの送信ドアベルの数。

`queue_N_xdp_tx_prepare_ctx_err`: *N*  
このキューで ena\$1com\$1prepare\$1tx が失敗した回数。この値は、常に 0 になる必要があります。そうでない場合はドライバーログを参照してください。

`queue_N_xdp_tx_bad_req_id`: *N*  
このキューの req\$1id は無効です。有効な req\$1id は [0, queue\$1size - 1 ] です。

`queue_N_xdp_tx_llq_buffer_copy`: *N*  
このキューの llq バッファコピーを使用してヘッダーをコピーしたパケット数。

`queue_N_xdp_tx_missed_tx`: *N*  
tx キューエントリがこのキューの完了タイムアウトを逃した回数。

`queue_N_xdp_tx_unmask_interrupt`: *N*  
このキューで tx 割り込みがマスク解除された回数。

`ena_admin_q_aborted_cmd`: *N*  
中断された管理コマンドの数。これは、通常自動リカバリ手順中に発生します。

`ena_admin_q_submitted_cmd`: *N*  
管理者キューのドアベルの数。

`ena_admin_q_completed_cmd`: *N*  
管理者キューの完了数。

`ena_admin_q_out_of_space`: *N*  
ドライバーが新しい管理コマンドの送信を試みたが、キューがいっぱいであった回数。

`ena_admin_q_no_completion`: *N*  
ドライバーが管理コマンドの完了を取得しなかった回数。

## syslog のドライバーエラーログ
<a name="driver-error-logs-ena"></a>

ENA ドライバーは、システム起動時にログメッセージを **syslog** に書き込みます。問題が発生した場合、これらのログを調べてエラーを探すことができます。システム起動時に ENA ドライバーにより **syslog** に記録される情報の例と、特定のメッセージの注釈の一部を以下に示します。

```
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  478.416939] [ENA_COM: ena_com_validate_version] ena device version: 0.10
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  478.420915] [ENA_COM: ena_com_validate_version] ena controller version: 0.0.1 implementation version 1
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.256831] ena 0000:00:03.0: Device watchdog is Enabled
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.672947] ena 0000:00:03.0: creating 8 io queues. queue size: 1024
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.680885] [ENA_COM: ena_com_init_interrupt_moderation] Feature 20 isn't supported  // Interrupt moderation is not supported by the device
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.691609] [ENA_COM: ena_com_get_feature_ex] Feature 10 isn't supported // RSS HASH function configuration is not supported by the device
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.694583] [ENA_COM: ena_com_get_feature_ex] Feature 18 isn't supported //RSS HASH input source configuration is not supported by the device 
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.697433] [ENA_COM: ena_com_set_host_attributes] Set host attribute isn't supported
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.701064] ena 0000:00:03.0 (unnamed net_device) (uninitialized): Cannot set host attributes
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  479.704917] ena 0000:00:03.0: Elastic Network Adapter (ENA) found at mem f3000000, mac addr 02:8a:3c:1e:13:b5 Queues 8
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  480.805037] EXT4-fs (xvda1): re-mounted. Opts: (null)
Jun  3 22:37:46 ip-172-31-2-186 kernel: [  481.025842] NET: Registered protocol family 10
```

**無視可能なエラー**  
システムのエラーログに記録される可能性がある以下のエラーは、Elastic Network Adapter では無視できます。

ホスト属性の設定がサポートされない  
ホスト属性は、このデバイスではサポートされていません。

rx キューのバッファの割り当てに失敗した  
これは復元可能なエラーであり、エラーがスローされたときにメモリプレッシャーの問題が発生した可能性があることを示します。

機能* X *はサポートされていない  
言及されている機能は、Elastic Network Adapter ではサポートされていません。*X* に指定できる値は、以下のとおりです。  
+ 10: RSS ハッシュ関数設定は、このデバイスではサポートされていません。
+ 12: RSS 間接テーブル設定は、このデバイスではサポートされていません。
+ 18: RSS ハッシュ入力設定は、このデバイスではサポートされていません。
+ 20: 割り込みモデレーションは、このデバイスではサポートされていません。
+ 27: Elastic Network Adapter ドライバーは、snmpd によるイーサネット機能のポーリングをサポートしていません。

AENQ の設定に失敗した  
Elastic Network Adapter では、AENQ 設定がサポートされていません。

サポートされていない AENQ のイベントを設定しようとしている  
このエラーは、Elastic Network Adapter によりサポートされていない AENQ イベントグループを設定しようとしたことを示しています。

## 最適とは言えない構成に関する通知
<a name="ts-ena-sub-opt-config-notification"></a>

ENA デバイスは、変更可能なドライバー内の最適ではない構成設定を検出します。デバイスは ENA ドライバーに通知し、コンソールに警告を記録します。次の例は、警告メッセージの形式を示しています。

```
Sub-optimal configuration notification code: 1. Refer to AWS ENA documentation for additional details and mitigation options.
```

次のリストは、通知コードの詳細と、最適ではない構成が検出された場合の推奨アクションを示しています。
+ **コード 1: ワイド LLQ 設定の ENA Express は推奨されません**

  ENA Express ENI はワイド LLQ で設定されています。この構成は最適とは言えず、ENA Express のパフォーマンスに影響を与える可能性があります。ENA Express ENI を使用するときは、次のようにワイド LLQ 設定を無効にすることをお勧めします。

  ```
  sudo rmmod ena && sudo modprobe ena force_large_llq_header=0
  ```

  ENA Express の最適な構成の詳細については、「[ENA Express を使用して EC2 インスタンス間のネットワークパフォーマンスを高める](ena-express.md)」を参照してください。
+ **コード 2: Tx キューの深さが最適ではない ENA Express ENI は推奨されません**

  ENA Express ENI が最適ではない Tx キューの深さで設定されています。この設定はENA Express のパフォーマンスに影響を与える可能性があります。ENA Express ENI を使用する際は次のようにすべての Tx キューをネットワークインターフェイスの最大値に拡大することをお勧めします。

  以下の **ethtool** コマンドを実行すると、LLQ サイズを調整できます。Wide-LLQ を制御、クエリ、有効化する方法の詳細については、Amazon Drivers GitHub リポジトリで、ENA 用 Linux カーネルドライバードキュメントの「[ラージローレイテンシーキュー (Large LLQ)](https://github.com/amzn/amzn-drivers/tree/master/kernel/linux/ena#large-low-latency-queue-large-llq)」トピックを参照してください。

  ```
  ethtool -g interface
  ```

  Tx キューを最大の深度に設定します。

  ```
  ethtool -G interface tx depth
  ```

  ENA Express の最適な構成の詳細については、「[ENA Express を使用して EC2 インスタンス間のネットワークパフォーマンスを高める](ena-express.md)」を参照してください。
+ **コード 3: 通常の LLQ サイズの ENA および Tx パケットトラフィックは、ヘッダーがサポートする最大サイズを超えています**

  デフォルトでは、ENA LLQ は最大 96 バイトの Tx パケットヘッダーサイズをサポートします。パケットヘッダーのサイズが 96 バイトを超えると、パケットはドロップされます。この問題を軽減するには、Wide-LLQ を有効にすることをお勧めします。これにより、サポートされる Tx パケットヘッダーサイズが最大 224 バイトに増加します。

  ただし、Wide-LLQ を有効にすると、Tx リングの最大サイズは 1000 エントリから 512 エントリに減少します。Wide-LLQ は Nitro v4 以降のすべてのインスタンスタイプでデフォルトで有効になっています。
  + Nitro v4 インスタンスタイプのデフォルトの最大 Wide-LLQ Tx リングサイズは 512 エントリで、これを変更することはできません。
  + Nitro v5 インスタンスタイプのデフォルトの最大 Wide-LLQ Tx リングサイズは 512 エントリで、最大 1000 エントリまで増加できます。

  以下の **ethtool** コマンドを実行すると、LLQ サイズを調整できます。Wide-LLQ を制御、クエリ、有効化する方法の詳細については、Amazon Drivers GitHub リポジトリで、ENA 用 Linux カーネルドライバードキュメントの「[ラージローレイテンシーキュー (Large LLQ)](https://github.com/amzn/amzn-drivers/tree/master/kernel/linux/ena#large-low-latency-queue-large-llq)」トピックを参照してください。

  Tx キューの最大深度を特定します。

  ```
  ethtool -g interface
  ```

  Tx キューを最大の深度に設定します。

  ```
  ethtool -G interface tx depth
  ```

# エラスティックネットワークアダプタ Windows ドライバーのトラブルシューティング
<a name="troubleshoot-ena-driver"></a>

エラスティックネットワークアダプタ (ENA) はオペレーティングシステムのヘルスを向上し、Windows インスタンスのオペレーションを中断させる可能性のある予期しないハードウェア動作や障害を減らすように設計されています。ENA アーキテクチャではデバイスやドライバーの障害がオペレーティングシステムに対して可能な限り透過的に保持されます。

## インスタンスの診断情報を収集する
<a name="ts-ena-drv-collect-diagnostics"></a>

Windows オペレーティングシステム (OS) ツールを開く手順はインスタンスにインストールされている OS のバージョンによって異なります。以下のセクションでは**[Run]** (実行) ダイアログでツールを開きます。このツールはすべての OS バージョンで同じ動作をします。ただし、これらのツールには任意の方法を使用してアクセスできます。

**[Run] (実行) ダイアログにアクセスする**
+ Windows ロゴのキーの組み合わせを使用する: `Windows` \$1 `R`
+ 検索バーを使用する:
  + 検索バーに「`run`」と入力してください。
  + 検索結果から **[Run]** (実行) アプリケーションを選択してください。

一部の手順ではプロパティまたはコンテキスト依存アクションにアクセスするためにコンテキストメニューが必要です。OS のバージョンとハードウェアに応じて、いくつかの方法があります。

**コンテキストメニューにアクセスする**
+ マウスを使用する: 項目を右クリックしてコンテキストメニューを表示します。
+ キーボードを使用する:
  + お使いの OS のバージョンに応じて、`Shift` \$1 `F10`、または `Ctrl` \$1 `Shift` \$1 `F10` を使用します。
  + キーボードにコンテキストキー (ボックス内の 3 本の水平線) がある場合は目的の項目を選択し、コンテキストキーを押します。

インスタンスに接続できる場合は次の方法を使用してトラブルシューティング用の診断情報を収集します。

### ENA デバイスのステータスを確認する
<a name="ts-ena-diagnostics-device-mgr"></a>

Windows デバイスマネージャーを使用して ENA Windows ドライバーのステータスを確認するには次の手順に従います。

1. 前のセクションで説明されているいずれかの方法を使用して **[Run]** (実行) ダイアログを開きます。

1. Windows デバイスマネージャーを開くには**[Run]** (実行) ボックスに `devmgmt.msc` と入力してください。

1. [**OK**] を選択してください。デバイスマネージャーウィンドウが開きます。

1. **[ネットワークアダプター]** の左側にある矢印を選択してリストを展開します。

1. 名前を選択するか、**[Amazonエラスティックネットワークアダプター]** のコンテキストメニューを開き、**[プロパティ]** を選択してください。これにより、**[Amazon エラスティックネットワークアダプタ のプロパティ]** ダイアログが開きます。

1. **[全般]** タブに「このデバイスは正常に動作しています」というメッセージが表示されていることを確認します。

### ドライバーイベントメッセージを調査する
<a name="ts-ena-diagnostics-event-log"></a>

Windows イベントビューアーを使用して ENA Windows ドライバーイベントログを確認するには次の手順を実行します。

1. 前のセクションで説明されているいずれかの方法を使用して **[Run]** (実行) ダイアログを開きます。

1. Windows イベントビューアーを開くには**[Run]** (実行) ボックスに `eventvwr.msc` と入力してください。

1. [**OK**] を選択してください。これにより、イベントビューアー ウィンドウが開きます。

1. **[Windows Logs]** (Windows ログ) メニューを展開し、**[System]** (システム) を選択してください。

1. **[アクションs]** (アクション) の右上のパネルで、**[Filter Current Log]** (現在のログをフィルター) を選択してください。これにより、フィルタリングダイアログが表示されます。

1. **[Event sources]** (イベントソース) ボックスに `ena` と入力してください。これにより、ENA Windows ドライバーによって生成されたイベントに結果が制限されます。

1. [**OK**] を選択してください。これにより、フィルターされたイベントログの結果がウィンドウの詳細セクションに表示されます。

1. 詳細をドリルダウンするにはリストからイベントメッセージを選択してください。

次の例はWindows イベントビューアーのシステムイベントリスト内の ENA ドライバーイベントを示しています。

![\[例: Windows イベントビューアーのシステムメッセージリストに表示される ENA ドライバーイベント。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ena-event-viewer-example.png)


#### イベントメッセージの概要
<a name="ts-ena-diagnostics-event-messages"></a>

次の表に、ENA Windows ドライバーが生成するイベントメッセージを示します。


**Input**  

| Event ID | ENA ドライバーイベントの説明 | タイプ | 
| --- | --- | --- | 
| 5001 | ハードウェアのリソースが不足しています | エラー | 
| 5002 | アダプタがハードウェアエラーを検出しました | エラー | 
| 5005 | タイムリーに完了しなかった NDIS 操作でアダプタがタイムアウトしました | エラー | 
| 5032 | アダプタがデバイスをリセットできませんでした | エラー | 
| 5200 | アダプタが初期化されました | 情報 | 
| 5201 | アダプタが停止されました | 情報 | 
| 5202 | アダプタが一時停止されました | 情報 | 
| 5203 | アダプタが再起動されました | 情報 | 
| 5204 | アダプタがシャットダウンされました | 情報 | 
| 5205 | アダプタがリセットされました | エラー | 
| 5206 | アダプタが突然取り外されました | エラー | 
| 5208 | アダプタ初期化ルーチンが失敗しました | エラー | 
| 5210 | アダプタが内部問題を検出し、正常に回復しました | エラー | 

### パフォーマンスメトリクスを確認する
<a name="ts-ena-diagnostics-perf-metrics"></a>

ENA Windows ドライバーはメトリクスが有効になっているインスタンスからネットワークパフォーマンスメトリクスを発行します。ネイティブのパフォーマンスモニターアプリケーションを使用して、インスタンスのメトリクスを表示および有効化できます。ENA Windows ドライバーが生成するメトリクスの詳細については[EC2 インスタンスでの ENA 設定のネットワークパフォーマンスのモニタリング](monitoring-network-performance-ena.md)を参照してください。

ENA メトリクスが有効で、Amazon CloudWatch エージェントがインストールされているインスタンスではCloudWatch は Windows パフォーマンスモニターのカウンターに関連付けられているメトリクスと ENA の高度なメトリクスを収集します。これらのメトリクスはEC2 インスタンスでデフォルトで有効になっているメトリクスに加えて収集されます。これらのメトリクスの詳細については「Amazon CloudWatch ユーザーガイド」**の[「CloudWatch エージェントにより収集されるメトリクス」](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html)を参照してください。

**注記**  
パフォーマンスメトリクスはENA ドライバーのバージョン 2.4.0 以降 (バージョン 2.2.3 でも使用可能) で使用できます。ENA ドライバーのバージョン 2.2.4 は第 6 世代 EC2 インスタンスでパフォーマンスが低下する可能性があるためロールバックされました。新バージョンに更新されていることを確認するため、ドライバーを最新バージョンにアップグレードすることをお勧めします。

パフォーマンスメトリクスを使用できる方法には次のようなものがあります。
+ インスタンスのパフォーマンスの問題をトラブルシューティングします。
+ ワークロードに適したインスタンスサイズを選択してください。
+ スケーリングアクティビティをプロアクティブに計画します。
+ アプリケーションをベンチマークして、インスタンスで使用可能なパフォーマンスを最大化するかどうかを判断します。

**更新レート**  
デフォルトではドライバーは 1 秒間隔でメトリクスを更新します。ただし、メトリクスを取得するアプリケーションはポーリングに別の間隔を使用する場合があります。更新間隔はデバイスマネージャーで、ドライバーの詳細プロパティを使用して変更できます。

ENA Windows ドライバーのメトリクスの更新間隔を変更するには次の手順を実行します。

1. 前のセクションで説明されているいずれかの方法を使用して **[Run]** (実行) ダイアログを開きます。

1. Windows デバイスマネージャーを開くには**[Run]** (実行) ボックスに `devmgmt.msc` と入力してください。

1. [**OK**] を選択してください。デバイスマネージャーウィンドウが開きます。

1. **[ネットワークアダプター]** の左側にある矢印を選択してリストを展開します。

1. 名前を選択するか、**[Amazonエラスティックネットワークアダプター]** のコンテキストメニューを開き、**[プロパティ]** を選択してください。これにより、**[Amazon エラスティックネットワークアダプタ のプロパティ]** ダイアログが開きます。

1. ポップアップウィンドウで **[Advanced]** (詳細) タブを開きます。

1. **[Property]** (プロパティ) リストから、**[Metrics Refresh Interval]** (メトリクス更新間隔) を選択して値を変更します。

1. 終了したら、**[OK]** を選択してください。

## 最適とは言えない設定に関する通知を確認する
<a name="ts-ena-win-sub-opt-config-notification"></a>

ENA デバイスは変更可能なドライバー内の最適ではない構成設定を検出します。デバイスは ENA ドライバーに通知し、イベント通知をログに記録します。Windows イベントビューアーで最適でないイベントを確認するには

1. 前のセクションで説明されているいずれかの方法を使用して **[Run]** (実行) ダイアログを開きます。

1. Windows イベントビューアーを開くには**[Run]** (実行) ボックスに `eventvwr.msc` と入力してください。

1. [**OK**] を選択してください。これにより、イベントビューアー ウィンドウが開きます。

1. **[Windows Logs]** (Windows ログ) メニューを展開し、**[System]** (システム) を選択してください。

1. **[アクションs]** (アクション) の右上のパネルで、**[Filter Current Log]** (現在のログをフィルター) を選択してください。これにより、フィルタリングダイアログが表示されます。

1. **[Event sources]** (イベントソース) ボックスに `ena` と入力してください。これにより、ENA Windows ドライバーによって生成されたイベントに結果が制限されます。

1. [**OK**] を選択してください。これにより、フィルターされたイベントログの結果がウィンドウの詳細セクションに表示されます。

ID `59000` のイベントは最適ではない設定に関する検出結果を通知します。イベントを右クリックして **[イベントのプロパティ]** を選択すると詳細ビューが開きます。または**[表示]** メニューから **[プレビューペイン]** を選択すると、同じ詳細を表示できます。

![\[例: Windows イベントビューアーのプレビューペインに表示されるシステムイベント ID 59000。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ena-sub-opt-event-general.png)


イベントコードを表示するには**[詳細]** タブを開きます。**[バイナリデータ: 単語]** セクションでは最後の単語がコードです。

![\[例: [バイナリデータ] セクションの最後の単語が強調表示されます。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ena-sub-opt-event-detail.png)


次のリストは通知コードの詳細と、最適ではない構成が検出された場合の推奨アクションを示しています。
+ **コード `1`: ワイド LLQ 構成の ENA Express は推奨されません。**

  ENA Express ENI はワイド LLQ で設定されています。この構成は最適とは言えず、ENA Express のパフォーマンスに影響を与える可能性があります。ENA Express ENI を使用するときは次のようにワイド LLQ 設定を無効にすることをお勧めします。

  1. Windows デバイスマネージャーを開くには**[Run]** (実行) ボックスに `devmgmt.msc` と入力してください。

  1. [**OK**] を選択してください。デバイスマネージャーウィンドウが開きます。

  1. **[Network adapters]** (ネットワークアダプタ) の左側にある矢印を選択してリストを展開します。

  1. `Amazon Elastic Network Adapter` のデバイスプロパティを開きます。

  1. そこから、**[詳細設定]** タブを開いて変更を加えます。

  1. **[LLQ ヘッダーサイズポリシー]** プロパティを選択し、その値を `Normal (128 Bytes)` に設定します。

  1. **OK** を選択して変更を保存します。
+ **コード `2`: Tx キューの深さが最適ではない ENA Express ENI は推奨されません**

  ENA Express ENI が最適ではない Tx キューの深さで設定されています。この設定はENA Express のパフォーマンスに影響を与える可能性があります。ENA Express ENI を使用する際は次のようにすべての Tx キューをネットワークインターフェイスの最大値に拡大することをお勧めします。

  これらのステップに従って、Tx キューを最大の深さまで拡大します:

  1. Windows デバイスマネージャーを開くには**[Run]** (実行) ボックスに `devmgmt.msc` と入力してください。

  1. [**OK**] を選択してください。デバイスマネージャーウィンドウが開きます。

  1. **[Network adapters]** (ネットワークアダプタ) の左側にある矢印を選択してリストを展開します。

  1. `Amazon Elastic Network Adapter` のデバイスプロパティを開きます。

  1. そこから、**[詳細設定]** タブを開いて変更を加えます。

  1. **[送信バッファ]** プロパティを選択し、サポートされている最大値にその値を設定します。

  1. **OK** を選択して変更を保存します。

## ENA アダプタのリセット
<a name="ts-ena-drv-reset"></a>

リセットプロセスはENA Windows ドライバーがアダプタのエラーを検出し、アダプタを異常としてマークすると開始されます。ドライバー自体をリセットできないため、アダプタのヘルスステータスを確認し、ENA Windows ドライバーのリセットハンドルを呼び出すのはオペレーティングシステムによって異なります。リセットプロセスでは短時間、トラフィック損失が発生することがあります。ただし、TCP 接続は回復できるはずです。

ENA アダプタはキープアライブ通知の送信に失敗して、間接的にデバイスのリセット手順を要求することもあります。例えば、ENA アダプタが回復不可能な設定をロードした後に不明な状態になった場合、ENA アダプタがキープアライブ通知の送信を停止することがあります。

**ENA アダプタのリセットの一般的な原因**
+ キープアライブメッセージが見つからない

  ENA アダプタはキープアライブイベントを一定の速度 (通常は 1 秒に 1 回) で送信します。ENA Windows ドライバーはこれらのキープアライブメッセージの存在を定期的に確認するウォッチドッグメカニズムを実装します。前回チェックしてから新しいメッセージを 1 つ以上検出すると、成功した結果が記録されます。それ以外の場合、ドライバーはデバイスに障害が発生したと結論付け、リセットシーケンスを開始します。
+ パケットが送信キューにスタックしている

  ENA アダプタはパケットが送信キューを予期したとおりに流れていることを確認します。ENA Windows ドライバーはパケットがスタックしているかどうかを検出し、パケットがスタックしている場合はリセットシーケンスを開始します。
+ Memory Mapped I/O (MMIO) レジスターの読み取りタイムアウト

  Memory Mapped I/O (MMIO) の読み取りオペレーションを制限するために、ENA Windows ドライバーは初期化およびリセットプロセス中にのみ MMIO レジスターにアクセスします。ドライバーがタイムアウトを検出すると、実行中のプロセスに応じて、次のいずれかのアクションが実行されます。
  + 初期化中にタイムアウトが検出されると、フローが失敗し、Windows デバイスマネージャーで ENA アダプタによってドライバーに黄色の感嘆符が表示されます。
  + リセット中にタイムアウトが検出されると、フローは失敗します。その後、OS は ENA アダプタの突然の取り外しを開始し、取り外したアダプタを停止して起動することで回復します。ネットワークインターフェイスカード (NIC) の突然の取り外しの詳細については*「Microsoft Windows ハードウェア開発者向けドキュメント」*の[「NIC の突然の取り外しの処理」](https://learn.microsoft.com/en-us/windows-hardware/drivers/network/handling-the-surprise-removal-of-a-nic)を参照してください。

## トラブルシューティングシナリオ
<a name="ts-ena-drv-scenarios"></a>

ENA Windows ドライバーで発生する可能性のある問題のトラブルシューティングには以下のシナリオが役立ちます。最新バージョンがない場合はENA ドライバーのアップグレードから始めることをお勧めします。Windows OS のバージョン用の最新のドライバーを検索するには[ENA Windows ドライバーのバージョンリリースを追跡する](ena-driver-releases-windows.md)を参照してください。

### 予期しない ENA ドライバーのバージョンがインストールされました
<a name="ts-ena-drv-sc-unexpected-vsn"></a>

#### 説明
<a name="ts-ena-drv-sc-unexpected-vsn-descr"></a>

特定のバージョンの ENA ドライバーをインストールするステップを実行すると、Windows デバイスマネージャーはWindows が別のバージョンの ENA ドライバーをインストールしたことを表示します。

#### 原因
<a name="ts-ena-drv-sc-unexpected-vsn-cause"></a>

ドライバーパッケージのインストールを実行すると、Windows は開始前にローカル[ドライバーストア](https://learn.microsoft.com/en-us/windows-hardware/drivers/install/driver-store)内の特定のデバイスのために、有効なすべてのドライバーパッケージをランク付けします。その後、ランクの値が最も低いパッケージが最適なものとして選択されます。これはインストールする予定のパッケージとは異なる場合があります。デバイスドライバーパッケージの選択プロセスの詳細についてはMicrosoft ドキュメントウェブサイトの[「Windows がデバイスのドライバーパッケージを選択する方法」](https://learn.microsoft.com/en-us/windows-hardware/drivers/install/how-windows-selects-a-driver-for-a-device)を参照してください。

#### ソリューション
<a name="ts-ena-drv-sc-unexpected-vsn-solution"></a>

選択したドライバーパッケージバージョンを Windows が確実にインストールするようにするには[PnPUtil](https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/pnputil) コマンドラインツールを使用して、ドライバーストアから下位ランクのドライバーパッケージを削除します。

ENA ドライバーを更新するには次のステップを実行します。

1. インスタンスに接続してローカル管理者としてログインします。

1. 「[ENA デバイスのステータスを確認する](#ts-ena-diagnostics-device-mgr)」セクションの説明に従って、[Device Manager] (デバイスマネージャー) プロパティウィンドウを開きます。これにより、**[Amazon エラスティックネットワークアダプタ のプロパティ]** ウィンドウの **[全般]** タブが開きます。

1. **[Driver]** (ドライバー) タブを開きます。

1. [**更新 Driver**] を選択してください。これにより、**[ドライバーソフトウェアを更新 - Amazon エラスティックネットワークアダプタ]** ダイアログボックスが開きます。

   1. **[ドライバーソフトウェアをどのように検索しますか?]** セクションで、**[コンピュータを参照してドライバーソフトウェアを探す]** を選択してください。

   1. **[コンピュータ上のドライバーソフトウェアを参照]** ページで、検索バーの下にある **[コンピュータ上のデバイスドライバーのリストから選択]** を選択してください。

   1. **[このハードウェア用にインストールするデバイスドライバーを選択]** ページで、**[ディスク使用...]** を選択してください。

   1. **[ディスクからインストール]** ウィンドウで、ドロップダウンリストからファイルの場所の横にある **[参照...]** を選択してください。

   1. ターゲット ENA ドライバーパッケージをダウンロードした場所に移動します。`ena.inf` という名前のファイルを選択し、**[開く]** を選択してください。

   1. インストールを開始するには**[OK]**、**[次へ]** の順に選択してください。

1. インストーラーがインスタンスを自動的に再起動しない場合は**Restart-Computer** PowerShell コマンドレットを実行します。

   ```
   PS C:\> Restart-Computer
   ```

### ENA ドライバーのデバイス警告
<a name="ts-ena-drv-sc-device-warn"></a>

#### 説明
<a name="ts-ena-drv-sc-device-warn-descr"></a>

デバイスマネージャーの **[Network adapters]** (ネットワークアダプタ) セクションの ENA アダプタアイコンには警告記号 (感嘆符が入った黄色の三角形) が表示されます。

次の例はWindows デバイスマネージャーで警告アイコンが表示された ENA アダプタを示しています。

![\[例: Windows デバイスマネージャーに表示された、警告アイコンが付いた ENA アダプタ。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ena-adapter-device-mgr-warn.png)


#### 原因
<a name="ts-ena-drv-sc-device-warn-cause"></a>

このデバイスの警告は一般に、環境の問題によって引き起こされ、さらに調査が必要になる可能性があり、根本的な原因を特定するために消去プロセスが必要になることがよくあります。デバイス エラーの完全なリストについては、Microsoft ドキュメントの [Device Manager Error Messages](https://learn.microsoft.com/en-us/windows-hardware/drivers/install/device-manager-error-messages) を参照してください。

#### ソリューション
<a name="ts-ena-drv-sc-device-warn-solution"></a>

このデバイス警告の解決策は根本原因によって異なります。ここで説明する消去プロセスには単純な解決策がある可能性のある最も一般的な問題を特定して解決するためのいくつかの基本的なステップが含まれています。これらのステップで問題が解決しない場合は追加の根本原因分析が必要です。

一般的な問題を特定して解決するには次のステップを実行します。

1. 

**デバイスを停止して起動する**

   「[ENA デバイスのステータスを確認する](#ts-ena-diagnostics-device-mgr)」セクションの説明に従って、[Device Manager] (デバイスマネージャー) プロパティウィンドウを開きます。これにより、**[Amazon エラスティックネットワークアダプタ Properties]** (Amazon エラスティックネットワークアダプタ のプロパティ) ウィンドウの **[General]** (全般) タブが開きます。その **[Device status]** (デバイスの状態) にエラーコードと短いメッセージが表示されます。

   1. **[Driver]** (ドライバー) タブを開きます。

   1. **[Disable Device]** (デバイスを無効にする) を選択し、表示される警告メッセージに対して **[Yes]** (はい) を選択してください。

   1. **[Enable Device]** (デバイスを有効にする) を選択してください。

1. 

**EC2 インスタンスを停止して起動する**

   依然としてデバイスマネージャーでアダプタに警告アイコンが表示されている場合は次のステップとして、EC2 インスタンスを停止して起動します。これにより、ほとんどの場合、別のハードウェアでインスタンスが再起動されます。

1. 

**インスタンスリソースの問題の可能性を調査する**

   EC2 インスタンスを停止して起動しても問題が解決しない場合はメモリ不足など、インスタンスのリソースの問題を示している可能性があります。

### アダプタのリセットによる接続タイムアウト (エラーコード 5007、5205)
<a name="ts-ena-drv-sc-conn"></a>

#### 説明
<a name="ts-ena-drv-sc-conn-descr"></a>

Windows イベントビューアーにはENA アダプタの併用で発生する、アダプタのタイムアウトイベントとリセットイベントが表示されます。メッセージは次の例のように表示されます。
+ **Event ID 5007 (イベント ID 5007)**: Amazon エラスティックネットワークアダプタ : Timed out during an operation. (操作中にタイムアウトしました。)
+ **Event ID 5205 (イベント ID 5205)**: Amazon エラスティックネットワークアダプタ : Adapter reset has been started. (アダプタのリセットが開始されました。)

アダプタのリセットにより、最小限のトラフィックの中断が発生します。複数回リセットされても、重大なネットワークの中断を引き起こすのは異常です。

#### 原因
<a name="ts-ena-drv-sc-conn-cause"></a>

この一連のイベントはENA Windows ドライバーが、応答しなくなった ENA アダプタのリセットを開始したことを示します。ただし、デバイスドライバーがこの問題を検出するために使用するメカニズムはCPU 0 の枯渇による誤検出の影響を受けます。

#### ソリューション
<a name="ts-ena-drv-sc-conn-solution"></a>

このようなエラーの組み合わせが頻繁に発生する場合はリソースの割り当てを調べて、どこを調整するのがよいか確認してください。

1. 前のセクションで説明されているいずれかの方法を使用して **[Run]** (実行) ダイアログを開きます。

1. Windows リソースモニターを開くには**[Run]** (実行) ボックスに `resmon` と入力してください。

1. [**OK**] を選択してください。これにより、[Resource Monitor] (リソースモニター) ウィンドウが開きます。

1. **[CPU]** タブを開きます。CPU ごとの使用率グラフは[Resource Monitor] (リソースモニター) ウィンドウの右側に表示されます。

1. CPU 0 の使用率レベルをチェックして、それらが高すぎるかどうかを確認します。

大きなインスタンスタイプ (16 vCPU より大きい) では ENA アダプタの CPU 0 を除外するように RSS を設定することをお勧めします。インスタンスタイプが小さい場合はRSS を設定するとエクスペリエンスが向上する可能性がありますが、使用可能なコア数が少なくなるため、CPU コアの制約がパフォーマンスに悪影響を及ぼさないようにするためのテストが必要です。

以下の例に示すように、**Set-NetAdapterRss** コマンドを使用して ENA アダプタの RSS を設定します。

```
Set-NetAdapterRss -name (Get-NetAdapter | Where-Object {$_.InterfaceDescription -like "*Elastic*"}).Name -Baseprocessorgroup 0 -BaseProcessorNumber 1
```

### 第 6 世代のインスタンスインフラストラクチャへの移行がパフォーマンスまたはアタッチメントに影響する
<a name="ts-ena-drv-6gen-instance-perf"></a>

#### 説明
<a name="ts-ena-drv-6gen-instance-perf-descr"></a>

第 6 世代の EC2 インスタンスに移行すると、ENA Windows ドライバーのバージョンを更新していない場合、パフォーマンスが低下したり、ENA アタッチメントエラーが発生したりする可能性があります。

#### 原因
<a name="ts-ena-drv-6gen-instance-perf-cause"></a>

インスタンスのオペレーティングシステム (OS) に基づき、第 6 世代の EC2 インスタンスタイプには次の ENA Windows ドライバーの最小バージョンが必要です。


**最小バージョン**  

| Windows サーバー バージョン | ENA ドライバーバージョン | 
| --- | --- | 
|  Windows サーバー 2008 R2  |  2.2.3 または 2.4.0  | 
|  Windows サーバー 2012 以降  |  2.2.3 以降  | 
|  Windows ワークステーション  |  2.2.3 以降  | 

#### ソリューション
<a name="ts-ena-drv-6gen-instance-perf-solution"></a>

第 6 世代の EC2 インスタンスにアップグレードする前に、起動する AMI に前の表に示したインスタンス OS に基づく互換性のあるドライバーがあることを確認してください。詳細についてはAWS re:Post「ナレッジセンター」の[「ネットワークのパフォーマンスを最大限に引き出すにはEC2 インスタンスを第 6 世代インスタンスに移行する前、何をする必要がありますか?」](https://repost.aws/knowledge-center/migrate-to-gen6-ec2-instance)を参照してください。

### Elastic Network Interface の最適でないパフォーマンス
<a name="ts-ena-drv-interface-perf"></a>

#### 説明
<a name="ts-ena-drv-interface-perf-descr"></a>

ENA インターフェイスが期待どおりに動作していません。

#### 原因
<a name="ts-ena-drv-interface-perf-cause"></a>

パフォーマンス問題の根本原因の分析は消去プロセスです。関連する変数が多すぎて一般的な原因を挙げることはできません。

#### ソリューション
<a name="ts-ena-drv-interface-perf-solution"></a>

根本原因の分析の最初のステップとして、期待どおりに動作していないインスタンスの診断情報を確認し、問題の原因となっている可能性のあるエラーがあるかどうかを判断します。詳細については「[インスタンスの診断情報を収集する](#ts-ena-drv-collect-diagnostics)」セクションを参照してください。

ネットワーキングが拡張されたインスタンスで最大のネットワークパフォーマンスを実現するにはデフォルトのオペレーティングシステムの設定を変更することが必要になる場合があります。いくつかの最適化 (チェックサムオフロードをオンにして RSS を有効にするなど) は公式の Windows AMI でデフォルトで設定されています。ENA アダプタに適用できるその他の最適化については「[ENA アダプタのパフォーマンス調整](#ts-ena-drv-perf-adj)」に示すパフォーマンス調整を参照してください。

慎重に作業を進め、デバイスプロパティの調整を、このセクションに記載されている内容や、AWS サポートチームが推奨する特定の変更に限定することをお勧めします。

ENA アダプタのプロパティを変更するには次のステップに従います。

1. 前のセクションで説明されているいずれかの方法を使用して **[Run]** (実行) ダイアログを開きます。

1. Windows デバイスマネージャーを開くには**[Run]** (実行) ボックスに `devmgmt.msc` と入力してください。

1. [**OK**] を選択してください。デバイスマネージャーウィンドウが開きます。

1. **[ネットワークアダプター]** の左側にある矢印を選択してリストを展開します。

1. 名前を選択するか、**[Amazonエラスティックネットワークアダプター]** のコンテキストメニューを開き、**[プロパティ]** を選択してください。これにより、**[Amazon エラスティックネットワークアダプタ のプロパティ]** ダイアログが開きます。

1. 変更するには**[詳細設定]** タブを開きます。

1. 完了したら、**[OK]** を選択して変更を保存します。

次の例はWindows デバイスマネージャーの ENA アダプタプロパティを示しています。

![\[例: Windows デバイスマネージャーに表示される ENA アダプタプロパティ。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ena-adapter-device-mgr-property.png)


##### ENA アダプタのパフォーマンス調整
<a name="ts-ena-drv-perf-adj"></a>

次の表に、ENA インターフェイスのパフォーマンスを向上させるために調整できるプロパティを示します。


**Input**  

| プロパティ | 説明 | デフォルトの値 | 調整 | 
| --- | --- | --- | --- | 
|  Receive Buffers  |  ソフトウェア受信キューのエントリ数を制御します。  |  1024  |  最大 8192 まで増やすことができます。  | 
|  Receive Side Scaling (RSS)  |  マルチプロセッサシステムの複数の CPU 間でネットワーク受信処理を効率的に配分できます。  |  有効  |  負荷を複数のプロセッサに分散させることができます。詳細については[EC2 Windows インスタンスでのネットワークパフォーマンスを最適化する](enhanced-networking-os.md)を参照してください。  | 
|  RSS キューの最大数  |  `RSS` が有効な場合に許可する RSS キューの最大数を設定します。  |  32  |  RSS キューの数はドライバーの初期化中に決定され、(特に) 次のような制限があります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/troubleshoot-ena-driver.html) インスタンスとハードウェアの世代の制限に応じて、値を 1～32 に設定できます。詳細については[EC2 Windows インスタンスでのネットワークパフォーマンスを最適化する](enhanced-networking-os.md)を参照してください。  | 
|  Jumbo packet  |  ジャンボイーサネットフレーム (1500 バイトを超えるペイロード) の使用を有効にします。  |  無効 (ペイロードは 1500 バイト以下に制限されます)  |  値は最大 `9015` まで設定できます。これは 9001 バイトのペイロードに相当します。これがジャンボイーサネットフレームの最大ペイロードとなります。[ジャンボイーサネットフレームの使用に関する考慮事項](#ts-ena-drv-jumbo-frames)を参照してください。  | 

##### ジャンボイーサネットフレームの使用に関する考慮事項
<a name="ts-ena-drv-jumbo-frames"></a>

ジャンボフレームではパケットあたりのペイロードサイズを拡張し、パケットオーバーヘッド以外のパケットの割合を高めることによって、1500 バイトを超えるデータを送信できます。同じ量の使用可能なデータを少ないパケットで送信することができます。ただし次の場合にはトラフィックの MTU は最大 1500 に制限されます。
+ EC2 Classic 用の特定の AWS リージョン外部にあるトラフィック
+ 単一の VPC の外部にあるトラフィック
+ リージョン間 VPC ピアリング接続経由のトラフィック
+ VPN 接続経由のトラフィック
+ インターネットゲートウェイ経由のトラフィック

**注記**  
1500 バイトを超えるパケットはフラグメント化されます。IP ヘッダーに `Don't Fragment` フラグが設定されている場合、それらのパケットはドロップされます。  
ジャンボフレームを、インターネットバウンドトラフィックや VPC を出るトラフィックに使用する場合には慎重に行ってください。パケットは中間システムによってフラグメント化されるため、このトラフィックの速度が低下します。VPC から出るアウトバウンドトラフィックに影響を与えずに VPC 内でジャンボフレームを使用するには次のいずれかのオプションを試してください。  
ルートごとに MTU サイズを設定します。
異なる MTU サイズと異なるルートを持つ複数のネットワークインターフェイスを使用します。

**ジャンボフレームの推奨ユースケース**  
ジャンボフレームはVPC 内および VPC 間のトラフィックに役立ちます。次のユースケースにはジャンボフレームを使用することをお勧めします。
+ クラスタープレイスメントグループ内にコロケーションされたインスタンスでは考えられる最大のネットワークスループットを実現するうえでジャンボフレームが役立ちます。詳細については[Amazon EC2 インスタンスのプレイスメントグループ](placement-groups.md)を参照してください。
+ Direct Connect を経由した VPC とオンプレミスのネットワーク間のトラフィックにはジャンボフレームを使用できます。Direct Connect の使用、およびジャンボフレーム機能の検証の詳細についてはDirect Connect 「ユーザーガイド」**の[「プライベート仮想インターフェイスまたはトランジット仮想インターフェイスのネットワーク MTU の設定」](https://docs.aws.amazon.com/directconnect/latest/UserGuide/WorkingWithVirtualInterfaces.html#set-jumbo-frames-vif.html)を参照してください。
+ トランジットゲートウェイでサポートされる MTU サイズの詳細については[「Amazon VPC トランジットゲートウェイ」](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-quotas.html#mtu-quota)の*「トランジットゲートウェイ のクォータ」*を参照してください。

# ENA Express を使用して EC2 インスタンス間のネットワークパフォーマンスを高める
<a name="ena-express"></a>

ENA Express は、AWS スケーラブルで信頼性の高いデータグラム (SRD) テクノロジーを搭載しています。SRD は、動的ルーティングを使用してスループットを向上させ、テールレイテンシーを最小限に抑える高性能なネットワークトランスポートプロトコルです。ENA Express を使用すると、同じアベイラビリティゾーン内の 2 つの EC2 インスタンス間で通信できます。

**ENA Express の利点**
+ アベイラビリティーゾーン内で 1 つのフローで使用できる集約インスタンスの制限までの最大帯域幅を、5 Gbps から 25 Gbps に拡大します。
+ 特にネットワーク負荷が高い期間に、EC2 インスタンス間のネットワークトラフィックのテールレイテンシーを短縮します。
+ 混雑したネットワークパスを検出して回避します。
+ 受信側でのパケットの並べ替えや、必要とされるほとんどの再送信など、一部のタスクをネットワーク層で直接処理します。これにより、アプリケーション層が解放され、他の作業に充てることができるようになります。

**注記**  
アプリケーションが 1 秒間に大量のパケットを送受信し、ほとんどの場合、特にネットワークに輻輳がない時間帯にレイテンシーを最適化する必要がある場合は、[拡張ネットワーク](enhanced-networking.md) の方がネットワークに適している場合があります。
ローカルゾーン内で 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 までに制限されます。
+ 実行時間が長いプロセスでは、ネットワークが混雑している間のテールレイテンシーが減少するはずです。
+ プロセスには、ネットワークの応答時間をよりスムーズに、より標準的にディストリビューションできるという利点があります。

**Topics**
+ [ENA Express の仕組み](#ena-express-how-it-works)
+ [ENA Express でサポートされるインスタンスタイプ](#ena-express-supported-instance-types)
+ [Linux インスタンスの前提条件](#ena-express-prereq-linux)
+ [Linux インスタンスで ENA Express 設定のパフォーマンスをチューニングする](#ena-express-tune)
+ [EC2 インスタンスの ENA Express 設定を確認する](ena-express-list-view.md)
+ [ご使用の EC2 インスタンスに適した ENA Express を設定する](ena-express-configure.md)

## ENA Express の仕組み
<a name="ena-express-how-it-works"></a>

ENA Express は、AWS スケーラブルで信頼性の高いデータグラム (SRD) テクノロジーを搭載しています。各ネットワークフローのパケットをさまざまな AWS ネットワークパスに分散し、輻輳の兆候を検出すると配信を動的に調整します。また、受信側でのパケットの並べ替えも管理します。

ENA Express がネットワークトラフィックを意図したとおりに管理できるようにするには、送受信インスタンスと受信側インスタンス間の通信が次の要件をすべて満たしている必要があります。
+ 送信側と受信側の両方のインスタンスタイプがサポートされています。詳細については、[ENA Express でサポートされるインスタンスタイプ](#ena-express-supported-instance-types)の表を参照してください。
+ 送信側と受信側の両方のインスタンスに ENA Express が設定されている必要があります。設定に違いがあると、トラフィックがデフォルトで標準の ENA 送信になる状況が発生する可能性があります。発生し得る状況を次のシナリオで説明します。

  **シナリオ: 設定の違い**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ena-express.html)

  この場合、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 ドライバーのベストプラクティスとパフォーマンス最適化ガイド](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/ENA_Linux_Best_Practices.rst)」を参照してください。

**注記**  
Amazon EC2 では、インスタンスとそれにアタッチされたネットワークインターフェイスとの関係をアタッチメントと呼びます。ENA Express の設定がアタッチメントに適用されます。ネットワークインターフェースがインスタンスからデタッチされると、アタッチメントは存在しなくなり、そのアタッチメントに適用されていた ENA Express 設定は無効になります。ネットワークインターフェースが残っていても、インスタンスが終了した場合、同様になります。

送信側と受信側の両方のインスタンスでネットワークインターフェイスをアタッチできるように ENA Express を有効にすると、インスタンスが SRD テクノロジーで実現されるパフォーマンス向上を全面的に享受できることを、ENA Express メトリクスを使用して容易に確認できます。ENA Express のメトリクスに関する詳細は、[ENA Express のメトリクス](monitoring-network-performance-ena.md#network-performance-metrics-ena-express)を参照してください。

## ENA Express でサポートされるインスタンスタイプ
<a name="ena-express-supported-instance-types"></a>

次のインスタンスタイプが ENA Express をサポートしています。

------
#### [ General purpose ]


| インスタンスタイプ | アーキテクチャ | 
| --- | --- | 
| m6a.12xlarge | x86\$164 | 
| m6a.16xlarge | x86\$164 | 
| m6a.24xlarge | x86\$164 | 
| m6a.32xlarge | x86\$164 | 
| m6a.48xlarge | x86\$164 | 
| m6a.metal | x86\$164 | 
| m6i.8xlarge | x86\$164 | 
| m6i.12xlarge | x86\$164 | 
| m6i.16xlarge | x86\$164 | 
| m6i.24xlarge | x86\$164 | 
| m6i.32xlarge | x86\$164 | 
| m6i.metal | x86\$164 | 
| m6id.8xlarge | x86\$164 | 
| m6id.12xlarge | x86\$164 | 
| m6id.16xlarge | x86\$164 | 
| m6id.24xlarge | x86\$164 | 
| m6id.32xlarge | x86\$164 | 
| m6id.metal | x86\$164 | 
| m6idn.8xlarge | x86\$164 | 
| m6idn.12xlarge | x86\$164 | 
| m6idn.16xlarge | x86\$164 | 
| m6idn.24xlarge | x86\$164 | 
| m6idn.32xlarge | x86\$164 | 
| m6idn.metal | x86\$164 | 
| m6in.8xlarge | x86\$164 | 
| m6in.12xlarge | x86\$164 | 
| m6in.16xlarge | x86\$164 | 
| m6in.24xlarge | x86\$164 | 
| m6in.32xlarge | x86\$164 | 
| m6in.metal | x86\$164 | 
| m7a.12xlarge | x86\$164 | 
| m7a.16xlarge | x86\$164 | 
| m7a.24xlarge | x86\$164 | 
| m7a.32xlarge | x86\$164 | 
| m7a.48xlarge | x86\$164 | 
| m7a.metal-48xl | x86\$164 | 
| m7g.12xlarge | arm64 | 
| m7g.16xlarge | arm64 | 
| m7g.metal | arm64 | 
| m7gd.12xlarge | arm64 | 
| m7gd.16xlarge | arm64 | 
| m7gd.metal | arm64 | 
| m7i.12xlarge | x86\$164 | 
| m7i.16xlarge | x86\$164 | 
| m7i.24xlarge | x86\$164 | 
| m7i.48xlarge | x86\$164 | 
| m7i.metal-24xl | x86\$164 | 
| m7i.metal-48xl | x86\$164 | 
| m8a.16xlarge | x86\$164 | 
| m8a.24xlarge | x86\$164 | 
| m8a.48xlarge | x86\$164 | 
| m8a.metal-24xl | x86\$164 | 
| m8a.metal-48xl | x86\$164 | 
| m8azn.12xlarge | x86\$164 | 
| m8azn.24xlarge | x86\$164 | 
| m8azn.metal-12xl | x86\$164 | 
| m8azn.metal-24xl | x86\$164 | 
| 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\$164 | 
| m8i.32xlarge | x86\$164 | 
| m8i.48xlarge | x86\$164 | 
| m8i.96xlarge | x86\$164 | 
| m8i.metal-48xl | x86\$164 | 
| m8i.metal-96xl | x86\$164 | 
| m8id.24xlarge | x86\$164 | 
| m8id.32xlarge | x86\$164 | 
| m8id.48xlarge | x86\$164 | 
| m8id.96xlarge | x86\$164 | 
| m8id.metal-48xl | x86\$164 | 
| m8id.metal-96xl | x86\$164 | 

------
#### [ Compute optimized ]


| インスタンスタイプ | アーキテクチャ | 
| --- | --- | 
| c6a.12xlarge | x86\$164 | 
| c6a.16xlarge | x86\$164 | 
| c6a.24xlarge | x86\$164 | 
| c6a.32xlarge | x86\$164 | 
| c6a.48xlarge | x86\$164 | 
| c6a.metal | x86\$164 | 
| c6gn.4xlarge | arm64 | 
| c6gn.8xlarge | arm64 | 
| c6gn.12xlarge | arm64 | 
| c6gn.16xlarge | arm64 | 
| c6i.8xlarge | x86\$164 | 
| c6i.12xlarge | x86\$164 | 
| c6i.16xlarge | x86\$164 | 
| c6i.24xlarge | x86\$164 | 
| c6i.32xlarge | x86\$164 | 
| c6i.metal | x86\$164 | 
| c6id.8xlarge | x86\$164 | 
| c6id.12xlarge | x86\$164 | 
| c6id.16xlarge | x86\$164 | 
| c6id.24xlarge | x86\$164 | 
| c6id.32xlarge | x86\$164 | 
| c6id.metal | x86\$164 | 
| c6in.8xlarge | x86\$164 | 
| c6in.12xlarge | x86\$164 | 
| c6in.16xlarge | x86\$164 | 
| c6in.24xlarge | x86\$164 | 
| c6in.32xlarge | x86\$164 | 
| c6in.metal | x86\$164 | 
| c7a.12xlarge | x86\$164 | 
| c7a.16xlarge | x86\$164 | 
| c7a.24xlarge | x86\$164 | 
| c7a.32xlarge | x86\$164 | 
| c7a.48xlarge | x86\$164 | 
| c7a.metal-48xl | x86\$164 | 
| 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\$164 | 
| c7i.16xlarge | x86\$164 | 
| c7i.24xlarge | x86\$164 | 
| c7i.48xlarge | x86\$164 | 
| c7i.metal-24xl | x86\$164 | 
| c7i.metal-48xl | x86\$164 | 
| c8a.16xlarge | x86\$164 | 
| c8a.24xlarge | x86\$164 | 
| c8a.48xlarge | x86\$164 | 
| c8a.metal-24xl | x86\$164 | 
| c8a.metal-48xl | x86\$164 | 
| 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\$164 | 
| c8i.32xlarge | x86\$164 | 
| c8i.48xlarge | x86\$164 | 
| c8i.96xlarge | x86\$164 | 
| c8i.metal-48xl | x86\$164 | 
| c8i.metal-96xl | x86\$164 | 
| c8id.24xlarge | x86\$164 | 
| c8id.32xlarge | x86\$164 | 
| c8id.48xlarge | x86\$164 | 
| c8id.96xlarge | x86\$164 | 
| c8id.metal-48xl | x86\$164 | 
| c8id.metal-96xl | x86\$164 | 

------
#### [ Memory optimized ]


| インスタンスタイプ | アーキテクチャ | 
| --- | --- | 
| r6a.12xlarge | x86\$164 | 
| r6a.16xlarge | x86\$164 | 
| r6a.24xlarge | x86\$164 | 
| r6a.32xlarge | x86\$164 | 
| r6a.48xlarge | x86\$164 | 
| r6a.metal | x86\$164 | 
| r6i.8xlarge | x86\$164 | 
| r6i.12xlarge | x86\$164 | 
| r6i.16xlarge | x86\$164 | 
| r6i.24xlarge | x86\$164 | 
| r6i.32xlarge | x86\$164 | 
| r6i.metal | x86\$164 | 
| r6id.8xlarge | x86\$164 | 
| r6id.12xlarge | x86\$164 | 
| r6id.16xlarge | x86\$164 | 
| r6id.24xlarge | x86\$164 | 
| r6id.32xlarge | x86\$164 | 
| r6id.metal | x86\$164 | 
| r6idn.8xlarge | x86\$164 | 
| r6idn.12xlarge | x86\$164 | 
| r6idn.16xlarge | x86\$164 | 
| r6idn.24xlarge | x86\$164 | 
| r6idn.32xlarge | x86\$164 | 
| r6idn.metal | x86\$164 | 
| r6in.8xlarge | x86\$164 | 
| r6in.12xlarge | x86\$164 | 
| r6in.16xlarge | x86\$164 | 
| r6in.24xlarge | x86\$164 | 
| r6in.32xlarge | x86\$164 | 
| r6in.metal | x86\$164 | 
| r7a.12xlarge | x86\$164 | 
| r7a.16xlarge | x86\$164 | 
| r7a.24xlarge | x86\$164 | 
| r7a.32xlarge | x86\$164 | 
| r7a.48xlarge | x86\$164 | 
| r7a.metal-48xl | x86\$164 | 
| r7g.12xlarge | arm64 | 
| r7g.16xlarge | arm64 | 
| r7g.metal | arm64 | 
| r7gd.12xlarge | arm64 | 
| r7gd.16xlarge | arm64 | 
| r7gd.metal | arm64 | 
| r7i.12xlarge | x86\$164 | 
| r7i.16xlarge | x86\$164 | 
| r7i.24xlarge | x86\$164 | 
| r7i.48xlarge | x86\$164 | 
| r7i.metal-24xl | x86\$164 | 
| r7i.metal-48xl | x86\$164 | 
| r7iz.8xlarge | x86\$164 | 
| r7iz.12xlarge | x86\$164 | 
| r7iz.16xlarge | x86\$164 | 
| r7iz.32xlarge | x86\$164 | 
| r7iz.metal-16xl | x86\$164 | 
| r7iz.metal-32xl | x86\$164 | 
| r8a.16xlarge | x86\$164 | 
| r8a.24xlarge | x86\$164 | 
| r8a.48xlarge | x86\$164 | 
| r8a.metal-24xl | x86\$164 | 
| r8a.metal-48xl | x86\$164 | 
| 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\$164 | 
| r8i.32xlarge | x86\$164 | 
| r8i.48xlarge | x86\$164 | 
| r8i.96xlarge | x86\$164 | 
| r8i.metal-48xl | x86\$164 | 
| r8i.metal-96xl | x86\$164 | 
| r8id.24xlarge | x86\$164 | 
| r8id.32xlarge | x86\$164 | 
| r8id.48xlarge | x86\$164 | 
| r8id.96xlarge | x86\$164 | 
| r8id.metal-48xl | x86\$164 | 
| r8id.metal-96xl | x86\$164 | 
| u7i-6tb.112xlarge | x86\$164 | 
| u7i-8tb.112xlarge | x86\$164 | 
| u7i-12tb.224xlarge | x86\$164 | 
| u7in-16tb.224xlarge | x86\$164 | 
| u7in-24tb.224xlarge | x86\$164 | 
| u7in-32tb.224xlarge | x86\$164 | 
| u7inh-32tb.480xlarge | x86\$164 | 
| x2idn.16xlarge | x86\$164 | 
| x2idn.24xlarge | x86\$164 | 
| x2idn.32xlarge | x86\$164 | 
| x2idn.metal | x86\$164 | 
| x2iedn.8xlarge | x86\$164 | 
| x2iedn.16xlarge | x86\$164 | 
| x2iedn.24xlarge | x86\$164 | 
| x2iedn.32xlarge | x86\$164 | 
| x2iedn.metal | x86\$164 | 
| x8g.12xlarge | arm64 | 
| x8g.16xlarge | arm64 | 
| x8g.24xlarge | arm64 | 
| x8g.48xlarge | arm64 | 
| x8g.metal-24xl | arm64 | 
| x8g.metal-48xl | arm64 | 
| x8aedz.24xlarge | x86\$164 | 
| x8aedz.metal-24xl | x86\$164 | 
| x8i.24xlarge | x86\$164 | 
| x8i.32xlarge | x86\$164 | 
| x8i.48xlarge | x86\$164 | 
| x8i.64xlarge | x86\$164 | 
| x8i.96xlarge | x86\$164 | 
| x8i.metal-48xl | x86\$164 | 
| x8i.metal-96xl | x86\$164 | 

------
#### [ Accelerated computing ]


| インスタンスタイプ | アーキテクチャ | 
| --- | --- | 
| g6.48xlarge | x86\$164 | 
| g6e.12xlarge | x86\$164 | 
| g6e.24xlarge | x86\$164 | 
| g6e.48xlarge | x86\$164 | 
| g7e.12xlarge | x86\$164 | 
| g7e.24xlarge | x86\$164 | 
| g7e.48xlarge | x86\$164 | 
| p5.4xlarge | x86\$164 | 
| p5.48xlarge | x86\$164 | 
| p5e.48xlarge | x86\$164 | 
| p5en.48xlarge | x86\$164 | 
| p6-b200.48xlarge | x86\$164 | 
| p6-b300.48xlarge | x86\$164 | 

------
#### [ Storage optimized ]


| インスタンスタイプ | アーキテクチャ | 
| --- | --- | 
| i4g.4xlarge | arm64 | 
| i4g.8xlarge | arm64 | 
| i4g.16xlarge | arm64 | 
| i4i.8xlarge | x86\$164 | 
| i4i.12xlarge | x86\$164 | 
| i4i.16xlarge | x86\$164 | 
| i4i.24xlarge | x86\$164 | 
| i4i.32xlarge | x86\$164 | 
| i4i.metal | x86\$164 | 
| i7i.12xlarge | x86\$164 | 
| i7i.16xlarge | x86\$164 | 
| i7i.24xlarge | x86\$164 | 
| i7i.48xlarge | x86\$164 | 
| i7i.metal-24xl | x86\$164 | 
| i7i.metal-48xl | x86\$164 | 
| i7ie.12xlarge | x86\$164 | 
| i7ie.18xlarge | x86\$164 | 
| i7ie.24xlarge | x86\$164 | 
| i7ie.48xlarge | x86\$164 | 
| i7ie.metal-24xl | x86\$164 | 
| i7ie.metal-48xl | x86\$164 | 
| 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 インスタンスの前提条件
<a name="ena-express-prereq-linux"></a>

ENA Express を効果的に動作させるには、以下のように Linux インスタンスの設定を更新します。
+ インスタンスでジャンボフレームを使用している場合は、次のコマンドを実行して最大送信単位 (MTU) を `8900` に設定します。

  ```
  [ec2-user ~]$ sudo ip link set dev eth0 mtu 8900
  ```
+ 受信側 (Rx) のリングサイズを次のように大きくします。

  ```
  [ec2-user ~]$ ethtool -G device rx 8192
  ```
+ ENA Expressの帯域幅を最大化するには、TCP キュー制限を次のように設定します。

  1. TCP の小規模なキューの制限を 1 MB 以上に設定します。これにより、ソケット上で送信キューのデータが増えます。

     ```
     sudo sh -c 'echo 1048576 > /proc/sys/net/ipv4/tcp_limit_output_bytes'
     ```

  1. お使いの 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 TCP トラフィックの遅延を最小限に抑えるには、TCP 自動コーキング機能を無効にします。これにより、パケットオーバーヘッドがわずかに増加する可能性があります。

  ```
  sudo bash -c 'echo 0 > /proc/sys/net/ipv4/tcp_autocorking'
  ```

## Linux インスタンスで ENA Express 設定のパフォーマンスをチューニングする
<a name="ena-express-tune"></a>

Linux インスタンス構成で ENA Express の最適なパフォーマンスを確認するには、Amazon GitHub リポジトリにある次のスクリプトを実行します。

[https://github.com/amzn/amzn-ec2-ena-utilities/blob/main/ena-express/check-ena-express-settings.sh](https://github.com/amzn/amzn-ec2-ena-utilities/blob/main/ena-express/check-ena-express-settings.sh)

このスクリプトは一連のテストを実行し、推奨設定変更および必須設定変更を提案します。

# EC2 インスタンスの ENA Express 設定を確認する
<a name="ena-express-list-view"></a>

ENA Express 設定は、インスタンスまたはネットワークインターフェイスで確認できます。ENA Express 設定を更新するには、[ご使用の EC2 インスタンスに適した ENA Express を設定する](ena-express-configure.md)を参照してください。

------
#### [ Console ]

**ネットワークインターフェイスの ENA Express 設定を表示するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左側のナビゲーションペインで、**[ネットワークインターフェース]** を選択してください。

1. ネットワークインターフェイスを選択すると、そのインスタンスの詳細が表示されます。**[ネットワークインターフェース ID]** リンクを選択して詳細ページを開くか、リストの左側のチェックボックスを選択してページ下部の詳細ペインで詳細を表示できます。

1. **[詳細]** タブまたは詳細ページの **[ネットワークインターフェイスのアタッチメント]** セクションで、**[ENA Express]** と **[ENA Express UDP]** の設定を確認します。

**インスタンスの ENA Express 設定を表示するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーションペインで、**[インスタンス]** をクリックしてください。

1. インスタンスを選択すると、そのインスタンスの詳細が表示されます。**[インスタンス ID]** リンクを選択して詳細ページを開くことも、リストの左側のチェックボックスを選択してページ下部の詳細ペインに詳細を表示することもできます。

1. **[ネットワーキング]** タブの **[ネットワークインターフェース]** セクションを右にスクロールして **[ENA Express]** と **[ENA Express UDP]** の設定を確認します。

------
#### [ AWS CLI ]

**インスタンスの ENA Express 設定を取得するには**  
[https://docs.aws.amazon.com/cli/latest/reference/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/describe-instances.html) コマンドを使用します。このコマンド例は、`--instance-ids` パラメータで指定された実行中の各インスタンスに接続されているネットワークインターフェイスの ENA Express 設定のリストを返します。

```
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 設定を取得するには**  
[https://docs.aws.amazon.com/cli/latest/reference/describe-network-interfaces.html](https://docs.aws.amazon.com/cli/latest/reference/describe-network-interfaces.html) コマンドを使用します。

```
aws ec2 describe-network-interfaces \
    --network-interface-ids eni-1234567890abcdef0 \
    --query NetworkInterfaces[].[NetworkInterfaceId,Attachment.EnaSrdSpecification]
```

以下は出力の例です。

```
[
    [
        "eni-1234567890abcdef0",
        {
            "EnaSrdEnabled": true,
            "EnaSrdUdpSpecification": {
                "EnaSrdUdpEnabled": false
            }
        }
    ]
]
```

------
#### [ PowerShell ]

**ネットワークインターフェイスの ENA Express 設定を取得するには**  
[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2NetworkInterface.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2NetworkInterface.html) コマンドレットを使用します。

```
Get-EC2NetworkInterface `
    -NetworkInterfaceId eni-1234567890abcdef0 | `
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-1234567890abcdef0
InstanceOwnerId     : 111122223333
Status              : attached
EnaSrdEnabled       : True
EnaSrdUdpEnabled    : False
```

------

# ご使用の EC2 インスタンスに適した ENA Express を設定する
<a name="ena-express-configure"></a>

ENA Express は、対応する EC2 インスタンスタイプに対して、追加のソフトウェアをインストールすることなく設定できます。詳細については、[ENA Express でサポートされるインスタンスタイプ](ena-express.md#ena-express-supported-instance-types)を参照してください。

------
#### [ Console ]

**ネットワークインターフェイスの ENA Express を管理するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左側のナビゲーションペインで、**[ネットワークインターフェース]** 　を選択してください。

1. インスタンスにアタッチされるネットワークインターフェースを指定します。**[ネットワークインターフェース ID]** リンクを選択して詳細ページを開くことも、リストの左側にあるチェックボックスを選択することもできます。

1. ページ右上の **[アクション]** メニューから **[ENA Express の管理]** を選択してください。これにより、選択したネットワークインターフェイス ID と現在の設定が表示された **[ENA Express の管理]** ダイアログが開きます。

   選択したネットワークインターフェースがインスタンスに接続されていない場合、このアクションはメニューに表示されません。

1. **[ENA Express]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. ENA Express が有効になっている場合、UDP 設定を構成できます。**[ENA Express UDP]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. 設定を保存するには **[保存]** を選択してください。

**インスタンスの ENA Express を管理するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーションペインで、**[インスタンス]** をクリックしてください。

1. 管理するインスタンスを選択してください。**[インスタンス ID]** を選択して詳細ページを開くか、リストの左側にあるチェックボックスを選択してください。

1. インスタンスに設定する**[ネットワークインターフェイス]** を選択してください。

1. ページ右上の **[アクション]** メニューから **[ENA Express の管理]** を選択してください。

1. インスタンスにアタッチされているネットワークインターフェイスに ENA Express を設定するには、**[ネットワークインターフェイス]** リストから選択してください。

1. 選択したネットワークインターフェイスアタッチメントに **[ENA Express]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. ENA Express が有効になっている場合、UDP 設定を構成できます。**[ENA Express UDP]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. 設定を保存するには **[保存]** を選択してください。

**ネットワークインターフェイスをアタッチする際に ENA Express を設定するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左側のナビゲーションペインで、**[ネットワークインターフェース]** を選択してください。

1. インスタンスにアタッチされていないネットワークインターフェイスを選択します (**[ステータス]** が **[利用可]** のもの)。**[ネットワークインターフェース ID]** リンクを選択して詳細ページを開くことも、リストの左側にあるチェックボックスを選択することもできます。

1. アタッチする **[インスタンス]** を選択してください。

1. ネットワークインターフェイスをインスタンスにアタッチした後に **[ENA Express]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. ENA Express が有効になっている場合、UDP 設定を構成できます。**[ENA Express UDP]** を使用するには、**[有効化]** チェックボックスをオンにします。

1. ネットワークインターフェイスをインスタンスにアタッチし、ENA Express の設定を保存するには、**[アタッチ]** を選択してください。

------
#### [ AWS CLI ]

**ネットワークインターフェイスをアタッチする際に ENA Express を設定するには**  
次の例に示すように [https://docs.aws.amazon.com/cli/latest/reference/;attach-network-interface.html](https://docs.aws.amazon.com/cli/latest/reference/;attach-network-interface.html) コマンドを使用します。

**例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない**  
この例では、`EnaSrdEnabled` を `true` に設定し、`EnaSrdUdpEnabled` をデフォルトで `false` になるよう設定します。

```
aws ec2 attach-network-interface \
    --network-interface-id eni-1234567890abcdef0 \
    --instance-id i-1234567890abcdef0 \
    --device-index 1 \
    --ena-srd-specification 'EnaSrdEnabled=true'
```

**例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する**  
この例では、`EnaSrdEnabled` と `EnaSrdUdpEnabled` の両方を `true` に設定します。

```
aws ec2 attach-network-interface \
    --network-interface-id eni-1234567890abcdef0 \
    --instance-id i-1234567890abcdef0 \
    --device-index 1 \
    --ena-srd-specification 'EnaSrdEnabled=true,EnaSrdUdpSpecification={EnaSrdUdpEnabled=true}'
```

**ネットワークインターフェイスアタッチメントの ENA Express 設定を更新するには**  
次の例に示すように [https://docs.aws.amazon.com/cli/latest/reference/modify-network-interface-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/modify-network-interface-attribute.html) コマンドを使用します。

**例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない**  
この例では、`EnaSrdEnabled` を `true` に設定し、以前に設定したことがない場合は `EnaSrdUdpEnabled` をデフォルトで `false` になるよう設定します。

```
aws ec2 modify-network-interface-attribute \
    --network-interface-id eni-1234567890abcdef0 \
    --ena-srd-specification 'EnaSrdEnabled=true'
```

**例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する**  
この例では、`EnaSrdEnabled` と `EnaSrdUdpEnabled` の両方を `true` に設定します。

```
aws ec2 modify-network-interface-attribute \
    --network-interface-id eni-1234567890abcdef0 \
    --ena-srd-specification 'EnaSrdEnabled=true,EnaSrdUdpSpecification={EnaSrdUdpEnabled=true}'
```

**例 3: UDP トラフィックでの ENA Express の使用を停止する**  
この例では、`EnaSrdUdpEnabled` を `false` に設定します。

```
aws ec2 modify-network-interface-attribute \
    --network-interface-id eni-1234567890abcdef0 \
    --ena-srd-specification 'EnaSrdUdpSpecification={EnaSrdUdpEnabled=false}'
```

------
#### [ PowerShell ]

**ネットワークインターフェイスをアタッチする際に ENA Express を設定するには**  
次の例に示すように、[https://docs.aws.amazon.com/powershell/latest/reference/items/Add-EC2NetworkInterface.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Add-EC2NetworkInterface.html) コマンドレットを使用します。

**例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない**  
この例では、`EnaSrdEnabled` を `true` に設定し、`EnaSrdUdpEnabled` をデフォルトで `false` になるよう設定します。

```
Add-EC2NetworkInterface `
    -NetworkInterfaceId eni-1234567890abcdef0 `
    -InstanceId i-1234567890abcdef0 `
    -DeviceIndex 1 `
    -EnaSrdSpecification_EnaSrdEnabled $true
```

**例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する**  
この例では、`EnaSrdEnabled` と `EnaSrdUdpEnabled` の両方を `true` に設定します。

```
Add-EC2NetworkInterface `
    -NetworkInterfaceId eni-1234567890abcdef0 `
    -InstanceId i-1234567890abcdef0 `
    -DeviceIndex 1 `
    -EnaSrdSpecification_EnaSrdEnabled $true `
    -EnaSrdUdpSpecification_EnaSrdUdpEnabled $true
```

**ネットワークインターフェイスアタッチメントの ENA Express 設定を設定するには**  
次の例に示すように、[https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2NetworkInterfaceAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2NetworkInterfaceAttribute.html) コマンドレットを使用します。

**例 1: TCP トラフィックには ENA Express を使用するが、UDP トラフィックには使用しない**  
この例では、`EnaSrdEnabled` を `true` に設定し、以前に設定したことがない場合は `EnaSrdUdpEnabled` をデフォルトで `false` になるよう設定します。

```
Edit-EC2NetworkInterfaceAttribute `
    -NetworkInterfaceId eni-1234567890abcdef0 `
    -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
```

**例 2: TCP トラフィックと UDP トラフィックの両方に ENA Express を使用する**  
この例では、`EnaSrdEnabled` と `EnaSrdUdpEnabled` の両方を `true` に設定します。

```
Edit-EC2NetworkInterfaceAttribute `
    -NetworkInterfaceId eni-1234567890abcdef0 `
    -EnaSrdSpecification_EnaSrdEnabled $true `
    -EnaSrdSpecification_EnaSrdUdpSpecification_EnaSrdUdpEnabled $true ;
Get-EC2NetworkInterface -NetworkInterfaceId eni-1234567890abcdef0 | `
Select-Object `
    NetworkInterfaceId, 
    @{Name = 'EnaSrdEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdEnabled }}, 
    @{Name = 'EnaSrdUdpEnabled'; Expression = { $_.Attachment.EnaSrdSpecification.EnaSrdUdpSpecification.EnaSrdUdpEnabled }} | `
Format-List
```

**例 3: UDP トラフィックでの ENA Express の使用を停止する**  
この例では、`EnaSrdUdpEnabled` を `false` に設定します。

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

------

## 起動時に ENA Express を設定する
<a name="ena-express-configure-on-launch"></a>

インスタンスを起動するときに、以下のいずれかの方法を使用して ENA Express を直接設定できます。設定されているリンクをたどると、AWS マネジメントコンソールからこれらの方法を行う手順を確認できます。
+ **インスタンス起動ウィザード** – インスタンス起動ウィザードでは、起動時に ENA Express を設定できます。詳細については、インスタンス起動ウィザードの [ネットワーク設定](ec2-instance-launch-parameters.md#liw-network-settings)、「**Advanced network configuration**」を参照してください。
+ **起動テンプレート** – 起動テンプレートを使用すると、起動時に ENA Express を設定できます。詳細については、「[Amazon EC2 起動テンプレートを作成する](create-launch-template.md)」ページを参照し、**[ネットワーク設定]** セクションを展開して、**[高度なネットワーク設定]** を確認してください。

# Intel 82599 VF インターフェイスを使用する拡張ネットワーキング
<a name="sriov-networking"></a>

[Xen ベースのインスタンス](instance-types.md#instance-hypervisor-type) の場合、Intel 82599 仮想関数 (VF) インターフェイスは拡張ネットワーキング機能を提供します。インターフェイスは Intel `ixgbevf` ドライバーを使用します。

次のタブはインスタンスオペレーティングシステムにインストールされているネットワークアダプタードライバーを確認する方法を示しています。

------
#### [ Linux ]

**Linux ネットワークインターフェイスドライバー**  
次のコマンドを使用して、モジュールが特定のインターフェイスで使用されていることを確認し、確認するインターフェイス名に置き換えます。単一のインターフェイス (デフォルト) を使用している場合は`eth0` です。オペレーティングシステムで[予測可能なネットワーク名](#predictable-network-names-sriov)がサポートされている場合は`ens5` のような名前にすることができます。

次の例で、リストされているドライバーは `vif` であるため、`ixgbevf` モジュールはロードされていません。

```
[ec2-user ~]$ ethtool -i eth0
driver: vif
version:
firmware-version:
bus-info: vif-0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
```

この例では`ixgbevf` モジュールがロードされます。このインスタンスでは拡張ネットワーキングが適切に設定されています。

```
[ec2-user ~]$ ethtool -i eth0
driver: ixgbevf
version: 4.0.3
firmware-version: N/A
bus-info: 0000:00:03.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no
```

------
#### [ Windows ]

**Windows ネットワークアダプター**  
ドライバーがインストールされていることを確認するにはインスタンスに接続し、デバイス マネージャーを開きます。**[ネットワークアダプター]** の下に `Intel(R) 82599 Virtual Function` が表示されるはずです。

------

**Topics**
+ [拡張ネットワーキング用のインスタンスの準備](#ixgbevf-requirements)
+ [拡張ネットワーキングが有効化されているかどうかのテスト](#test-enhanced-networking)
+ [インスタンスでの拡張ネットワーキングの有効化](#enable-enhanced-networking)
+ [接続に関する問題のトラブルシューティング](#enhanced-networking-troubleshooting)

## 拡張ネットワーキング用のインスタンスの準備
<a name="ixgbevf-requirements"></a>

Intel 82599 VF インターフェイスを使用した拡張ネットワーキングを準備するには次のようにインスタンスをセットアップします。
+ インスタンスタイプが C3、C4、D2、I2、M4 (`m4.16xlarge` を除く)、R3 のいずれかであることを確認します。
+ インスタンスがインターネットに接続されていることを確認します。
+ 保持する必要がある重要なデータがインスタンスにある場合、インスタンスから AMI を作成してそのデータをバックアップする必要があります。`sriovNetSupport` 属性を有効にするとともに、カーネルおよびカーネルモジュールを更新すると、互換性のないインスタンスがレンダリングされたり、オペレーティングシステムに接続できなくなったりする可能性があります。最近のバックアップがある場合はこれが発生してもデータは保持されます。
+ **Linux インスタンス** – Linux カーネルバージョン 2.6.32 以降を使用して、HVM AMI からインスタンスを起動します。最新の Amazon Linux HVM AMI では拡張ネットワーキングに必要なモジュールがインストールされており、必要な属性も設定されています。したがって、最新の Amazon Linux HVM AMI を使用して、拡張ネットワーキングがサポートされている Amazon EBS–バック インスタンスを起動した場合はインスタンスで拡張ネットワーキングが既に有効化されています。
**警告**  
拡張ネットワーキングはHVM インスタンスでのみサポートされています。PV インスタンスで拡張ネットワーキングを有効にすると、このインスタンスに到達できなくなります。また、適切なモジュールまたはモジュールバージョンを使用せずにこの属性を設定すると、インスタンスにアクセスできなくなる場合があります。
+ **Windows インスタンス** – 64 ビット HVM AMI からインスタンスを起動します。Windows Server 2008 では拡張ネットワーキングを有効にできません。Windows Server 2012 R2 および Windows Server 2016 以降の AMI では拡張ネットワーキングが既に有効になっています。Windows Server 2012 R2 にはインテルドライバー 1.0.15.3 が含まれており、Pnputil.exe ユーティリティを使用してそのドライバーを最新のバージョンにアップグレードすることをお勧めします。
+ 選択した任意のコンピュータ、できればローカルのデスクトップまたはノートパソコンで、AWS マネジメントコンソール から [AWS CloudShell](https://console.aws.amazon.com/cloudshell) を使用するか、[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) もしくは [AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/) をインストールし設定します。詳細については[Amazon EC2 へのアクセス](concepts.md#access-ec2)もしくは [AWS CloudShell ユーザーガイド](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)を参照してください。拡張ネットワーキングは、Amazon EC2 コンソールから管理することはできません。

## 拡張ネットワーキングが有効化されているかどうかのテスト
<a name="test-enhanced-networking"></a>

`sriovNetSupport` 属性がインスタンスまたはイメージに設定されていることを確認します。

------
#### [ AWS CLI ]

**インスタンス属性をチェックするには (sriovNetSupport)**  
次の [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-attribute.html) コマンドを使用します。属性が設定されている場合、値は `simple` になります。

```
aws ec2 describe-instance-attribute \
    --instance-id i-1234567890abcdef0 \
    --attribute sriovNetSupport
```

**イメージ属性をチェックするには (sriovNetSupport)**  
次の [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。属性が設定されている場合、値は `simple` になります。

```
aws ec2 describe-images \
    --image-id ami-0abcdef1234567890 \
    --query "Images[].SriovNetSupport"
```

------
#### [ PowerShell ]

**インスタンス属性をチェックするには (sriovNetSupport)**  
[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceAttribute.html) コマンドレットを使用します。属性が設定されている場合、値は `simple` になります。

```
Get-EC2InstanceAttribute `
    -InstanceId i-1234567890abcdef0 `
    -Attribute sriovNetSupport
```

**イメージ属性をチェックするには (sriovNetSupport)**  
次の [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。属性が設定されている場合、値は `simple` になります。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).SriovNetSupport
```

------

## インスタンスでの拡張ネットワーキングの有効化
<a name="enable-enhanced-networking"></a>

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

**警告**  
拡張ネットワーキング属性はいったん有効にすると無効にする方法はありません。

### Amazon Linux
<a name="enable-amazon-linux"></a>

最新の Amazon Linux HVM AMI では拡張ネットワーキングに必要な `ixgbevf` モジュールがインストールされており、必要な `sriovNetSupport` 属性も設定されています。したがって、最新の Amazon Linux HVM AMI を使用してインスタンスタイプを起動した場合は拡張ネットワーキングが既にインスタンスに対して有効になっています。詳細については[拡張ネットワーキングが有効化されているかどうかのテスト](#test-enhanced-networking)を参照してください。

以前の Amazon Linux AMI を使用してインスタンスを起動し、まだ拡張ネットワーキングが有効になっていない場合、拡張ネットワーキングを有効にするには次の手順を実行します。

**拡張ネットワーキングを有効にするには**

1. <a name="amazon-linux-enhanced-networking-start-step"></a>インスタンスに接続します。

1. インスタンスから、次のコマンドを実行して、`ixgbevf` を含む最新のカーネルとカーネルモジュールでインスタンスを更新します。

   ```
   [ec2-user ~]$ sudo yum update
   ```

1. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを再起動します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/reboot-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/reboot-instances.html) (AWS CLI)、[https://docs.aws.amazon.com/powershell/latest/reference/items/Restart-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Restart-EC2Instance.html) (AWS Tools for Windows PowerShell)。

1. <a name="amazon-linux-enhanced-networking-stop-step"></a>インスタンスに再接続し、`ixgbevf`の **modinfo ixgbevf** コマンドを使用して、[拡張ネットワーキングが有効化されているかどうかのテスト](#test-enhanced-networking) モジュールがインストールされ、最小推奨バージョンであることを確認します。

1. [EBS-backed インスタンス] ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを停止します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) (AWS CLI)、[https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html) (AWS Tools for Windows PowerShell)。

   [Instance store-バック インスタンス] インスタンスを停止して属性を変更することはできません。代わりに、次の手順に進みます。

1. ローカルコンピュータから、次のいずれかのコマンドを使用して拡張ネットワーキングの属性を有効化します。

------
#### [ AWS CLI ]

   [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) コマンドを次のように使用します。

   ```
   aws ec2 modify-instance-attribute \
       --instance-id i-1234567890abcdef0 \
       --sriov-net-support simple
   ```

------
#### [ PowerShell ]

   [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) コマンドレットを次のように使用します。

   ```
   Edit-EC2InstanceAttribute `
       -InstanceId i-1234567890abcdef0 `
       -SriovNetSupport "simple"
   ```

------

1. (オプション) [Amazon EBS-backed AMI を作成する](creating-an-ami-ebs.md)の説明に従って、インスタンスから AMI を作成します。AMI はインスタンスから拡張ネットワーキング属性を継承します。このため、この AMI を使用することで、拡張ネットワーキングがデフォルトで有効になっている別のインスタンスを起動できます。

1. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを開始します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) (AWS CLI)、[https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) (AWS Tools for Windows PowerShell)。

1. インスタンスに接続し、[拡張ネットワーキングが有効化されているかどうかのテスト](#test-enhanced-networking) の **ethtool -i eth*n*** コマンドを使用して、`ixgbevf` モジュールがインストールされ、ネットワークインターフェイスにロードされていることを確認します。

**拡張ネットワーキングを有効にするには (Instance store-バック インスタンス)**  
インスタンスを停止するステップまで、前の手順に従います。[Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md)に記述されているように、新しい AMI を作成します。AMI を登録するときに拡張ネットワーキング属性を有効にしてください。

------
#### [ AWS CLI ]

[https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) コマンドを次のように使用します。

```
aws ec2 register-image --sriov-net-support simple ...
```

------
#### [ PowerShell ]

[https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) を次のように使用します。

```
Register-EC2Image -SriovNetSupport "simple" ...
```

------

### Ubuntu
<a name="enhanced-networking-ubuntu"></a>

開始する前に、インスタンスで[拡張ネットワーキングがすでに有効になっているかどうかを確認](#test-enhanced-networking)します。

クイックスタート Ubuntu HVM AMI には拡張ネットワーキングに必要なドライバーが搭載されています。`ixgbevf` 2.16.4 より前のバージョンを使用している場合は`linux-aws` カーネルパッケージをインストールして最新の拡張ネットワーキングドライバーを取得できます。

以下の手順はUbuntu インスタンスで `ixgbevf` モジュールをコンパイルするための一般的なステップを示しています。<a name="ubuntu-enhanced-networking-procedure"></a>

**`linux-aws` カーネルパッケージをインストールするには**

1. <a name="ubuntu-enhanced-networking-start-step"></a>インスタンスに接続します。

1. パッケージキャッシュおよびパッケージを更新します。

   ```
   ubuntu:~$ sudo apt-get update && sudo apt-get upgrade -y linux-aws
   ```
**重要**  
更新プロセス中に `grub` をインストールするよう求められた場合は`/dev/xvda` のインストール先として `grub` を使用し、現在のバージョンの `/boot/grub/menu.lst` を保持することを選択してください。

### 他の Linux ディストリビューション
<a name="enhanced-networking-linux"></a>

開始する前に、インスタンスで[拡張ネットワーキングがすでに有効になっているかどうかを確認](#test-enhanced-networking)します。最新のクイックスタート HVM AMI には拡張ネットワーキングに必要なドライバーが含まれているため、追加ステップを実行する必要はありません。

次の手順ではAmazon Linux または Ubuntu 以外の Linux ディストリビューションで Intel 82599 VF インターフェイスを使用した拡張ネットワーキングを有効にする必要がある場合の一般的なステップを説明します。コマンドの詳細な構文、ファイルの場所、パッケージやツールのサポートなどの詳細については使用する Linux ディストリビューションのドキュメントを参照してください。

**Linux で拡張ネットワーキングを有効化するには**

1. <a name="other-linux-enhanced-networking-start-step"></a>インスタンスに接続します。

1. Sourceforge ([https://sourceforge.net/projects/e1000/files/ixgbevf%20stable/](https://sourceforge.net/projects/e1000/files/ixgbevf%20stable/)) からインスタンスに `ixgbevf` モジュールのソースをダウンロードします。

   `ixgbevf` の 2.16.4 より前のバージョン (バージョン 2.14.2 を含む) は一部の Linux ディストリビューション (特定のバージョンの Ubuntu など) では適切にビルドされません。

1. インスタンスで `ixgbevf` モジュールをコンパイルし、インストールします。
**警告**  
現在のカーネルに `ixgbevf` モジュールをコンパイルし、新しいカーネルをドライバを再構築しないで更新すると、システムは次回の再起動の際にディストリビューション固有の `ixgbevf` モジュールに戻る場合があります。これにより、ディストリビューション固有のバージョンが拡張ネットワーキングと互換性がない場合に、システムに接続できなくなります。

1. **sudo depmod** コマンドを実行して、モジュールの依存関係を更新します。

1. <a name="other-linux-enhanced-networking-stop-step"></a>起動時に新しいモジュールがロードされるように、インスタンスの `initramfs` を更新します。

1. <a name="predictable-network-names-sriov"></a>システムがデフォルトで予測可能なネットワークインターフェイス名を使用するかどうかを確認します。**systemd** または **udev** のバージョン 197 以上を使用するシステムの場合、イーサネットデバイスの名前を変更でき、単一ネットワークインターフェイスの名前が `eth0` になることは保証されません。この動作はインスタンスに接続する際に問題の原因となる可能性があります。詳細と他の設定オプションについてはfreedesktop.org ウェブサイトで[Predictable Network Interface Names/](https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/)を参照してください。

   1. 次のコマンドを使用して、RPM ベースのシステムで **systemd** または **udev** のバージョンを確認できます。

      ```
      [ec2-user ~]$ rpm -qa | grep -e '^systemd-[0-9]\+\|^udev-[0-9]\+'
      				systemd-208-11.el7_0.2.x86_64
      ```

      上記の Red Hat Enterprise Linux 7 の例では**systemd** のバージョンは 208 であるため、予測可能なネットワークインターフェイス名は無効になっている必要があります。

   1. `net.ifnames=0` オプションを `GRUB_CMDLINE_LINUX` の `/etc/default/grub` 行に追加することによって、予測可能なネットワークインターフェイス名を無効にします。

      ```
      [ec2-user ~]$ sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/\ net\.ifnames\=0\"/' /etc/default/grub
      ```

   1. grub の設定ファイルを再ビルドします。

      ```
      [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      ```

1. [EBS-backed インスタンス] ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用してインスタンスを停止します。[stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) (AWS CLI)/[https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html))、 (AWS Tools for Windows PowerShell)。

   [Instance store-バック インスタンス] インスタンスを停止して属性を変更することはできません。代わりに、次の手順に進みます。

1. ローカルコンピュータから、次のいずれかのコマンドを使用して拡張ネットワーキングの属性を有効化します。

------
#### [ AWS CLI ]

   [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) コマンドを次のように使用します。

   ```
   aws ec2 modify-instance-attribute \
       --instance-id i-1234567890abcdef0 -\
       -sriov-net-support simple
   ```

------
#### [ PowerShell ]

   [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) コマンドレットを次のように使用します。

   ```
   Edit-EC2InstanceAttribute `
       -InstanceId i-1234567890abcdef0 `
       -SriovNetSupport "simple"
   ```

------

1. (オプション) [Amazon EBS-backed AMI を作成する](creating-an-ami-ebs.md)の説明に従って、インスタンスから AMI を作成します。AMI はインスタンスから拡張ネットワーキング属性を継承します。このため、この AMI を使用することで、拡張ネットワーキングがデフォルトで有効になっている別のインスタンスを起動できます。

   インスタンスオペレーティングシステムに `/etc/udev/rules.d/70-persistent-net.rules` が含まれている場合にはAMI を作成する前にそれを削除する必要があります。このファイルには元のインスタンスのイーサネットアダプターの MAC アドレスが保存されています。別のインスタンスがこのファイルを使用して起動した場合、オペレーティングシステムがそのデバイスを検出できなくなり、`eth0` が失敗して、起動に関する問題が発生することがあります。このファイルは次の起動サイクルで再び生成され、AMI から起動されるインスタンスごとに独自のバージョンが作成されます。

1. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを開始します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) (AWS CLI)、[https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) (AWS Tools for Windows PowerShell)。

1. (オプション) インスタンスに接続し、モジュールがインストールされていることを確認します。

**拡張ネットワーキングを有効にするには (Instance store-バック インスタンス)**  
インスタンスを停止するステップまで、前の手順に従います。[Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md)に記述されているように、新しい AMI を作成します。AMI を登録するときに拡張ネットワーキング属性を有効にしてください。

------
#### [ AWS CLI ]

[https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) コマンドを次のように使用します。

```
aws ec2 register-image --sriov-net-support simple ...
```

------
#### [ PowerShell ]

[https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) を次のように使用します。

```
Register-EC2Image -SriovNetSupport "simple" ...
```

------

### Server
<a name="enable-windows"></a>

インスタンスを起動し、すでに拡張ネットワーキングが有効になっていない場合、必要なネットワークアダプタードライバーをダウンロードしてインスタンスにインストールし、拡張ネットワーキングを有効にするように `sriovNetSupport` インスタンス属性を設定する必要があります。この属性を有効にできるのはサポートされるインスタンスタイプのみです。詳細については「[Amazon EC2 インスタンスでの拡張ネットワーキング](enhanced-networking.md)」を参照してください。

**重要**  
Windows AMI の最新のドライバーアップデートを確認するにはAWS Windows AMI リファレンスの「[Windows AMI のバージョン履歴](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ec2-windows-ami-version-history.html)」を参照してください。

**拡張ネットワーキングを有効にするには**

1. <a name="amazon-linux-enhanced-networking-start-step"></a>インスタンスに接続してローカル管理者としてログインします。

1. [Windows Server 2016 以降] ドライバーがインストールされたら以下の EC2 Launch PowerShell スクリプトを実行し、インスタンスを設定します。

   ```
   PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
   ```
**重要**  
管理者パスワードはインスタンス初期化 EC2 Launch スクリプトを有効にするとリセットされます。初期化タスクの設定で指定することで、管理者パスワードのリセットを無効にするように設定ファイルを変更できます。

1. インスタンスから、OS 用の Intel ネットワークアダプタードライバーをダウンロードします。
   + **[Windows Server 2022]**

     [ダウンロードページ](https://www.intel.com/content/www/us/en/download/706171/intel-network-adapter-driver-for-windows-server-2022.html)と`Wired_driver_version_x64.zip` のダウンロードを見てください。
   + **Windows Server 2019** Server バージョン 1809 以降を含む\$1

     [ダウンロードページ](https://www.intel.com/content/www/us/en/download/19372/intel-network-adapter-driver-for-windows-server-2019.html)と`Wired_driver_version_x64.zip` のダウンロードを見てください。
   + **Windows Server 2016** Server バージョン 1803 以前を含む\$1

     [ダウンロードページ](https://www.intel.com/content/www/us/en/download/18737/intel-network-adapter-driver-for-windows-server-2016.html)と`Wired_driver_version_x64.zip` のダウンロードを見てください。
   + **[Windows Server 2012 R2**

     [ダウンロードページ](https://www.intel.com/content/www/us/en/download/17480/intel-network-adapter-driver-for-windows-server-2012-r2.html)と`Wired_driver_version_x64.zip` のダウンロードを見てください。
   + **Windows Server 2012**

     [ダウンロードページ](https://www.intel.com/content/www/us/en/download/16789/intel-network-adapter-driver-for-windows-server-2012.html)と`Wired_driver_version_x64.zip` のダウンロードを見てください。
   + **Windows Server 2008 R2**

     [ダウンロードページ](https://www.intel.com/content/www/us/en/download/15590/intel-network-adapter-driver-for-windows-7-final-release.html)と`PROWinx64Legacy.exe` のダウンロードを見てください。

   \$1Server バージョン 1803 以前および 1809 以降はIntel のドライバーおよびソフトウェアのページでは特に扱われていません。

1. OS 用の Intel ネットワークアダプタードライバーをインストールします。
   + **Windows Server 2008 R2**

     1. **ダウンロード**フォルダで、`PROWinx64Legacy.exe` ファイルを見つけて、名前を `PROWinx64Legacy.zip` に変更します。

     1. `PROWinx64Legacy.zip` ファイルの内容を展開します。

     1. コマンドラインを開き、抽出されたフォルダに移動し、`pnputil` ユーティリティを使用して次のコマンドを実行して、ドライバーストアで INF ファイルを追加およびインストールします。

        ```
        C:\> pnputil -a PROXGB\Winx64\NDIS62\vxn62x64.inf
        ```
   + **Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、および Windows Server 2012**

     1. **ダウンロード**フォルダで、`Wired_driver_version_x64.zip` ファイルの内容を展開します。

     1. コマンドラインを開き、抽出されたフォルダに移動し、`pnputil` ユーティリティを使用して次のコマンドのいずれかを実行して、ドライバーストアで INF ファイルを追加およびインストールします。
        + Windows Server 2022

          ```
          pnputil -i -a PROXGB\Winx64\NDIS68\vxn68x64.inf
          ```
        + Windows Server 2019

          ```
          pnputil -i -a PROXGB\Winx64\NDIS68\vxn68x64.inf
          ```
        + Windows Server 2016

          ```
          pnputil -i -a PROXGB\Winx64\NDIS65\vxn65x64.inf
          ```
        + Windows Server 2012 R2

          ```
          pnputil -i -a PROXGB\Winx64\NDIS64\vxn64x64.inf
          ```
        + Windows Server 2012

          ```
          pnputil -i -a PROXGB\Winx64\NDIS63\vxn63x64.inf
          ```

1. ローカルコンピュータから、次のいずれかのコマンドを使用して拡張ネットワーキングの属性を有効化します。

------
#### [ AWS CLI ]

   [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) コマンドを次のように使用します。

   ```
   aws ec2 modify-instance-attribute \
       --instance-id i-1234567890abcdef0 \
       --sriov-net-support simple
   ```

------
#### [ PowerShell ]

   [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) コマンドレットを次のように使用します。

   ```
   Edit-EC2InstanceAttribute `
       -InstanceId i-1234567890abcdef0 `
       -SriovNetSupport "simple"
   ```

------

1. (オプション) [Amazon EBS-backed AMI を作成する](creating-an-ami-ebs.md)の説明に従って、インスタンスから AMI を作成します。AMI はインスタンスから拡張ネットワーキング属性を継承します。このため、この AMI を使用することで、拡張ネットワーキングがデフォルトで有効になっている別のインスタンスを起動できます。

1. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを開始します。[https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) (AWS CLI)、[https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) (AWS Tools for Windows PowerShell)。

## 接続に関する問題のトラブルシューティング
<a name="enhanced-networking-troubleshooting"></a>

拡張ネットワーキングを有効化しているときに接続が失われると、`ixgbevf` モジュールとカーネルの互換性が保たれない可能性があります。この場合、インスタンスの Linux ディストリビューションに含まれる `ixgbevf` モジュールのバージョンをインストールしてみます。

PV インスタンスまたは AMI で拡張ネットワーキングを有効にすると、お使いのインスタンスに到達できなくなります。

詳細については「[EC2 インスタンスで拡張ネットワーキングを有効化および設定する方法](https://repost.aws/knowledge-center/enable-configure-enhanced-networking)」を参照してください。

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

# Linux ベースの EC2 インスタンスのネットワークレイテンシーを改善する
<a name="ena-improve-network-latency-linux"></a>

ネットワークレイテンシーとは、データのパケットが送信元から送信先に移動するまでにかかる時間です。ネットワークを介してデータを送信するアプリケーションは、快適なユーザーエクスペリエンスを提供するためにタイムリーな応答が不可欠です。ネットワークレイテンシーが長くなると、次のようなさまざまな問題が発生する可能性があります。
+ ウェブページのロードが遅い
+ ビデオストリーミングのタイムラグ
+ オンラインリソースへのアクセスが難しい

このセクションでは、Linux で実行される Amazon EC2 インスタンスのネットワークレイテンシーを改善するために実行できる手順の概要を説明します。最適なレイテンシーを実現するには、以下の手順に従ってインスタンス、カーネル、および ENA ドライバーの設定を行います。その他の設定ガイダンスについては、GitHub の「[ENA Linux ドライバーのベストプラクティスとパフォーマンス最適化ガイド](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/ENA_Linux_Best_Practices.rst)」を参照してください。

**注記**  
手順と設定は、特定のネットワークハードウェア、インスタンスを起動した AMI、およびアプリケーションのユースケースによって若干異なる場合があります。変更を加える前に、ネットワークパフォーマンスを徹底的にテストおよびモニタリングして、望ましい結果が得られることを確認してください。

## データパケットのネットワークホップの数を減らす
<a name="ena-latency-reduce-hops"></a>

データパケットがルーター間を移動する（ホップする）たびにネットワークレイテンシーが増加します。通常、トラフィックが送信先に到達するには、複数のホップを経由する必要があります。Amazon EC2 インスタンスのネットワークホップを減らすには、次の 2 つの方法があります。
+ **クラスタープレイスメントグループ** – [クラスタープレイスメントグループ](placement-strategies.md#placement-groups-cluster)を指定すると、Amazon EC2 は、同じアベイラビリティーゾーン (AZ) 内の物理的に互いに近いインスタンスをよりタイトなパッキングで起動します。グループ内のインスタンスが物理的に近接していることにより、高速接続を利用できるため、レイテンシーは低く、単一フローのスループットは高くなります。
+ **専有ホスト** – [専有ホスト](dedicated-hosts-overview.md)はお客様専用の物理サーバーです。専有ホストを使用すると、インスタンスを起動して同じ物理サーバー上で実行できます。同じ専有ホストで実行されるインスタンス間では、余分なネットワークホップなしで通信できます。

## Linux カーネルの設定がレイテンシーに与える影響
<a name="ena-latency-kernel-config"></a>

Linux カーネル設定では、ネットワークレイテンシーを増減できます。レイテンシー最適化の目標を達成するには、ワークロードの特定の要件に応じて Linux カーネル設定を微調整することが重要です。

Linux カーネルには、ネットワークレイテンシーを減らすのに役立つ設定オプションが多数あります。最も影響の大きいオプションは次のとおりです。
+ **ビジーポーリングモードを有効にする** – ビジーポーリングモードを使用すると、ネットワーク受信パスのレーテンシーが減少します。ビジーポーリングモードを有効にすると、ソケットレイヤーコードはネットワークデバイスの受信キューを直接ポーリングできます。ビジーポーリングの欠点は、タイトなループで新しいデータをポーリングすることにより、ホストの CPU 使用率が高くなることです。すべてのインターフェイスでパケットを待機するマイクロ秒数を制御するグローバル設定は 2 つあります。

     
`busy_read`  
ソケット読み込み時の低レイテンシーのビジーポーリングタイムアウト。これにより、ソケット層がデバイスキューのパケットを読み取るまでのマイクロ秒数を制御します。**sysctl** コマンドを使用して機能をグローバルに有効にするには、Linux カーネル組織は 50 マイクロ秒の値を推奨しています。詳細については、「Linux カーネルユーザーおよび管理者ガイド」の「[busy\$1read](https://www.kernel.org/doc/html/v5.19/admin-guide/sysctl/net.html?highlight=busy_read)」を参照してください。  

  ```
  [ec2-user ~]$ sudo sysctl -w net.core.busy_read=50
  ```  
`busy_poll`  
ポーリングとセレクティングの低レイテンシーのビジーポーリングタイムアウト。これにより、イベント待ち時間のマイクロ秒数を制御します。推奨値は 50～100 マイクロ秒で、ポーリングするソケットの数によって異なります。追加するソケットが多いほど、数値は大きい必要があります。  

  ```
  [ec2-user ~]$ sudo sysctl -w net.core.busy_poll=50
  ```
+ **CPU 電源状態の設定 (C ステート)** – C ステートは非アクティブ時のコアのスリープレベルを制御します。C ステートを制御して、システムのレイテンシーとパフォーマンスを調整することができます。より深い C ステートでは、CPU は基本的に「スリープ」状態になり、起動してアクティブ状態に戻るまでリクエストに応答できません。コアをスリープ状態にするには時間がかかります。また、スリープ状態のコアによって、別のコアが高い周波数で動作するための余裕が生まれますが、そのスリープ状態にあるコアが再び稼働し処理を実行するのにも時間がかかります。

  例えば、ネットワークパケットの中断を処理するように割り当てられたコアがスリープ状態である場合、その中断の処理に遅延が生じる可能性があります。より深い C ステートを使用しないようにシステムを設定できます。ただし、この設定では、プロセッサの反応レイテンシーは短縮されますが、他のコアの Turbo Boost 用のヘッドルームも減少します。

  プロセッサーの反応レイテンシーを短縮するために、C ステートが深くなるのを制限できます。詳細については、「Amazon Linux 2 ユーザーガイド」の「[深い C ステートの制限による高パフォーマンスと低レイテンシー](https://docs.aws.amazon.com/linux/al2/ug/processor_state_control.html#c-states)」を参照してください。**

## 割り込みモデレーション
<a name="ena-latency-interrupt-moderation"></a>

ENA ネットワークドライバーを使用すると、インスタンスとネットワーク間の通信が可能になります。ドライバーはネットワークパケットを処理し、ネットワークスタックまたは Nitro Card に渡します。ネットワークパケットが受信されると、Nitro Card は割り込みを生成して CPU がソフトウェアにイベントを通知します。

割り込み  
割り込みは、デバイスまたはアプリケーションがプロセッサに送信する信号です。割り込みは、イベントが発生したこと、または即時の注意を要する条件が満たされたことをプロセッサに通知します。割り込みにより、ネットワークインターフェイスからのデータ受信、ハードウェアイベントの処理、他のデバイスからのリクエストの処理など、時間的制約のあるタスクを処理できます。

割り込みモデレーション  
割り込みモデレーションは、割り込みを集約または遅延させることにより、デバイスが生成する割り込みの数を減らす手法です。割り込みモデレーションの目的は、多数の割り込みの処理に伴うオーバーヘッドを削減することによってシステムパフォーマンスを向上させることです。割り込みが多すぎると CPU 使用率が高くなり、スループットに悪影響を及ぼします。一方、割り込みが少なすぎると、レイテンシーが長くなります。

動的割り込みモデレーション  
動的割り込みモデレーションは、現在のシステム負荷とトラフィックパターンに基づいて割り込みレートを動的に調整する、割り込みモデレーションの拡張形です。割り込みオーバーヘッドの削減と、1 秒あたりのパケット数 (つまり帯域幅) とのバランスをとることを目的としています。  
動的割り込みモデレーションは、一部の AMI ではデフォルトで有効になっています (ただし、すべての AMI で有効または無効にできます)。

ネットワークレイテンシーを最小限に抑えるために、割り込みモデレーションを無効にする必要があることがあります。ただし、これによって割り込み処理のオーバーヘッドが増加する可能性もあります。レイテンシーの低減とオーバーヘッドの最小化とのバランス点を見つけることが重要です。`ethtool` コマンドは割り込みモデレーションの設定に役立ちます。デフォルトでは、`rx-usecs` は `20` に設定され、`tx-usecs` は `64` に設定されています。

現在の割り込み変更設定を取得するには、次のコマンドを使用します。

```
[ec2-user ~]$ ethtool -c interface | egrep "rx-usecs:|tx-usecs:|Adaptive RX"
Adaptive RX: on  TX: off
rx-usecs: 20
tx-usecs: 64
```

割り込み変更および動的割り込みモデレーションを無効にするには、次のコマンドを使用します。

```
[ec2-user ~]$ sudo ethtool -C interface adaptive-rx off rx-usecs 0 tx-usecs 0
```

# Nitro System のパフォーマンスチューニングに関する考慮事項
<a name="ena-nitro-perf"></a>

Nitro System は、AWS が構築した、高パフォーマンス、高可用性、高度なセキュリティを実現するハードウェアとソフトウェアコンポーネントのコレクションです。Nitro System は、ベアメタルのような機能を備えることで、仮想化オーバーヘッドを排除するとともに、ホストハードウェアへのフルアクセスを要求するワークロードをサポートします。詳細については、「[AWS Nitro System](https://aws.amazon.com/ec2/nitro/)」を参照してください。

現行世代の EC2 インスタンスタイプはすべて、ネットワークパケット処理を EC2 Nitro カードで実行します。このトピックでは、Nitro Card でのハイレベルなパケット処理、パケット処理のパフォーマンスに影響するネットワークアーキテクチャおよび設定の一般的側面、Nitro ベースインスタンスのパフォーマンスを最大化するために実行できるアクションについて説明します。

Nitro Card は、仮想プライベートクラウド (VPC) に必要な、すべての入出力 (I/O) インターフェイスを処理します。ネットワーク上で情報を送受信するすべてのコンポーネントで、Nitro Card は I/O トラフィック用の自己完結型のコンピューティングデバイスとして機能します。このコンピューティングデバイスは、顧客のワークロードを実行するシステムメインボードとは物理的に分離されています。

## Nitro Card でのネットワークパケットフロー
<a name="ena-nitro-perf-network-flow"></a>

Nitro System 上に構築された EC2 インスタンスには、1 秒あたりのパケット数 (PPS) スループットレートで測定されるよりも高速なパケット処理を可能にする、ハードウェアアクセラレーション機能があります。Nitro Card が新しいフローの初期評価を行うと、セキュリティグループ、アクセスコントロールリスト、ルートテーブルエントリなど、フロー内のすべてのパケットについて同じ情報が保存されます。同じフローの追加のパケットを処理する場合、保存した情報を使用することで、それらのパケットのオーバーヘッドを減らすことができます。

接続速度は 1 秒あたりの接続数 (CPS) で測定されます。新しい接続が発生するたびに、追加の処理オーバーヘッドが必要になるため、ワークロード能力の予測でそれを考慮する必要があります。ワークロードを設計するときは、CPS と PPS の両方のメトリクスを考慮することが重要です。

**接続の確立方法**  
Nitro ベースのインスタンスと別のエンドポイントとの間で接続が確立されると、Nitro Card は 2 つのエンドポイント間で送受信される最初のパケットのフルフローを評価します。同じフローの後続のパケットについては、通常、完全な再評価は不要です。ただし、例外がいくつかあります。例外に関する詳細は、「[ハードウェアアクセラレーションを使用しないパケット](#ena-nitro-perf-exceptions)」を参照してください。

以下のプロパティは、2 つのエンドポイントとそれらの間のパケットフローを定義します。これら 5 つのプロパティを総合して、5 タプルフローと呼びます。
+ [Source IP] (送信元 IP)
+ ソースポート
+ 送信先 IP
+ 発信先ポート
+ 通信プロトコル

パケットフローの方向は、イングレス (インバウンド) とエグレス (アウトバウンド) と呼びます。以下は、エンドツーエンドのネットワークパケットフローの概要を示したものです。
+ **イングレス** — Nitro Card は、受信ネットワークパケットを処理するとき、パケットをステートフルファイアウォールルールとアクセス制御リストに照らして評価します。接続を追跡し、測定し、必要に応じてその他アクションを実行します。次に、パケットをホスト CPU 上の宛先に転送します。
+ **エグレス** — Nitro Card は、アウトバウンドネットワークパケットを処理するとき、リモートインターフェイスの宛先を検索し、さまざまな VPC 機能を評価し、レート制限を適用して、適用されるその他アクションを実行します。次に、パケットをネットワーク上の次のホップの宛先に転送します。

## 最適なパフォーマンスが得られるようにネットワークを設計する
<a name="ena-nitro-perf-overall-design"></a>

Nitro System のパフォーマンス機能を活用するには、ネットワーク処理のニーズを理解し、そしてそれらのニーズが Nitro リソースのワークロードにどのように影響するかを理解する必要があります。そうすれば、ネットワーク環境に最適なパフォーマンスを実現するように、設計することができます。インフラストラクチャ設定とアプリケーションワークロードの設計および構成は、パケット処理と接続速度の両方に影響を与える可能性があります。例えば、DNS サービス、ファイアウォール、仮想ルーターなど、アプリケーションの接続確立率が高いと、接続が確立された後にのみ発生するハードウェアアクセラレーションを利用できる機会が減ります。

アプリケーションとインフラストラクチャの構成を設定し、ワークロードを効率化して、ネットワークパフォーマンスを改善することができます。ただし、すべてのパケットがアクセラレーションの対象となるわけではありません。Nitro System は、新しい接続や、アクセラレーションの対象ではないパケットには、ネットワークフローをすべて使用します。

本セクションの残りの部分では、パケットが可能な限り高速パス内を流れるようにするための、アプリケーションとインフラストラクチャの、設計上の考慮事項に焦点を当てます。

### Nitro システムのネットワーク設計に関して考慮すべき事項
<a name="ena-nitro-perf-considerations"></a>

インスタンスのネットワークトラフィックを設定するときは、PPS のパフォーマンスに影響するさまざまな側面を考慮する必要があります。フローが確立されると、定期的に送受信されるパケットの大半が、アクセラレーションの対象になります。ただし、インフラストラクチャ設計とパケットフローが引き続きプロトコル標準を満たすようにするため、いくつかの例外が存在します。

Nitro Card から最高のパフォーマンスを引き出すには、使用しているインフラストラクチャとアプリケーションに関する以下の設定の詳細の、長所と短所を慎重に検討する必要があります。

#### インフラストラクチャの考慮事項
<a name="ena-nitro-perf-infra-considerations"></a>

インフラストラクチャの設定は、パケットフローと処理効率に影響を及ぼす可能性があります。以下は、重要な考慮事項の一覧です。

**非対称ネットワークインターフェイス構成**  
セキュリティグループは、接続追跡を使用して、インスタンスに出入りするトラフィックの情報を追跡します。トラフィックが特定のネットワークインターフェースからインスタンスに入り、別のネットワークインターフェースから外に出る、非対称ルーティングでは、フローを追跡した場合に、インスタンスが達成できるピークパフォーマンスが低下する可能性があります。セキュリティグループの接続トラッキング、追跡されない接続、自動的に追跡される接続の詳細については、「[Amazon EC2 セキュリティグループの接続の追跡](security-group-connection-tracking.md)」を参照してください。

**ネットワークドライバー**  
ネットワークドライバーは、定期的に更新されリリースされています。ドライバーが古くなっていると、パフォーマンスが大幅に低下する可能性があります。最新のパッチを適用して、最新世代のドライバーのみで利用できるアクセラレーションパス機能などのパフォーマンス強化を活用できるよう、ドライバーを常に最新状態に保つようにします。旧世代のドライバーでは、アクセラレーションパス機能はサポートされていません。  
アクセラレーションパス機能を利用するため、最新の ENA ドライバーをインスタンスにインストールすることが推奨されます。  
**Linux インスタンス** – ENA Linux ドライバー 2.2.9 以降。Amazon Drivers GitHub リポジトリから ENA Linux ドライバーをインストールまたは更新するには、readme ファイルの「[ドライバーのコンパイル](https://github.com/amzn/amzn-drivers/tree/master/kernel/linux/ena#driver-compilation)」のセクションを参照してください。  
**Windows インスタンス** – ENA Windows ドライバー 2.0.0 以降。ENA Windows ドライバーをインストールまたは更新するには、「[EC2 Windows インスタンスに ENA ドライバーをインストールする](ena-adapter-driver-install-upgrade-win.md)」を参照してください。

**エンドポイント間の距離**  
同じアベイラビリティーゾーン内の 2 つのインスタンス間の接続は、リージョン間の接続よりも 1 秒あたりで多くのパケットを処理できます。これは、アプリケーション層での TCP ウィンドウ処理により、いつでも送信できるデータの量が決定されるためです。インスタンス間の距離が長いとレイテンシーが長くなり、エンドポイントで処理できるパケットの数が減少します。

**バイトキュー制限 (BQL)**  
BQL は、Nitro Card に渡されるバイト数を制限してキューイングを減らす機能です。BQL は、ENA ドライバー、Amazon Linux オペレーティングシステム、およびほとんどの Linux ディストリビューションでデフォルトで無効になっています。BQL とフラグメントプロキシの上書きの両方が有効になっている場合、すべてのフラグメントが処理される前に Nitro に渡されるバイト数が制限されることにより、パフォーマンスが低下する可能性があります。

#### アプリケーションの設計に関する考慮事項
<a name="ena-nitro-perf-app-design"></a>

アプリケーションの設計と構成には、処理効率に影響する要素がいくつか存在します。以下は、重要な考慮事項の一覧です。

**バケットサイズ**  
パケットサイズを大きくすると、インスタンスがネットワーク上で送受信できるデータのスループットが増加します。Amazon EC2 では 9001 バイトのジャンボフレームがサポートされますが、他のサービスでは異なる制限が適用される場合があります。パケットサイズを小さくすると、パケットの処理速度は上がりますが、パケット数が PPS の許容値を超えたときに達成される最大帯域幅が、減少する可能性があります。  
パケットのサイズがネットワークホップの最大転送単位 (MTU) を超えると、パス上のルーターがパケットをフラグメント化する可能性があります。生成されたパケットフラグメントは例外とみなされ、通常は標準速度 (高速ではない) で処理されます。これにより、パフォーマンスにばらつきが生じる可能性があります。ただし、フラグメントプロキシモード設定を使用して、アウトバウンドフラグメントパケットの標準の動作を上書きできます。詳細については、「[Nitro System でのネットワークパフォーマンスを最大化する](#ena-nitro-perf-maximize)」を参照してください。MTU を設定するときは、トポロジを評価することが推奨されます。

**プロトコルのトレードオフ**  
TCP のような信頼性の高いプロトコルは、UDP のような信頼性の低いプロトコルよりもオーバーヘッドが大きくなります。UDP トランスポートプロトコルの低いオーバーヘッドとシンプルなネットワーク処理により、PPS レートを高くすることができますが、信頼性の高いパケット配信が犠牲になります。アプリケーションにとって信頼性の高いパケット配信が重要でない場合は、UDP が適しているかもしれません。

**マイクロバースティング**  
マイクロバーストは、トラフィックが均等に分散されているときではなく、短時間で許容値を超えたときに発生します。通常これは、マイクロ秒単位で発生します。  
例えば、最大 10 Gbps を送信できるインスタンスがあり、アプリケーションが 10 Gb を 0.5 秒で送信するとします。このマイクロバーストは最初の 0.5 秒で許容値を超え、残りの時間には何も残りません。10 Gb を 1 秒以内に 送信したとしても、最初の 0.5 秒間に余裕があると、パケットがキューに入れられたりドロップされたりする可能性があります。  
Linux Traffic Control などのネットワークスケジューラを使用すると、スループットを調整でき、マイクロバーストによってパケットがキューに入れられたりドロップされたりすることを、防ぐことができます。

**フロー数**  
1 つのフローは、最大 10 Gbps をサポートするクラスタープレイスメントグループ内にある場合や、最大 25 Gbps をサポートする ENA Express を使用している場合を除いて、5 Gbps に制限されます。  
同様に、Nitro Card は、1 つのフローを使用する場合と比べて、複数のフローで、より多くのパケットを処理できます。インスタンスあたりの、ピークのパケット処理速度を達成するには、総帯域幅が 100 Gbps 以上のインスタンスで、100 フロー以上にすることが推奨されます。総帯域幅の容量が増えると、ピーク処理速度の達成に必要なフローの数も増えます。ベンチマークは、ネットワークのピーク速度を達成するために、どのような構成が必要かを判断するのに役立ちます。

**Elastic Network Adapter (ENA) キュー**  
ENA (Elastic Network Adapter) は、複数の受信 (Rx) キューと転送 (Tx) キュー (ENA キュー) を使用して、EC2 インスタンスのネットワークパフォーマンスとスケーラビリティを向上させます。これらのキューは、利用可能なキュー全体で送受信されるデータの負荷を分散させることで、ネットワークトラフィックを効率的に管理します。  
詳細については、「[ENA キュー](ena-queues.md)」を参照してください。

**特徴量処理のオーバーヘッド**  
トラフィックミラーリングや ENA Express などの機能では、処理オーバーヘッドが増加して、パケット処理の絶対的パフォーマンスが低下する可能性があります。パケットの処理速度は、機能の使用を制限したり、無効にしたりすることで上げることができます。

**状態を維持するための接続トラッキング**  
セキュリティグループは、接続トラッキングを使用して、インスタンスに出入りするトラフィックに関する情報を追跡します。接続トラッキングは、ネットワークトラフィックの各フローにルールを適用して、そのトラフィックが許可されているか拒否されているかを判定します。Nitro Card は、フロートラッキングを使用してフローの状態を維持します。適用されるセキュリティグループのルールが増えれば、フローを評価するための作業も増えます。  
トラフィックフローはすべて追跡されるわけではありません。セキュリティグループルールが [追跡されていない接続](security-group-connection-tracking.md#untracked-connections) で設定されている場合は、有効な応答パスが複数あるときに対称ルーティングを確保するため接続を自動的に追跡する場合を除いて、追加の作業は必要ありません。

#### ハードウェアアクセラレーションを使用しないパケット
<a name="ena-nitro-perf-exceptions"></a>

ハードウェアアクセラレーションは、すべてのパケットで利用できるわけではありません。これらの例外の処理には、ネットワークフローの状態を確認するために必要な、処理オーバーヘッドが伴います。ネットワークフローは、プロトコル標準を確実に満たし、VPC 設計の変更に従い、許可された宛先にのみパケットを送信する必要があります。ただし、オーバーヘッドはパフォーマンスを低下させます。

**パケットフラグメント**  
「**アプリケーションの考慮事項**」で述べたように、ネットワーク MTU を超えるパケットから発生するパケットフラグメントは、通常は例外として処理され、ハードウェアアクセラレーションを利用することはできません。ただし、ドライバーのバージョンによっては、フラグメントプロキシモードでエグレスフラグメントの制限を回避できます。詳細については、「[Nitro System でのネットワークパフォーマンスを最大化する](#ena-nitro-perf-maximize)」セクションで実行可能なアクションを確認してください。

**アイドル接続**  
接続がタイムアウト制限に達していなくても、接続に一定時間アクティビティがないと、システムはその優先順位を下げることができます。優先順位が下がった後にデータが入ってきた場合、システムは、再度接続するために、そのデータを例外として処理する必要があります。  
接続を管理するには、接続トラッキングタイムアウトを使用してアイドル接続を終了します。TCP キープアライブを使用して、アイドル接続を開放しておくこともできます。詳細については、「[アイドル接続追跡タイムアウト](security-group-connection-tracking.md#connection-tracking-timeouts)」を参照してください。

**VPC ミューテーション**  
セキュリティグループ、ルートテーブル、アクセスコントロールリストの更新は、すべて処理パスで再評価して、ルートエントリとセキュリティグループのルールが、想定どおりに適用されることを確認する必要があります。

**ICMP フロー**  
インターネット制御メッセージプロトコル (ICMP) は、ネットワーク通信の問題を診断する場合にネットワークデバイスで使用するネットワーク層プロトコルです。これらのパケットでは、常にフルフローが使用されます。

**非対称 L2 フロー**  
NitroV3 以前のプラットフォームでは、同一サブネット内の 2 つの ENI 間のトラフィックにおいて、片方の ENI がデフォルトゲートウェイルーターを使用し、もう片方が使用しない構成の場合、ハードウェアアクセラレーションは有効になりません。NitroV4 以降のプラットフォームでは、このシナリオにおいてハードウェアアクセラレーションが有効になります。NitroV3 以前のプラットフォームでのパフォーマンスを向上させるには、両方の ENI 間で使用されているデフォルトのゲートウェイルーター、またはそれらの ENI が異なるサブネットにあることを確認してください。

## Nitro System でのネットワークパフォーマンスを最大化する
<a name="ena-nitro-perf-maximize"></a>

Nitro システムのネットワークパフォーマンスは、ネットワーク設定を調整することで最大化できます。

**Topics**
+ [考慮事項](#considerations)
+ [PPS パフォーマンスの調整](#tuning)
+ [ENA キュー割り当てを設定する](#max-perf-ena-queues)
+ [Linux インスタンスのパフォーマンスを監視する](#monitoring)

### 考慮事項
<a name="considerations"></a>

設計上の決定や、インスタンスのネットワーク設定の調整を行う際には、ベストな結果が得られるよう、事前に以下の手順を実行しておくことが推奨されます。

1. [Nitro システムのネットワーク設計に関して考慮すべき事項](#ena-nitro-perf-considerations) をレビューして、パフォーマンスの向上に役立つアクションの、長所と短所を理解しておきます。

   Linux でのインスタンス設定に関するその他の考慮事項とベストプラクティスについては、GitHub の「[ENA Linux Driver Best Practices and Performance Optimization Guide](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/ENA_Linux_Best_Practices.rst)」を参照してください。

1. ピーク時のアクティブフロー数でワークロードをベンチマークし、アプリケーションパフォーマンスのベースラインを決定します。パフォーマンスベースラインを使用すると、設定やアプリケーション設計のバリエーションをテストして、特にスケールアップやスケールアウトを計画している場合に、どの考慮事項が最も大きな影響を与えるかを判断することができます。

### PPS パフォーマンスの調整
<a name="tuning"></a>

以下は、システムのニーズに応じて PPS のパフォーマンスを調整する際に活用できるアクションの一覧です。
+ 2 つのインスタンス間の物理的な距離を短くします。送信側と受信側のインスタンスが同じアベイラビリティーゾーンにある場合や、クラスタープレイスメントグループを使用している場合は、パケットが 1 つのエンドポイントから別のエンドポイントに移動する際に必要になるホップの数を、減らすことができます。
+ [追跡されていない接続](security-group-connection-tracking.md#untracked-connections) を使用します。
+ ネットワークトラフィックには UDP プロトコルを使用します。
+ 総帯域幅が 100 Gbps 以上の EC2 インスタンスでは、Nitro Card 全体に処理を均等に分散するために、100 以上の個別のフローにワークロードを分散します。
+ EC2 インスタンスのエグレスフラグメント PPS 制限を克服するには、フラグメントプロキシモードを有効にします (これはドライバーのバージョンによってできる場合とできない場合があります)。この設定により、フラグメント化されたパケットが処理パスで評価されるようになるため、エグレス PPS 制限の 1024 を克服できます。ドライバーをロードするときは、次のいずれかのコマンドを実行して、フラグメントプロキシモードを有効または無効にします。

  **フラグメントプロキシモードを有効にする**

  ```
  sudo insmod ena.ko enable_frag_bypass=1
  ```

  **フラグメントプロキシモードを無効にする**

  ```
  sudo insmod ena.ko enable_frag_bypass=0
  ```

### ENA キュー割り当てを設定する
<a name="max-perf-ena-queues"></a>

サポートされているインスタンスタイプでは、これらのキューを Elastic Network Interface (ENI) 全体に動的に割り当てることができます。柔軟な ENA キューの割り当てはリソース配分を最適化するため、vCPU を最大限に活用できます。通常、ネットワークパフォーマンスの高いワークロードには複数の ENA キューが必要です。詳細については、「[ENA キュー](ena-queues.md)」を参照してください。

### Linux インスタンスのパフォーマンスを監視する
<a name="monitoring"></a>

Linux インスタンスの Ethtool メトリクスを使用することで、帯域幅、パケットレート、接続トラッキングなどの、インスタンスのネットワークパフォーマンス指標を監視することができます。詳細については、「[EC2 インスタンスでの ENA 設定のネットワークパフォーマンスのモニタリング](monitoring-network-performance-ena.md)」を参照してください。

# EC2 Windows インスタンスでのネットワークパフォーマンスを最適化する
<a name="enhanced-networking-os"></a>

ネットワーキングが拡張された Windows インスタンスで最良のネットワークパフォーマンスを実現するには、デフォルトのオペレーティングシステム設定を変更する必要がある場合があります。高いネットワークパフォーマンスを必要とするアプリケーションには、次の設定変更をお勧めします。その他の最適化 (チェックサムオフロードをオンにして RSS を有効にするなど) は、公式の Windows AMI で既に行われています。

**注記**  
TCP Chimney オフロードはほとんどのユースケースで無効にする必要があり、Windows Server 2016 では廃止されています。

これらのオペレーティングシステムの最適化に加えて、ネットワークトラフィックの最大送信単位 (MTU) も考慮し、ワークロードとネットワークアーキテクチャーに応じて調整する必要があります。詳細については、[EC2 インスタンスのネットワークの最大送信単位 (MTU)](network_mtu.md)を参照してください。

AWS では、99.9 パーセンタイルで 50us のクラスタープレイスメントグループで起動されたインスタンスと 200us のテールレイテンシーの間のラウンドトリップレイテンシーを定期的に測定しています。アプリケーションで一貫して低レイテンシーが必要な場合、Nitro System で構築された固定パフォーマンスインスタンスで最新バージョンの ENA ドライバーを使用することをお勧めします。

## 受信側スケーリング CPU アフィニティを設定する
<a name="windows-rss-cpu-affinity"></a>

受信側スケーリング (RSS) は、複数のプロセッサにネットワークトラフィック CPU 負荷を分配するために使用されます。デフォルトでは、公式 アマゾン Windows AMI は、RSS を有効にして設定され、RSS を許可します。ENA Elastic Network Interface では、最大 8 個の RSS キューを利用できます。RSS キューやその他のシステム処理の CPU アフィニティを定義することで、マルチコアシステムで CPU の負荷を分散することができ、より多くのネットワークトラフィックを処理できます。16 個を超える vCPU を備えたインスタンスタイプでは、`Set-NetAdapterRSS` PowerShell cmdlet を使用することをお勧めします。この cmdlet は、さまざまなシステムコンポーネントとの競合を防ぐために、すべての エラスティックネットワークインターフェイス の RSS 設定からブートプロセッサ (ハイパースレッディングが有効になっている場合は論理プロセッサ 0 と 1) を手動で除外します。

Windows はハイパースレッド対応であり、単一の Elastic Network Interface の RSS キューが常に異なる物理コアに配置されるようにします。したがって、ハイパースレッディングが無効になっていない限り、他の NIC との競合を完全に防ぐために、各 NIC の RSS 設定が 16 個の論理プロセッサの全体で分散されます。`Set-NetAdapterRss` cmdlet を使用すると、BaseProcessorGroup、BaseProcessorNumber、MaxProcessingGroup、MaxProcessorNumber、および NumaNode (オプション) の値を定義することによって、NIC ごとの有効な論理プロセッサの範囲を定義できます。 エラスティックネットワークインターフェイス 間の競合を完全に排除するのに十分な物理コアがない場合は、インターフェイスで想定されるワークロードに応じて、 エラスティックネットワークインターフェイス 範囲内の論理プロセッサの数を減らします (つまり、管理ネットワークインターフェイスが少量であれば、それほど多くの RSS キューを割り当てる必要はないということです)。また、前記のように、さまざまなコンポーネントを CPU 0 で実行する必要があるため、十分な vCPU が利用可能な場合は、すべての RSS 構成から除外することをお勧めします。

例えば、ハイパースレッディングが有効になっている NUMA ノードを 2 つ備えた 72 の vCPU インスタンスに Elastic Network Interface が 3 つある場合、以下のコマンドは 2 つの CPU 間でネットワーク負荷を重複なく分散させ、コア 0 の使用を完全に防ぎます。

```
Set-NetAdapterRss -Name NIC1 -BaseProcessorGroup 0 -BaseProcessorNumber 2 -MaxProcessorNumber 16 
Set-NetAdapterRss -Name NIC2 -BaseProcessorGroup 1 -BaseProcessorNumber 0 -MaxProcessorNumber 14 
Set-NetAdapterRss -Name NIC3 -BaseProcessorGroup 1 -BaseProcessorNumber 16 -MaxProcessorNumber 30
```

これらの設定は各ネットワークアダプターに対して永続的であることに注意してください。インスタンスの vCPU 数が異なるインスタンスにサイズ変更された場合は、有効になっている Elastic Network Interface ごとに RSS 設定を再評価する必要があります。コマンドレットの完全な Microsoft ドキュメントは、[Set-NetAdapterRss ](https://learn.microsoft.com/en-us/powershell/module/netadapter/set-netadapterrss)にあります。

SQL ワークロードに関する特記事項: 同じ CPU に対する I/O およびネットワークの競合を最小限に抑えるために、Elastic Network Interface RSS 構成と共に I/O スレッドアフィニティ設定を確認することをお勧めします。[affinity mask Server Configuration Option](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/affinity-mask-server-configuration-option)を参照してください。