

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

# 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)。