

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 增強 Amazon EC2 執行個體的聯網能力
<a name="enhanced-networking"></a>

增強型聯網使用單一根目錄 I/O 虛擬化 (SR-IOV) 在支援的執行個體類型上提供高效能聯網功能。SR-IOV 是一種相較於傳統虛擬網路介面可提高 I/O 效能及降低 CPU 使用率的裝置虛擬化方式。增強聯網提供更高的頻寬、更高的每秒封包數 (PPS) 效能，以及一致較低的執行個體間延遲。使用增強型聯網無需額外收費。

如需每種執行個體類型的支援網路速度資訊，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)。

您可以使用下列其中一種機制來啟用增強型網路：

**彈性網路轉接器 (ENA)**  
彈性網路轉接器 (ENA) 在支援的執行個體類型上支援高達 100 Gbps 的網路速度。  
所有[以 Nitro 系統為基礎的執行個體](instance-types.md#instance-hypervisor-type)均使用 ENA 以提供增強型網路功能。此外，下列 Xen 執行個體類型支援 ENA：H1、G3、I3、`m4.16xlarge`、P2、P3、P3dn 和 R4。  
如需詳細資訊，請參閱[在 EC2 執行個體上使用 ENA 啟用增強型網路](enhanced-networking-ena.md)。

**Intel 82599 虛擬功能 (VF) 介面**  
Intel 82599 虛擬功能介面在支援的執行個體類型上支援高達 10 Gbps 的網路速度。  
下列執行個體類型使用 Intel 82599 VF 介面來增強網路功能：C3、C4、D2、I2、M4 (不包括 m4.16xlarge) 和 R3。  
如需詳細資訊，請參閱[已使用 Intel 82599 VF 介面來強化網路。](sriov-networking.md)。

**Topics**
+ [彈性網路介面卡 (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 會透過彈性網路介面卡 (ENA) 提供增強型聯網功能。若要使用增強型聯網，您必須使用包含所需 ENA 驅動程式的 AMI，或手動安裝它。然後，您可以在執行個體上啟用 ENA 支援。

若要檢閱 ENA 驅動程式的版本備註或安裝指示，請參閱符合您執行個體作業系統平台的標籤。

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

您可以在 GitHub 上檢閱下列文件：
+ 在 GitHub 上檢閱 [ENA Linux 核心驅動程式版本備註](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/RELEASENOTES.md)。
+ 如需 ENA Linux 核心驅動程式的概述，包括安裝說明，請參閱 GitHub 上[彈性網路介面卡 (ENA) 系列的 Linux 核心驅動程式](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/README.rst)。

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

您可以從本指南的**管理裝置驅動程式**區段檢閱下列文件：
+ [追蹤 ENA Windows 驅動程式版本版本](ena-driver-releases-windows.md).
+ [在 EC2 Windows 執行個體上安裝 ENA 驅動程式](ena-adapter-driver-install-upgrade-win.md).

------

對於 Nitro 型執行個體，增強型聯網功能會因執行個體類型實作的 Nitro 版本而異。

若要檢閱執行個體的網路規格，請選擇執行個體類型的執行個體系列連結。如果您不確定適用的執行個體系列，請參閱「Amazon EC2 執行個體類型指南」**中的[命名慣例](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，以備份這些資料。更新 ENA 核心驅動程式並啟用 `enaSupport` 屬性，可能會導致無法存取不相容的執行個體或作業系統。如果您有較新的備份，發生這些狀況時資料便能獲得保留。
+ **Linux 執行個體**：使用支援版本的 Linux 核心和支援的發行版本，啟動執行個體，即可讓執行個體自動啟用 ENA 增強型聯網。如需詳細資訊，請參閱 [ENA Linux 核心驅動程式版本備註](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/RELEASENOTES.md)。
+ **Windows 執行個體**：如果執行個體正在執行 Windows 伺服器 2008 R2 SP1，請確定已有 [SHA-2 程式碼簽署支援更新](https://support.microsoft.com/en-us/help/4474419/sha-2-code-signing-support-update)。
+ [AWS CloudShell](https://console.aws.amazon.com/cloudshell) 從 使用 AWS 管理主控台，或在您選擇的[AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)任何電腦上安裝和設定 [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)或 ，最好是本機桌上型電腦或筆記型電腦。如需詳細資訊，請參閱 [存取 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) cmdlet。

```
(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) cmdlet。

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

若已啟用增強型聯網，則輸出如下所示。

```
True
```

------

**Linux 介面驅動程式**  
請用下列命令確認 `ena` 核心驅動程式用於特定介面，並將介面名稱換成您想要檢查的介面。如果您使用單一介面 (預設)，則這會是 `eth0`。如果您的 Linux 發行版本支援可預測的網路名稱，其名稱可能類似於 `ens5`。如需詳細資訊，請展開 [在執行個體上啟用增強型網路](enabling_enhanced_networking.md) 中 RHEL、SUSE 和 CentOS 的區段。

在下列範例中，不會載入 `ena` 核心驅動程式，因為列出的驅動程式為 `vif`。

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

Amazon Linux 的 AMI 包含已安裝 ENA 之增強型聯網所需的核心驅動程式，並且已啟用 ENA 支援。因此，如果您在支援的執行個體類型上使用 Amazon Linux HVM 版本啟動執行個體，則您的執行個體已啟用增強型聯網。如需詳細資訊，請參閱[測試是否已啟用增強型網路](test-enhanced-networking-ena.md)。

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

最新的 Ubuntu HVM AMI 包含已安裝 ENA 之增強型聯網所需的核心驅動程式，並且已啟用 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 支援的執行個體] 從本機電腦中，使用 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)。

   [執行個體存放區後端執行個體] 您無法停止執行個體來修改屬性。請改為執行此程序：[在 Ubuntu 上啟用增強型聯網 (執行個體後端執行個體)](#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) (Tools for Windows PowerShell)

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

1. (選擇性) 從執行個體建立 AMI，如 [建立 Amazon EBS 支援的 AMI](creating-an-ami-ebs.md) 所述。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 上啟用增強型聯網 (執行個體後端執行個體)**

遵循先前的程序，一直進行到您停止執行個體的那個步驟。如 [建立 Amazon S3 支援的 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>

適用於 Red Hat Enterprise Linux 、SUSE Linux Enterprise Server 以及 CentOS 最新 AMI 包含使用 ENA 之增強型聯網所需的核心驅動程式，並且已啟用 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. 在您的執行個體上從 GitHub (網址為 [https://github.com/amzn/amzn-drivers](https://github.com/amzn/amzn-drivers)) 中複製 `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 網站上的[可預測的網路介面名稱](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 支援的執行個體] 從本機電腦中，使用 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)。

   [執行個體存放區後端執行個體] 您無法停止執行個體來修改屬性。請改為執行此程序：[在 Linux 上啟用增強型聯網 (執行個體存放區後端執行個體)](#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) (Tools for Windows PowerShell)

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

1. (選擇性) 從執行個體建立 AMI，如 [建立 Amazon EBS 支援的 AMI](creating-an-ami-ebs.md) 所述。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 上啟用增強型聯網 (執行個體存放區後端執行個體)**

遵循先前的程序，一直進行到您停止執行個體的那個步驟。如 [建立 Amazon S3 支援的 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 ...
  ```

## Ubuntu 搭配 DKMS
<a name="enhanced-networking-ena-ubuntu-dkms"></a>

此方法僅用於測試和意見回饋用途。不適用於生產部署。如需生產部署，請參閱[Ubuntu](#enhanced-networking-ena-ubuntu)。

**重要**  
使用 DKMS 會使訂閱的支持協議無效。它不應該用於生產部署。

**在 Ubuntu 上使用 ENA 啟用增強型聯網 (EBS 後端執行個體)**

1. 請遵循[Ubuntu](#enhanced-networking-ena-ubuntu)中的步驟 1 和 2。

1. 安裝 `build-essential` 套件，以編譯核心驅動程式和 `dkms` 套件，使 `ena` 核心驅動程式在每次核心更新時重建。

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

1. 在您的執行個體上從 GitHub (網址為 [https://github.com/amzn/amzn-drivers](https://github.com/amzn/amzn-drivers)) 中複製 `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 script 來安裝驅動程式。
**注意**  
如果您收到執行政策錯誤，請將政策設定為 `Unrestricted` (預設設定為 `Restricted` 或 `RemoteSigned`)。在命令列中，執行 `Set-ExecutionPolicy -ExecutionPolicy Unrestricted`，然後再次執行 `install.ps1` PowerShell 指令碼。

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) (Tools for 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. 如先前所示，使用 `true` 或 **describe-instances**，確認屬性已設定為 **Get-EC2Instance**。您現在應該會看到下列輸出：

      ```
      [
      	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 (Amazon 彈性網路介面卡)**。

1. (選擇性) 從執行個體建立 AMI。AMI 將從執行個體繼承 `enaSupport` 屬性。因此，您預設可用此 AMI 啟動其他啟用 ENA 的執行個體。

# ENA 佇列
<a name="ena-queues"></a>

根據執行個體類型與大小，將 ENA 佇列配置給具有預設靜態限制的網路介面。在支援的執行個體類型上，您可在彈性網路介面 (ENI) 之間動態配置這些佇列。每個執行個體的總佇列數取決於其類型與大小，但您可以為多個 ENI 設定 ENA 佇列，直到達到 ENI 與執行個體的佇列數上限。

彈性的 ENA 佇列配置可最佳化資源分佈，實現 vCPU 使用率最大化。通常情況下，高網路效能工作負載需要多個 ENA 佇列。您可根據特定工作負載需求調整佇列計數，進而微調網路效能與每秒封包數 (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>

您可以使用 AWS 管理主控台 或 修改 ENA 佇列的數量 AWS CLI。在 AWS 管理主控台中，每個**網路介面**設定下方均提供 ENA 佇列組態選項。

若要使用 修改 ENA 佇列數量 AWS CLI，請使用下列其中一個命令。修改佇列計數前，請使用下列命令來檢查您目前的佇列計數。

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

彈性網路轉接器 (ENA) 設計旨在提高作業系統運作狀態，並減少由於預料之外硬體行為及/或故障而導致長期中斷之可能性。ENA 架構盡可能使裝置或驅動程式的故障對系統保持透明。本主題提供 ENA 的故障診斷資訊。

如果您無法連線至您的執行個體，請由 [疑難排解連線問題](#ena-connectivity-issues) 章節開始。

如果您在遷移至第六代執行個體類型後遇到效能降低的情況，請參閱文章 [What do I need to do before migrating my EC2 instance to a sixth generation instance to make sure that I get maximum network performance?](https://repost.aws/knowledge-center/migrate-to-gen6-ec2-instance) (在將 EC2 執行個體遷移至第六代執行個體之前，我需要做些什麼來確保獲得最高網路效能？)

如果您能夠連線至您的執行個體，則可以使用本主題後面章節中說明的故障診斷和復原機制來收集診斷資訊。

**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 後端執行個體)**

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) cmdlet (AWS Tools for PowerShell) 來停止執行個體。

1. 從本機電腦中，搭配使用 [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 命令與 `--no-ena-support` 選項或具有 `-EnaSupport $false` 參數的 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet 來停用增強型聯網屬性。

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) cmdlet 來啟動執行個體。

1. (選用) 請連線到您的執行個體，並嘗試遵循 `ena` 中的步驟使用目前核心版本來重新安裝 [在 EC2 執行個體上使用 ENA 啟用增強型網路](enhanced-networking-ena.md) 模組。<a name="disable-enhanced-networking-ena-instance-store"></a>

**停用增強聯網與 ENA (執行個體後端執行個體)**

1. 如 [建立 Amazon S3 支援的 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) cmdlet 中包含 `-EnaSupport $false` 參數。

## 保持有效機制
<a name="ena-keep-alive"></a>

ENA 裝置以固定速率張貼保持有效事件 (通常每秒一次)。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 架構暗示記憶體映射之 I/O (MMIO) 讀取操作的限量使用。ENA 裝置驅動程式僅在其初始化程序中存取 MMIO 註冊。

如果驅動程式日誌 (在 **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*  
在達到該執行個體類型的追蹤連線限額之前，執行個體可建立的追蹤連線數目。僅適用於 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` 為零，減去 `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
```

**我可以忽略哪些錯誤？**  
彈性網路轉接器可以忽略下列可能出現在系統錯誤日誌中的警告：

Set host attribute isn't supported  
此裝置不支援主機屬性。

failed to alloc buffer for rx queue  
此為可復原的錯誤，指出在錯誤拋出時可能存在記憶體壓力問題。

Feature *X* isn't supported  
參考的功能不受彈性網路轉接器支援。*X* 可能的值包括：  
+ 10：此裝置不支援 RSS 雜湊功能組態。
+ 12：此裝置不支援 RSS 間接資料表組態。
+ 18：此裝置不支援 RSS 雜湊輸入組態。
+ 20：此裝置不支援中斷管制。
+ 27：彈性網路轉接器驅動程式不支援從 snmpd 中輪詢乙太網路功能。

Failed to config AENQ  
彈性網路轉接器不支援 AENQ 組態。

Trying to set unsupported AENQ events  
此錯誤指出嘗試設定彈性網路轉接器不支援的 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 大小。若要進一步了解如何控制、查詢和啟用寬型 LLQ，請參閱「Amazon Drivers GitHub 儲存庫」**中適用於 ENA 文件的 Linux 核心驅動程式的[大型低延遲佇列 (大型 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 大小和 Tx 封包流量的 ENA 會超過受支援的標頭大小上限**

  根據預設，ENA LLQ 可支援最多 96 個位元組的 Tx 封包標頭大小。如果封包標頭大小大於 96 個位元組，系統會捨棄該封包。若要減少此問題，建議您啟用寬型 LLQ，這會將受支援的 Tx 封包標頭大小增加至最多 224 個位元組。

  然而，在您啟用寬型 LLQ 時，Tx 環的大小上限會從 1000 個項目縮減為 512 個項目。根據預設，系統會為所有 Nitro v4 和較新版本的執行個體類型啟用寬型 LLQ。
  + Nitro v4 執行個體類型的寬型 LLQ Tx 環大小上限預設為 512 個項目，且無法變更。
  + Nitro v5 執行個體類型預設的寬 LLQ Tx 環大小為 512 個項目，最多可增加至 1000 個項目。

  您可以執行以下 **ethtool** 命令來調整 LLQ 大小。若要進一步了解如何控制、查詢和啟用寬型 LLQ，請參閱「Amazon Drivers GitHub 儲存庫」**中適用於 ENA 文件的 Linux 核心驅動程式的[大型低延遲佇列 (大型 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) 工具的步驟會有所不同，具體取決於您執行個體上安裝的作業系統版本。在以下各部分，我們使用 **Run** (執行) 對話方塊開啟工具，該工具在所有作業系統版本的操作方式均相同。但是，您可以使用偏好的任何方法來存取這些工具。

**存取 Run (執行) 對話方塊**
+ 使用 Windows 標誌鍵組合：`Windows` \$1 `R`
+ 使用搜尋列：
  + 在搜尋列中，輸入 `run`。
  + 從搜尋結果中選擇 **Run** (執行) 應用程式。

某些步驟需要內容功能表才能存取屬性或內容相關動作。根據您的作業系統版本和硬體，可透過多種方式執行此作業。

**存取內容功能表**
+ 使用滑鼠：在項目上按一下滑鼠右鍵以顯示其內容功能表。
+ 使用鍵盤：
  + 根據您的作業系統版本，使用 `Shift` \$1 `F10` 或 `Ctrl` \$1 `Shift` \$1 `F10`。
  + 如果鍵盤上有內容鍵 (方塊中帶有三條水平線)，請選擇所需項目，然後按內容鍵。

如果可以連接到自己的執行個體，請使用以下技術收集診斷資訊以進行故障診斷。

### 檢查 ENA 裝置狀態
<a name="ts-ena-diagnostics-device-mgr"></a>

若要使用 Windows Device Manager 檢查 ENA Windows 驅動程式的狀態，請按照下列步驟操作：

1. 使用上一部分中描述的其中一種方法開啟 **Run** (執行) 對話方塊。

1. 若要開啟 Windows Device Manager (Windows 裝置管理員)，請在 **Run** (執行) 對話方塊中輸入 `devmgmt.msc`。

1. 選擇**確定**。這將開啟 Device Manager (裝置管理員) 視窗。

1. 選取 **Network adapters** (網路轉接器) 左側的箭頭以展開清單。

1. 選取名稱，或開啟 **Amazon Elastic Network Adapter** (Amazon 彈性網路介面卡) 的內容功能表，然後選擇 **Properties** (屬性)。這會開啟 **Amazon 彈性網路介面卡屬性**對話方塊。

1. 確認**一般**索引標籤中的訊息顯示「此裝置運作正常」。

### 調查驅動程式事件訊息
<a name="ts-ena-diagnostics-event-log"></a>

若要使用 Windows 事件檢視器檢視 ENA Windows 驅動程式事件日誌，請按照下列步驟操作：

1. 使用上一部分中描述的其中一種方法開啟 **Run** (執行) 對話方塊。

1. 若要開啟 Windows 事件檢視器，請在 **Run** (執行) 對話方塊中輸入 `eventvwr.msc`。

1. 選擇**確定**。Event Viewer (事件檢視器) 視窗隨即開啟。

1. 展開 **Windows Logs** (Windows 日誌) 功能表，然後選擇 **System** (系統)。

1. 在右上方面板中的 **Action** (動作) 下，選擇 **Filter Current Log** (篩選當前日誌)。此時將顯示篩選對話方塊。

1. 在 **Event sources** (事件來源) 方塊中，輸入 `ena`。這會將結果限製為由 ENA Windows 驅動程式產生的事件。

1. 選擇**確定**。此時將在視窗的詳細資訊部分顯示篩選的事件日誌結果。

1. 要深入查看詳細資訊，請從清單中選擇一條事件訊息。

下面的範例顯示了 Windows 事件檢視器系統事件清單中的 ENA 驅動程式事件：

![\[範例：在 Windows 事件檢視器系統訊息清單中顯示的 ENA 驅動程式事件。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ena-event-viewer-example.png)


#### 事件訊息摘要
<a name="ts-ena-diagnostics-event-messages"></a>

如下資料表顯示了 ENA Windows 驅動程式產生的事件訊息。


**Input**  

| 事件 ID | ENA 驅動程式事件描述 | Type | 
| --- | --- | --- | 
| 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 版)。因第六代 EC2 執行個體的潛在效能下降，ENA 驅動程式 2.2.4 版已回復。建議您升級至驅動程式的目前版本，確保您擁有最新的更新項目。

使用效能指標的一些方式包括：
+ 對執行個體效能問題執行故障診斷。
+ 為工作負載選擇合適的執行個體大小。
+ 主動規劃擴展活動。
+ 基準化應用程式，以確定它們是否最大限度地提高了執行個體上可用的效能。

**重新整理速率**  
根據預設，驅動程式使用 1 秒的間隔重新整理指標。但是，擷取指標的應用程式可能會使用不同的間隔進行輪詢。您可以使用驅動程式的進階屬性，在 Device Manager (裝置管理員)中變更重新整理間隔。

若要變更 ENA Windows 驅動程式的指標重新整理間隔，請按照下列步驟操作：

1. 使用上一部分中描述的其中一種方法開啟 **Run (執行)** 對話方塊。

1. 若要開啟 Windows Device Manager (Windows 裝置管理員)，請在 **Run** (執行) 對話方塊中輸入 `devmgmt.msc`。

1. 選擇**確定**。這將開啟 Device Manager (裝置管理員) 視窗。

1. 選取 **Network adapters** (網路轉接器) 左側的箭頭以展開清單。

1. 選取名稱，或開啟 **Amazon Elastic Network Adapter** (Amazon 彈性網路介面卡) 的內容功能表，然後選擇 **Properties** (屬性)。這會開啟 **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. 選擇**確定**。Event Viewer (事件檢視器) 視窗隨即開啟。

1. 展開 **Windows Logs** (Windows 日誌) 功能表，然後選擇 **System** (系統)。

1. 在右上方面板中的 **Action** (動作) 下，選擇 **Filter Current Log** (篩選當前日誌)。此時將顯示篩選對話方塊。

1. 在 **Event sources** (事件來源) 方塊中，輸入 `ena`。這會將結果限製為由 ENA Windows 驅動程式產生的事件。

1. 選擇**確定**。此時將在視窗的詳細資訊部分顯示篩選的事件日誌結果。

具有 ID `59000` 的事件會通知您非最佳化的組態調查結果。在事件上按一下右鍵，然後選擇**事件屬性**以開啟詳細檢視，或從**檢視**功能表中選取**預覽窗格**，查看相同的詳細資訊。

![\[範例：系統事件 ID 59000 會顯示在 Windows 事件檢視器預覽窗格中。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ena-sub-opt-event-general.png)


開啟**詳細資訊**索引標籤以查看事件代碼。在**二進位資料：單字**區段中，最後一個單字為程式碼。

![\[範例：二進位資料區段中的最後一個字詞會以反白顯示。\]](http://docs.aws.amazon.com/zh_tw/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 Device Manager (Windows 裝置管理員)，請在 **Run** (執行) 對話方塊中輸入 `devmgmt.msc`。

  1. 選擇**確定**。這將開啟 Device Manager (裝置管理員) 視窗。

  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 Device Manager (Windows 裝置管理員)，請在 **Run** (執行) 對話方塊中輸入 `devmgmt.msc`。

  1. 選擇**確定**。這將開啟 Device Manager (裝置管理員) 視窗。

  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 Windows 驅動程式實作監視程式機制，該機制會檢查這些保持有效訊息的存在。如果自上次檢查以來偵測到一條或多條新訊息，它就會記錄成功結果。否則，驅動程式得出裝置出現故障的結論，並啟動重設序列。
+ 封包卡在傳輸佇列中

  ENA 轉接器驗證封包是否按預期方式通過傳輸佇列。ENA Windows 驅動程式偵測封包是否卡住，如果已卡住，則啟動重設序列。
+ 記憶體映射 I/O (MMIO) 暫存器的讀取逾時

  若要限制記憶體映射 I/O (MMIO) 讀取操作，ENA Windows 驅動程式僅在初始化和重設過程中存取 MMIO 暫存器。如果驅動程式偵測到逾時，它將執行以下動作之一，具體取決於正在執行的程序：
  + 如果在初始化過程中偵測到逾時，它會讓流程失敗，從而導致驅動程式在 Windows Device Manager (裝置管理員) 中的 ENA 轉接器上顯示黃色的驚歎號。
  + 如果在重設過程中偵測到逾時，則會讓流程失敗。然後，作業系統會啟動 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 作業系統版本的最新驅動程式，請參閱 [追蹤 ENA Windows 驅動程式版本版本](ena-driver-releases-windows.md)。

### 非預期的 ENA 驅動程式版本已安裝
<a name="ts-ena-drv-sc-unexpected-vsn"></a>

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

在完成安裝特定版本 ENA 驅動程式的步驟之後，Windows Device Manager 會顯示 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. 開啟 Device Manager (裝置管理員) 屬性視窗，如 [檢查 ENA 裝置狀態](#ts-ena-diagnostics-device-mgr) 部分中所述。這會開啟 **Amazon 彈性網路介面卡屬性**視窗的**一般**索引標籤。

1. 開啟 **Driver** (驅動程式) 索引標籤。

1. 選擇 **Update Driver (更新驅動程式)**。這會開啟**更新驅動程式軟體 – Amazon 彈性網路介面卡**對話方塊。

   1. 在**您要如何搜尋驅動程式軟體？**區段中，選擇**瀏覽電腦上的驅動程式軟體**。

   1. 在**瀏覽電腦上的驅動程式軟體**頁面中，選擇位於搜尋欄下方的**讓我從電腦上的裝置驅動程式清單挑選**。

   1. 在**選取您要為此硬體安裝的裝置驅動程式**頁面中，選擇**擁有磁碟...**。

   1. 在**從磁碟安裝**視窗中，選擇下拉式清單中檔案位置旁邊的**瀏覽...**。

   1. 導覽至下載目標 ENA 驅動程式套件的位置。選取名為 `ena.inf` 的檔案，然後選擇**開啟**。

   1. 若要開始安裝，請選擇**確定**，然後選擇**下一步**。

1. 如果安裝程式未自動重新啟動執行個體，則請執行 **Restart-Computer** PowerShell cmdlet。

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

### ENA 驅動程式的裝置警告
<a name="ts-ena-drv-sc-device-warn"></a>

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

Device Manager (裝置管理員) 的 **Network adapters** (網路轉接器) 部分中的 ENA 轉接器圖示顯示一個警告符號 (內部帶有驚歎號的黃色三角形)。

下面的範例顯示了在 Windows Device Manager (裝置管理員) 中帶有警告圖示的 ENA 轉接器：

![\[範例：在 Windows Device Manager (裝置管理員)中帶有警告圖示的 ENA 轉接器。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ena-adapter-device-mgr-warn.png)


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

此裝置警告通常由環境問題引起，此問題可能需要進行更多的研究，並且通常需要執行消除程序來確定根本原因。如需完整的設備錯誤清單，請參閱 Microsoft 文件中的[設備管理器錯誤訊息](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. 

**停止並啟動裝置。**

   開啟 Device Manager (裝置管理員) 屬性視窗，如 [檢查 ENA 裝置狀態](#ts-ena-diagnostics-device-mgr) 部分中所述。這將開啟 **Amazon Elastic Network Adapter Properties** (Amazon 彈性網路轉接器屬性) 視窗中的 **General** (常規) 索引標籤，其中 **Device status** (裝置狀態) 顯示錯誤代碼和一條簡短訊息。

   1. 開啟 **Driver** (驅動程式) 索引標籤。

   1. 選擇 **Disable Device** (停用裝置)，在顯示的警告訊息中回應 **Yes** (是)。

   1. 選擇 **Enable Device** (啟用裝置)。

1. 

**停止並啟動 EC2 執行個體**

   如果轉接器仍在 Device Manager (裝置管理員) 中顯示警告圖示，則下一步是停止並啟動 EC2 執行個體。在大多數情況下，這會在不同硬體上重新啟動執行個體。

1. 

**調查可能的執行個體資源問題**

   如果您已停止並啟動 EC2 執行個體，但問題仍然存在，這可能表明您的執行個體存在資源問題，例如記憶體不足。

### 轉接器重設時連接逾時 (錯誤代碼 5007、5205)
<a name="ts-ena-drv-sc-conn"></a>

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

Windows 事件檢視器顯示 ENA 轉接器的適配器逾時以及結合其發生的事件。消息類似以下範例：
+ **事件 ID 5007**：Amazon 彈性網路轉接器：操作過程中逾時。
+ **事件 ID 5205**：Amazon 彈性網路轉接器：轉接器重設已啟動。

轉接器重設會導致最小規模的流量中斷。即使執行多個重設，它們也很少會導致任何嚴重的網路中斷。

#### 原因
<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 Resource Monitor (資源監視器)，請在 **Run** (執行) 對話方塊中輸入 `resmon`。

1. 選擇**確定**。這將開啟 Resource Monitor (資源監視器) 視窗。

1. 開啟 **CPU** 索引標籤。每個 CPU 的用量圖表顯示在 Resource Monitor (資源監視器) 視窗的右側。

1. 檢查 CPU 0 的用量級別，了解它們是否太高。

我們建議您設定 RSS 以排除較大執行個體類型 (超過 16 個 vCPU) 上適用於 ENA 轉接器的 CPU 0。對於較小的執行個體類型，設定 RSS 可能會改善體驗，但由於可用核心數量較少，因此必須進行測試，以確保限制 CPU 核心不會對效能產生負面影響。

使用 **Set-NetAdapterRss** 命令為 ENA 轉接器設定 RSS，如下列範例所示。

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

### 遷移到第六代執行個體基礎設施會影響效能或配件
<a name="ts-ena-drv-6gen-instance-perf"></a>

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

如果遷移到第六代 EC2 執行個體，並且您尚未更新 ENA Windows 驅動程式版本，則可能會遇到效能下降或 ENA 配件故障。

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

依據執行個體作業系統 (OS)，第六代 EC2 執行個體類型需要以下 ENA Windows 驅動程式的最低版本。


**最低版本**  

| Windows Server 版本 | ENA 驅動程式版本 | 
| --- | --- | 
|  Windows Server 2008 R2  |  2.2.3 或 2.4.0  | 
|  Windows Server 2012 及更新版本  |  2.2.3 和更新版本  | 
|  Windows 工作站  |  2.2.3 和更新版本  | 

#### 解決方案
<a name="ts-ena-drv-6gen-instance-perf-solution"></a>

在升級至第六代 EC2 執行個體之前，請確定您用來啟動的 AMI 具有相容驅動程式 (依據執行個體作業系統)，如上表所示。如需詳細資訊，請參閱 *AWS re:Post 知識中心*文章[在將 EC2 執行個體遷移至第六代執行個體之前，我需要做些什麼來確保獲得最高網路效能？](https://repost.aws/knowledge-center/migrate-to-gen6-ec2-instance)。

### 彈性網路介面效能不佳
<a name="ts-ena-drv-interface-perf"></a>

#### Description
<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 Device Manager (Windows 裝置管理員)，請在 **Run** (執行) 對話方塊中輸入 `devmgmt.msc`。

1. 選擇**確定**。這將開啟 Device Manager (裝置管理員) 視窗。

1. 選取 **Network adapters** (網路轉接器) 左側的箭頭以展開清單。

1. 選取名稱，或開啟 **Amazon Elastic Network Adapter** (Amazon 彈性網路介面卡) 的內容功能表，然後選擇 **Properties** (屬性)。這會開啟 **Amazon 彈性網路介面卡屬性**對話方塊。

1. 若要進行變更，請開啟**進階**索引標籤。

1. 完成後，請選擇**確定**以儲存變更。

下面的範例顯示了 Windows Device Manager (裝置管理員) 中的 ENA 轉接器屬性：

![\[範例：Windows Device Manager (裝置管理員) 中顯示的 ENA 轉接器屬性。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ena-adapter-device-mgr-property.png)


##### ENA 轉接器效能調整
<a name="ts-ena-drv-perf-adj"></a>

下表包含可調整以提高 ENA 介面效能的屬性。


**Input**  

| 屬性 | Description | 預設值 | 調整 | 
| --- | --- | --- | --- | 
|  接收緩衝區  |  控制軟體接收佇列中的項目數目。  |  1024  |  可提高至上限 8192。  | 
|  接收端調整 (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/zh_tw/AWSEC2/latest/UserGuide/troubleshoot-ena-driver.html) 根據執行個體和硬體世代限制，您可以設定 1-32 的值。如需詳細資訊，請參閱 [在 EC2 Windows 執行個體上最佳化網路效能](enhanced-networking-os.md)。  | 
|  巨型封包  |  允許使用巨型乙太網路訊框 (超過 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 內部和之間的流量非常有用。我們建議在以下使用案例中使用巨型訊框：
+ 以配置於叢集置放群組內的執行個體而言，巨型訊框有助實現最大網路傳輸量。如需詳細資訊，請參閱[Amazon EC2 執行個體的置放群組](placement-groups.md)。
+ 您可以針對透過 Direct Connect的 VPC 和現場部署網路之間的流量，使用 Jumbo Frame。如需有關使用 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，您可以在相同可用區域中的兩個 EC2 執行個體之間進行通訊。

**ENA Express 的優勢**
+ 將單一流程在可用區域中可使用的最高頻寬從 5Gbps 增加到最高 25Gbps，最高可達彙總執行個體限制。
+ 減少 EC2 執行個體之間網路流量的尾延遲，特別是在高網路負載期間。
+ 偵測並避免擁塞的網路路徑。
+ 直接在網路層中處理某些任務，例如接收端的封包重新排序，以及大多數需要的重新傳輸。這會釋放應用程式層進行其他工作。

**注意**  
如果應用程式每秒傳送或接收大量封包，而且大部分時間需要最佳化延遲，尤其是在網路上沒有擁塞的期間，則 [增強型網路](enhanced-networking.md) 可能更適合您的網路。
ENA Express 流量無法在本機區域中傳送。

在執行個體上為網路介面附件啟用 ENA Express 之後，傳送執行個體會啟動與接收執行個體的通訊，而 SRD 會偵測 ENA Express 是否同時在傳送執行個體和接收執行個體上運作。如果 ENA Express 正在運作，則通訊可以使用 SRD 傳輸。如果 ENA Express 尚未運作，則通訊會回復為標準 ENA 傳輸。

在網路流量較輕的期間，當封包使用 ENA Express 時，您可能會注意到封包延遲會略有增加 (數十微秒)。在這段時間內，優先考慮特定網路效能特性的應用程式可以從 ENA Express 中受益，如下所示：
+ 程序可以從相同可用區域內最高單一流量頻寬從 5Gbps 增加到最高 25Gbps 中獲益，最高可達彙總執行個體限制。例如，如果特定執行個體類型最高支援 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/zh_tw/AWSEC2/latest/UserGuide/ena-express.html)

  在這種情況下，兩個執行個體之間的 TCP 流量可以使用 ENA Express，因為這兩個執行個體皆已將其啟用。但是，由於其中一個執行個體並未將 ENA Express 用於 UDP 流量，因此這兩個執行個體透過 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 之後，您可以使用 ENA Express 指標來協助確保您的執行個體充分利用 SRD 技術提供的效能改進。如需 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 ]


| 執行個體類型 | Architecture | 
| --- | --- | 
| 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 ]


| 執行個體類型 | Architecture | 
| --- | --- | 
| 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 ]


| 執行個體類型 | Architecture | 
| --- | --- | 
| 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 ]


| 執行個體類型 | Architecture | 
| --- | --- | 
| 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 ]


| 執行個體類型 | Architecture | 
| --- | --- | 
| 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 可以順利運作，請為您的執行個體更新下列設定。
+ 如果您的執行個體使用巨型訊框，則請執行下列命令，將最大傳輸單位 (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. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中，選擇 **Network Interfaces** (網路介面)。

1. 選取網路介面以查看該執行個體的詳細資訊。您可以選擇 **Network interface ID** (網路介面 ID) 連結，以開啟詳細資訊頁面；或選取清單左側的核取方塊，以在頁面底部的詳細資訊窗格中檢視詳細資訊。

1. 在**詳細資訊**索引標籤或詳細資訊頁面的**網路介面附件**區段中，檢視 **ENA Express** 和 **ENA Express UDP** 的設定。

**檢視執行個體的 ENA Express 設定**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中選擇 **(執行個體)**。

1. 選取執行個體以查看該執行個體的詳細資訊。您可以選擇 **Instance ID** (執行個體 ID) 連結，以開啟詳細資訊頁面；或選取清單左側的核取方塊，以在頁面底部的詳細資訊窗格中檢視詳細資訊。

1. 在 **Networking** (聯網) 標籤的 **Network interfaces** (網路介面) 區段中，向右捲動以檢視 **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) cmdlet。

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

您可以針對支援的 EC2 執行個體類型設定 ENA Express，而無需安裝任何其他軟體。如需詳細資訊，請參閱[ENA Express 支援的執行個體類型](ena-express.md#ena-express-supported-instance-types)。

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

**管理網路介面的 ENA Express**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中，選擇 **Network Interfaces** (網路介面)。

1. 選取要連接到執行個體的網路介面。您可以選擇 **Network interface ID** (網路介面 ID) 連結，以開啟詳細資訊頁面；或選取清單左側的核取方塊。

1. 從頁面右上角的 **Action** (動作) 功能表中選擇 **Manage ENA Express** (管理 ENA Express)。此操作會開啟 **Manage ENA Express** (管理 ENA Express) 對話方塊，並顯示選取的網路介面 ID 和目前設定。

   如果您選取的網路介面未連接至執行個體，則此動作不會顯示在功能表中。

1. 若要使用 **ENA Express**，請選取**啟用**核取方塊。

1. 啟用 ENA Express 時，您可以設定 UDP 設定。若要使用 **ENA Express UDP**，請選取**啟用**核取方塊。

1. 若要儲存設定，請選擇 **Save** (儲存)。

**管理執行個體的 ENA Express**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中選擇 **(執行個體)**。

1. 選取您要管理的執行個體。您可以選擇 **Instance ID** (執行個體 ID) 連結，以開啟詳細資訊頁面；或選取清單左側的核取方塊。

1. 選取要為您的執行個體設定的 **Network interface** (網路介面)。

1. 從頁面右上角的 **Action** (動作) 功能表中選擇 **Manage ENA Express** (管理 ENA Express)。

1. 若要為連接至執行個體的網路介面設定 ENA Express，請從 **Network interface** (網路介面) 清單中進行選取。

1. 若要將 **ENA Express** 用於選取的網路介面附件，請選取**啟用**核取方塊。

1. 啟用 ENA Express 時，您可以設定 UDP 設定。若要使用 **ENA Express UDP**，請選取**啟用**核取方塊。

1. 若要儲存設定，請選擇 **Save** (儲存)。

**當您連接網路介面時設定 ENA Express**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中，選擇 **Network Interfaces** (網路介面)。

1. 選取未連接到執行個體的網路介面 (**Status** (狀態) 為 **Available** (可用)。您可以選擇 **Network interface ID** (網路介面 ID) 連結，以開啟詳細資訊頁面；或選取清單左側的核取方塊。

1. 選取您要連接的 **Instance** (執行個體)。

1. 若要在您將網路介面連接至執行個體後使用 **ENA Express**，請選取**啟用**核取方塊。

1. 啟用 ENA Express 時，您可以設定 UDP 設定。若要使用 **ENA Express UDP**，請選取**啟用**核取方塊。

1. 若要將網路介面連接至執行個體並儲存 ENA Express 設定，請選擇 **Attach** (連接)。

------
#### [ 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：將 ENA Express 用於 TCP 流量而非 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：將 ENA Express 用於 TCP 流量和 UDP 流量**  
在此範例中，將 `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：將 ENA Express 用於 TCP 流量而非 UDP 流量**  
此範例會將 `EnaSrdEnabled` 設定為 `true`，並且允許將 `EnaSrdUdpEnabled` 預設為 `false`，如果之前並未設定。

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

**範例 2：將 ENA Express 用於 TCP 流量和 UDP 流量**  
在此範例中，將 `EnaSrdEnabled` 和 `EnaSrdUdpEnabled` 都設定為 `true`。

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

**範例 3：停止將 ENA Express 用於 UDP 流量**  
此範例會將 `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) cmdlet，如以下範例所示。

**範例 1：將 ENA Express 用於 TCP 流量而非 UDP 流量**  
此範例將 `EnaSrdEnabled` 設定為 `true`，並允許 `EnaSrdUdpEnabled` 預設為 `false`。

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

**範例 2：將 ENA Express 用於 TCP 流量和 UDP 流量**  
在此範例中，將 `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) cmdlet，如以下範例所示。

**範例 1：將 ENA Express 用於 TCP 流量而非 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：將 ENA Express 用於 TCP 流量和 UDP 流量**  
在此範例中，將 `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：停止將 ENA Express 用於 UDP 流量**  
此範例會將 `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) 中的「進階網路組態」****。
+ **啟動範本** – 當您使用啟動範本時，可以在啟動時設定 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`。

在下列範例中，不會載入 `ixgbevf` 模組，因為列出的驅動程式為 `vif`。

```
[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 內含 Intel 驅動程式 1.0.15.3，因此我們建議您使用 Pnputil.exe 公用程式將驅動程式升級至最新版本。
+ [AWS CloudShell](https://console.aws.amazon.com/cloudshell) 從 使用 AWS 管理主控台，或在您選擇的[AWS Tools for Windows PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)任何電腦上安裝和設定 [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)或 ，最好是本機桌上型電腦或筆記型電腦。如需詳細資訊，請參閱 [存取 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) cmdlet。如果已設定屬性，則值為 `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 支援的執行個體] 從本機電腦中，使用 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. 在本機電腦上使用下列其中一個命令啟用增強型聯網屬性。

------
#### [ 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) cmdlet，如下所示。

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

------

1. (選擇性) 從執行個體建立 AMI，如 [建立 Amazon EBS 支援的 AMI](creating-an-ami-ebs.md) 所述。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. 連接至執行個體，並使用 `ixgbevf` 中的 **ethtool -i eth*n*** 命令確認 [測試是否已啟用增強型網路](#test-enhanced-networking) 模組已在網路介面上安裝及載入。

**啟用增強型聯網 (執行個體後端執行個體)**  
遵循先前的程序，一直進行到您停止執行個體的那個步驟。如 [建立 Amazon S3 支援的 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)。

Quick Start Ubuntu HVM AMI 包含增強型聯網必要的驅動程式。如果您有 2.16.4 版以前的 `ixgbevf`，則可以安裝 `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)。最新的 Quick Start 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` 模組來源。

   2.16.4 之前版本的 `ixgbevf`，包括 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 網站上的[可預測的網路介面名稱](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 支援的執行個體] 從本機電腦中，使用 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)。

   [執行個體存放區後端執行個體] 您無法停止執行個體來修改屬性。相反地，請跳到下一個程序。

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) cmdlet，如下所示。

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

------

1. (選擇性) 從執行個體建立 AMI，如 [建立 Amazon EBS 支援的 AMI](creating-an-ami-ebs.md) 所述。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. (選擇性) 連線到執行個體，並確認模組已安裝。

**啟用增強型聯網 (執行個體存放區支援的執行個體)**  
遵循先前的程序，一直進行到您停止執行個體的那個步驟。如 [建立 Amazon S3 支援的 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" ...
```

------

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

如果您啟動執行個體，且其尚未啟用增強型聯網，您必須在執行個體上下載並安裝必要的網路轉接器驅動程式，然後設定 `sriovNetSupport` 執行個體屬性，以啟動增強型聯網。您只能在支援的執行個體類型上啟用此屬性。如需詳細資訊，請參閱[增強 Amazon EC2 執行個體的聯網能力](enhanced-networking.md)。

**重要**  
若要在 Windows AMIs 中檢視最新的驅動程式更新，請參閱「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. 從執行個體中，下載適用於您的作業系統的 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`。

   \$1 Intel 驅動程式與軟體頁面並未特別說明伺服器版本 1803 和更早版本，以及 1809 和更新版本。

1. 安裝適用於您的作業系統的 Intel 網路轉接器驅動程式。
   + **Windows Server 2008 R2**

     1. 在 **Downloads** (下載) 資料夾中，找出 `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. 在 **Downloads** (下載) 資料夾中，解壓縮 `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) cmdlet，如下所示。

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

------

1. (選擇性) 從執行個體建立 AMI，如 [建立 Amazon EBS 支援的 AMI](creating-an-ami-ebs.md) 所述。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>

彈性網絡介面 (ENA) 驅動程式會從啟用它們的執行個體發行網路效能指標。您可以使用這些指標來進行執行個體效能的故障診對、為工作負載選擇正確的執行個體大小、主動計劃擴展活動，以及基準化分析應用程式，以判斷它們是否能夠最大化執行個體上的可用效能。

Amazon EC2 在執行個體層級定義網路上限，以確保高品質的聯網體驗，包括跨執行個體大小的一致網路效能。 為每個執行個體 AWS 提供下列項目的上限：
+ **頻寬能力** - 每個 EC2 執行個體都具有最大頻寬，用於彙總傳入和傳出流量 (根據執行個體類型和大小)。一些執行個體使用網路 I/O 額度機制，根據平均頻寬使用率來配置網路頻寬。Amazon EC2 也具有最大頻寬，可用於傳入 Direct Connect 和網際網路的流量。如需詳細資訊，請參閱[Amazon EC2 執行個體網路頻寬](ec2-instance-network-bandwidth.md)。
+ **每秒封包數 (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 版或更高版本。若要確認已安裝的版本，請使用如下所示的 Device Manager (裝置管理員)。

  1. 執行 `devmgmt.msc` 以開啟 Device Manager (裝置管理員)。

  1. 展開 **Network Adapters (網路介面卡)**。

  1. 選擇 **Amazon Elastic Network Adapter (Amazon 彈性網絡介面卡)**、**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 驅動程式會即時將下列指標交付至執行個體。它們提供自上次重設驅動程式後，每個網路介面上排入佇列或丟棄的累積封包數目。


| 指標 | Description | 支援於 | 
| --- | --- | --- | 
| bw\$1in\$1allowance\$1exceeded |  因傳入的彙總頻寬超過執行個體的上限而排入佇列或丟棄的封包數目。  | 所有執行個體類型 | 
| bw\$1out\$1allowance\$1exceeded |  因傳出的彙總頻寬超過執行個體的上限而排入佇列或丟棄的封包數目。  | 所有執行個體類型 | 
| conntrack\$1allowance\$1exceeded |  因為連線追蹤超過執行個體的上限且無法建立新的連線，而丟棄的封包數目。這可能會導致傳送或傳回執行個體流量的封包遺失。  | 所有執行個體類型 | 
| conntrack\$1allowance\$1available | 在達到該執行個體類型的追蹤連線限額之前，執行個體可建立的追蹤連線數目。 | 僅限 [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 (ENA 封包成形)**。

1. 選取要監控的執行個體，然後選取 **Add (新增)**。

1. 選擇 **OK** (確定)。

## ENA Express 的指標
<a name="network-performance-metrics-ena-express"></a>

ENA Express 採用可擴展可靠資料包 AWS (SRD) 技術。SRD 是一種高效能的網路傳輸通訊協定，其使用動態路由來增加輸送量並將網路流量尾延遲降至最低。若您已在傳送執行個體和接收執行個體上啟用網路介面附件的 ENA Express，您可以使用 ENA Express 指標來協助確保您的執行個體充分利用 SRD 技術提供的效能改進。例如：
+ 評估您的資源，以確保其有足夠的容量來建立更多 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 資格指標涵蓋來源和目的地需求，以及兩個端點之間的網路。在計算後，合格封包仍可能會被取消資格。例如，如果合格封包超過最大傳輸單位 (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`)。

**資源使用率**  
資源使用率是根據單一執行個體在指定時間可以保留的並行 SRD 連線數目而定。資源使用率指標 (`ena_srd_resource_utilization`) 會追蹤您目前執行個體的使用率。當使用率接近 100% 時，您預期將會看到效能問題。ENA Express 從 SRD 回復為標準 ENA 傳輸，且捨棄封包的可能性增加。高資源使用率表示是時候擴展執行個體，以改善網路效能。

**注意**  
當執行個體的網路流量超過上限時， 會將超過上限的流量 AWS 排入佇列，然後捨棄網路封包。

**Persistence**  
在啟用執行個體的 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 驅動程式 25.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>

從 2.3.0 版開始，ENA FreeBSD 驅動程式支援收集執行 FreeBSD 時，執行個體的網路效能指標。若要啟用收集 FreeBSD 指標，請輸入下列命令，並將*間隔*設定為介於 1 到 3600 之間的值。這會指定收集 FreeBSD 指標的頻率 (以秒為單位)。

```
sysctl dev.ena.network_interface.eni_metrics.sample_interval=interval
```

例如，下列命令會將驅動程式設定為每 10 秒在網路介面 1 上收集一次 FreeBSD 指標：

```
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 執行個體經過的網路躍點：
+ **集群放置群組** – When 若指定[集群放置群組](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 使用率較高，因為要在緊密迴圈中輪詢新資料。有兩個全域設定可控制等待所有介面封包的微秒數。

     
`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-state)** – C-state 可控制核心未使用時要進入的休眠層級。建議您控制 C-state 來微調系統的延遲與效能。在更深層的 C-state 中，CPU 基本上處於「休眠」狀態，在喚醒並轉換回作用中狀態之前無法回應請求。核心進入休眠狀態需要時間，而且雖然休眠核心讓其他核心更有餘裕加速至更高頻率，但是欲喚醒該休眠核心並開始執行工作也需要時間。

  例如，若負責處理網路封包中斷的核心處於休眠狀態，則處理此類中斷的服務就可能受到延遲。您可以設定系統，使其不會使用更深層的 C-state。不過，雖然此組態可能會減少處理器反應延遲，但同時也減少了 Turbo Boost 的其他核心可用預留空間。

  若要減少處理器反應延遲，您可以限制更深層的 C-state。如需詳細資訊，請參閱「Amazon Linux 2 使用者指南」**中的[限制深層的 C-state 達到高效能與低延遲](https://docs.aws.amazon.com/linux/al2/ug/processor_state_control.html#c-states)。

## 插斷仲裁
<a name="ena-latency-interrupt-moderation"></a>

ENA 網路驅動程式可啟用執行個體與網路之間的通訊。驅動程式會處理網路封包，並將它們傳遞至網路堆疊或 Nitro 卡。網路封包傳入時，Nitro 卡會產生中斷，讓 CPU 通知軟體有事件發生。

插斷  
中斷是裝置或應用程式傳送給處理器的訊號。中斷會通知處理器已發生事件或已滿足需要立即注意的條件。中斷可以處理時間敏感任務，例如從網絡介面接收資料、處理硬體事件或服務來自其他裝置的請求。

插斷仲裁  
中斷調節是一種技術，可以透過彙總或延遲來減少裝置產生的中斷次數。中斷調節的目的是透過減少處理大量中斷所產生的額外負荷來改善系統效能。中斷次數過多會增加 CPU 使用率，對輸送量造成不利影響，而中斷次數太少會增加延遲。

動態中斷調節  
動態中斷調節是一種增強型的中斷調節形式，可根據目前的系統負載和流量模式動態調整中斷速率。其目標是在減少中斷負荷和每秒封包數或頻寬之間取得平衡。  
在某些 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 系統效能調校的考量因素
<a name="ena-nitro-perf"></a>

Nitro System 是由 建置的硬體和軟體元件集合 AWS ，可實現高效能、高可用性和高安全性。Nitro 系統提供的類裸機功能可免除虛擬化開銷，並支援需完整存取主機硬體的工作負載。如需更多詳細資訊，請參閱 [AWS Nitro 系統](https://aws.amazon.com/ec2/nitro/)。

所有目前世代的 EC2 執行個體類型都會對 EC2 Nitro 卡進行網路封包處理。本主題涵蓋 Nitro 卡上的高階封包處理、影響封包處理效能的網路架構和組態的常見層面，以及達到 Nitro 型執行個體峰值效能所需採取的動作。

Nitro 卡會處理所有輸入和輸出 (I/O) 介面，例如虛擬私有雲端 (VPCs) 所需的介面。對於透過網路傳送或接收資訊的所有元件，Nitro 卡可做為 I/O 流量的獨立運算裝置，與客戶工作負載所執行的系統主機板在物理上是分開的。

## Nitro 卡上的網路封包流程
<a name="ena-nitro-perf-network-flow"></a>

在 Nitro 系統上建置的 EC2 執行個體具有硬體加速功能，可更快速地進行封包處理，其輸送量是以每秒封包數 (PPS) 的指標進行測量。當 Nitro 卡執行新流程的初始評估時，該卡會儲存流程中全部封包所具有的相同資訊，例如安全群組、存取控制清單和路由表項目。處理相同流程的其他封包時，可以使用儲存的資訊來減少這些封包的負荷。

您的連線速率是以每秒連線數 (CPS) 的指標進行測量。每個新連線都將產生額外的處理負荷，這些額外處理開銷必須納入工作負載能力預估。設計工作負載時，同時考慮 CPS 和 PPS 指標是至關重要的。

**如何建立連線**  
當 Nitro 型執行個體與另一個端點之間建立連線時，Nitro 卡會評估兩個端點之間傳送或接收的第一個封包的完整流程。相同流程的後續封包通常不需要完整重新評估。不過，此規則也有例外狀況。如需例外狀況的詳細資訊，請參閱 [不使用硬體加速的封包](#ena-nitro-perf-exceptions)。

下列屬性將定義兩個端點和兩端之間的封包流程。這五個屬性合稱為 5 元組流程。
+ 來源 IP
+ 來源連接埠
+ 目標 IP
+ 目標連接埠
+ 通訊協定

封包流程的方向稱為「傳入」**和「傳出」**。以下是端對端網路封包流程的高階概述。
+ 「傳入」**** – 當 Nitro 卡處理傳入網路封包時，會根據具狀態防火牆規則和存取控制清單來評估封包。該卡會追蹤連線、進行計量，並執行其他適用的動作。然後，該卡會將封包轉送到主機 CPU 上的目的地。
+ 「輸出」**** – 當 Nitro 卡處理傳出網路封包時，會查詢遠端介面目的地、評估各種 VPC 函數、套用速率限制，以及執行其他適用的動作。然後，該卡會將封包轉送到網路中的下一個中轉目的地。

## 透過網路設計達到最佳效能
<a name="ena-nitro-perf-overall-design"></a>

若要發揮 Nitro 系統的效能，您必須了解網路處理的需求，以及這些需求如何影響 Nitro 資源的工作負載。然後，您就可以透過設計，讓網路環境達到最佳效能。您的基礎架構設定、應用程式工作負載設計及其組態，都可能會影響封包處理和連線速率。例如，如果您的應用程式有較高的連線建立率，例如 DNS 服務、防火牆或虛擬路由器，其利用連線建立後才能加速硬體的機會就較低。

您透過應用程式和基礎架構設定，來簡化工作負載並改善網路效能。不過，並非所有封包都符合加速資格。Nitro 系統會針對新連線以及不符合加速資格的封包使用完整的網路流程。

本節的其餘部分將著重於應用程式和基礎設施設計考量因素，以協助確保封包盡可能在加速路徑內流動。

### Nitro 系統的網路設計考量因素
<a name="ena-nitro-perf-considerations"></a>

為執行個體設定網路流量時，需要考量的層面非常廣，這些層面都可能對 PPS 效能造成影響。建立流程後，大多數定期傳入或傳出的封包都符合加速資格。不過，此規則也有例外狀況，這些例外的目的是確保基礎架構設計和封包流程持續符合通訊協定標準。

若要獲得 Nitro 卡的最佳效能，您應該仔細考量基礎架構和應用程式的下列組態，及其詳細資訊與優缺點。

#### 基礎架構考量因素
<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 驅動程式，請參閱讀我檔案的[驅動程式編譯](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)。

**端點之間的距離**  
由於應用程式層的 TCP 時段調整，相比於跨區域連線，在同一可用區域中的兩個執行個體之間連線，每秒可以處理更多的封包，這決定了在任意給定時間可傳輸的資料量。執行個體之間若距離較長，則延遲將增加，端點可處理的封包數量也將隨之減少。

**位元組佇列限制 (BQL)**  
BQL 是一項功能，可限制傳遞至 Nitro 卡的位元組數，以減少佇列。在 ENA 驅動程式、Amazon Linux 作業系統及大多數 Linux 發行版本中，BQL 預設為停用狀態。若同時啟用 BQL 與片段代理覆寫，在處理所有片段之前限制傳遞給 Nitro 的位元組數，可能會導致效能限制。

#### 應用程式設計考量因素
<a name="ena-nitro-perf-app-design"></a>

應用程式設計和組態有幾個層面，可能會對您的處理效率造成影響。要考慮的重要因素包含下列項目：

**封包大小**  
若封包大小較大，則執行個體可在網路上傳送和接收的資料輸送量會增加。Amazon EC2 支援 9001 位元組的巨型訊框，但其他服務可能會強制執行不同限制。若封包較小，則可提高封包處理速率，但當封包數量超過 PPS 額度時，可能造成可達到的最大頻寬降低。  
如果封包的大小超過網絡跳轉的最大傳輸單位 (MTU)，路徑上的路由器可能會將其分段。產生的封包片段會被視為例外狀況，並以標準速率正常處理 (非加速)。這可能會導致效能發生變化。但您可透過片段代理模式設定，覆寫傳出分段封包的標準行為。如需詳細資訊，請參閱[最大化 Nitro 系統的網路效能](#ena-nitro-perf-maximize)。建議您在設定 MTU 時評估您的拓撲。

**通訊協定權衡**  
TCP 等可靠的通訊協定比 UDP 等不可靠的通訊協定具有更高的額外負荷。UDP 傳輸通訊協定具有較低額外負荷，以及簡化的網路處理，可能會產生更高的 PPS 速率，但封包交付的可靠性將遭到犧牲。如果封包交付的可靠性對您的應用程式來說並非關鍵，則 UDP 可能是不錯的選擇。

**微爆量**  
當流量短時間內超過限額，而不是平均分佈時，就會發生微爆量。這通常會以微秒為單位進行。  
例如，假設您的執行個體最多可以傳送 10Gbps，而您的應用程式卻在半秒內傳送整整 10Gb。此微爆量在前半秒便已超過額度，導致剩餘的秒內沒有任何剩餘額度。即使您在 1 秒內傳送 10Gb，前半秒的額度可能會導致封包排入佇列或遭到捨棄。  
您可以使用 Linux 流量控制等網路排程器來協助調整輸送量，並避免因微量爆量而造成佇列或捨棄封包。

**流程數量**  
單一流程限制為 5Gbps，除非其位於支援高達 10Gbps 的叢集置放群組內，或者使用支援高達 25Gbps 的 ENA Express。  
同樣地，Nitro 卡可以處理多個流程的更多封包，而非使用單一流程。為了達到每個執行個體的尖峰封包處理速率，我們建議在總頻寬為 100Gbps 或更高的執行個體上至少 100 個流程。隨著彙總頻寬的增加，達到峰值處理速率所需的流程數量也會增加。基準測試將協助您判斷在網路上達到尖峰速率所需的組態。

**彈性網路介面卡 (ENA) 佇列**  
ENA (彈性網路介面卡) 使用多個接收 (Rx) 與傳輸 (Tx) 佇列 (ENA 佇列)，以提升 EC2 執行個體的網路效能與可擴展性。這些佇列會透過在可用佇列間對傳送與接收的資料進行負載平衡，有效管理網路流量。  
如需詳細資訊，請參閱[ENA 佇列](ena-queues.md)。

**特徵處理負荷**  
流量鏡射和 ENA Express 等功能可能導致處理負荷增加，進而降低絕對封包處理效能。您可以限制功能使用，或停用功能，以提高封包處理速率。

**保持狀態的連線追蹤**  
您的安全群組使用連線追蹤來儲存流入和流出執行個體流量的資訊。連線追蹤會將規則套用至每個個別的網路流量流程，以判斷流量被允許還是被拒絕。Nitro 卡會使用流程追蹤來維持流程的狀態。套用的安全群組規則更多，評估流程便需要更多工作。  
並非所有的網路流量流程都會追蹤。如果使用 [未追蹤的連線](security-group-connection-tracking.md#untracked-connections) 設定安全群組規則，則在有多個有效的回覆路徑時，除了自動追蹤連線以確保對稱路由之外，不需要額外的工作。

#### 不使用硬體加速的封包
<a name="ena-nitro-perf-exceptions"></a>

並非所有封包都可以利用硬體加速。處理這些例外狀況時，通常需要一些處理負荷，以確保網路流程的運作狀態。網路流程必須可靠地符合通訊協定標準、符合 VPC 設計中的變更，以及僅將封包路由至允許的目的地。不過，額外負荷將導致您的效能降低。

「封包片段」****  
如「應用程式設計考量因素」****所述，超過網路 MTU 的封包所產生的封包片段，將被視為例外正常處理，無法利用硬體加速。但根據您的驅動程式版本，您可透過片段代理模式繞過輸出片段限制。如需詳細資訊，請參閱下方 [最大化 Nitro 系統的網路效能](#ena-nitro-perf-maximize) 區段中可採取的動作。

「閒置連線」****  
當連線有一段時間沒有活動時，即使連線尚未達到逾時限制，系統也可以取消其優先順序。然後，如果資料在取消優先順序之後傳入，系統需要將其視為例外處理才能重新連線。  
若要管理您的連線，您可以使用連線追蹤逾時來關閉閒置連線。您也可以使用 TCP 保持連線，讓閒置連線保持開啟。如需詳細資訊，請參閱[閒置連線追蹤逾時](security-group-connection-tracking.md#connection-tracking-timeouts)。

**VPC 變動**  
安全群組、路由表和存取控制清單的更新，皆需要在處理路徑中重新評估，以確保路由項目和安全群組規則的套用仍符合預期。

**ICMP 流程**  
網路控制訊息通訊協定 (ICMP) 是一個網路層通訊協定，可供網路裝置診斷網路通訊問題。這些封包一律使用完整流程。

**非對稱 L2 流程**  
在 NitroV3 及更早版本的平台上，若同一子網路中的兩個 ENI 中，一個使用預設閘道路由器而另一個未使用，則這兩個 ENI 之間的流量不會使用硬體加速。NitroV4 及更新版本的平台在此場景下會運用硬體加速。若要在 NitroV3 或更早版本的平台上獲得更佳效能，請確保兩個 ENI 使用的預設閘道路由器一致，或將這些 ENI 置於不同子網路中。

## 最大化 Nitro 系統的網路效能
<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 驅動程式最佳實務和效能最佳化指南](https://github.com/amzn/amzn-drivers/blob/master/kernel/linux/ena/ENA_Linux_Best_Practices.rst)。

1. 以峰值活動流量計數作為工作負載的基準，以確定應用程式效能的基準。透過效能基準，您可以在設定或應用程式設計中測試變化，以了解哪些考量因素將產生最大影響，特別是如果您計劃向上擴展或橫向擴充。

### 調校 PPS 效能
<a name="tuning"></a>

下列清單包含您可以根據系統需求調整 PPS 效能的動作。
+ 減少兩個執行個體之間的實體距離。若傳送和接收執行個體位於相同的可用區域，或使用叢集置放群組時，您可以減少封包從一個端點移動到另一個端點所需的跳轉次數。
+ 請使用 [未追蹤的連線](security-group-connection-tracking.md#untracked-connections)。
+ 針對網路流量使用 UDP 通訊協定。
+ 對於彙總頻寬為 100Gbps 或更高的 EC2 執行個體，請將工作負載分散到 100 個以上的個別流程，以將工作平均分散到 Nitro 卡。
+ 若要突破 EC2 執行個體的輸出片段 PPS 限制，可啟用片段代理模式 (取決於您的驅動程式版本)。此設定允許在處理路徑中評估分段封包，進而突破 1024 的輸出 PPS 限制。載入驅動程式時，執行下列其中一項命令來啟用或停用片段代理模式：

  **啟用片段代理模式**

  ```
  sudo insmod ena.ko enable_frag_bypass=1
  ```

  **停用片段代理模式**

  ```
  sudo insmod ena.ko enable_frag_bypass=0
  ```

### 設定 ENA 佇列配置
<a name="max-perf-ena-queues"></a>

在支援的執行個體類型上，您可在彈性網路介面 (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 煙囪卸載；此功能在 Windows Server 2016 中已被移除。

除了這些作業系統最佳化以外，您也應該考慮網路流量的最大傳輸單位 (MTU)，並根據您的工作負載和網路架構來調整。如需詳細資訊，請參閱[EC2 執行個體的網路最大傳輸單位 (MTU)](network_mtu.md)。

AWS 在 50us 叢集置放群組中啟動的執行個體與 99.9 百分位數的尾端延遲之間，定期測量平均往返延遲。如果您的應用程式需要始終很低的延遲，我們建議在 Nitro 系統中建構的固定效能執行個體上使用最新版本的 ENA 驅動程式。

## 設定接收端擴展 CPU 親和性
<a name="windows-rss-cpu-affinity"></a>

接收端調整 (RSS) 可用來將網路流量 CPU 負載分配至多個處理器。根據預設，Amazon 官方 Windows AMI 會設為啟用 RSS。ENA 彈性網路介面最多可提供八個 RSS 佇列。藉由為 RSS 佇列以及其他系統處理程序定義 CPU 親和性，您可以將 CPU 負載分配至多核心系統，以便處理更多網路流量。在 16 vCPU 以上的執行個體類型，我們建議使用 `Set-NetAdapterRSS` PowerShell cmdlet，藉以為所有彈性網路介面排除 RSS 組態的開機處理器 (超執行緒啟用時為邏輯處理器 0 和 1)，以免與各種系統元件競爭。

Windows 會察覺超執行緒，並確保單一網路介面卡 (NIC) 的 RSS 佇列總是置於不同的實體核心。因此，除非停用超執行緒，否則為了完全避免與 NIC 競爭，會將各 NIC 的 RSS 組態分配在 16 個邏輯處理器之間。`Set-NetAdapterRss` cmdlet 可讓您定義 BaseProcessorGroup、BaseProcessorNumber、MaxProcessingGroup、MaxProcessorNumber 和 NumaNode (選用) 的值，以定義有效邏輯處理器的各 NIC 範圍。如果無足夠的實體核心可以完全消除彈性網路介面間的競爭，視見面預期的工作負載而定，請盡量減少重疊範圍，或減少 ENI 範圍中的邏輯處理器數量 (換言之，少量管理網路介面可能不需要許多已指派的 RSS 佇列)。此外，如先前所述，各種元件必須在 CPU 0 上執行，因此當可使用足夠的 vCPU 時，我們建議從所有 RSS 組態中加以排除。

例如，當有 2 個 NUMA 節點並啟用超執行緒的 72 vCPU 執行個體出現三個彈性網路介面時，下列命令會將網路負載分配在兩顆 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 數的執行個體，您應針對每個已啟用彈性網路介面的執行個體重新評估 RSS 組態。此 cmdlet 的完整 Microsoft 文件可參閱：[Set-NetAdapterRss](https://learn.microsoft.com/en-us/powershell/module/netadapter/set-netadapterrss)。

SQL 工作負載的特別注意事項：我們還建議您檢查輸入/輸出執行緒親和性設定和彈性網路介面 RSS 組態，以盡量減少相同 CPU 的輸入/輸出和網路爭用。請參閱[伺服器組態：親和性遮罩](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/affinity-mask-server-configuration-option)。