

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

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