對於性能調整的硝基系統考量 - Amazon Elastic Compute Cloud

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

對於性能調整的硝基系統考量

Nitro 系統結合一系列由 AWS 建立的硬體和軟體元件,能保障高效能、高可用性和高安全性。Nitro System 提供類似裸機的功能,可消除虛擬化額外負荷,並支援需要完全存取主機硬體的工作負載。有關更多詳細信息,請參閱AWS 硝基系統

目前所有的執行EC2個體類型都會在 EC2 Nitro 卡上執行網路封包處理。本主題涵蓋 Nitro 卡上的高階封包處理、影響封包處理效能的網路架構和組態的常見方面,以及您可以採取哪些動作來達到 Nitro 型執行個體的峰值效能。

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

硝基卡上的網絡數據包流

EC2建立在 Nitro 系統上的執行個體具有硬體加速功能,可實現更快的封包處理速度,這些功能是以每秒封包數 (PPS) 傳輸率來衡量的。當 Nitro 卡對新流程執行初始評估時,它會儲存流程中所有封包的相同資訊,例如安全群組、存取控制清單和路由表項目。當它處理相同流程的其他封包時,可以使用儲存的資訊來減少這些封包的額外負荷。

您的連線速率是以每秒連線數 (CPS) 量度來測量。每個新連線都需要額外的處理額外負荷,這些負荷必須納入工作負載能力的估計。在設計工作負載時,請務必同時考慮CPS和PPS指標。

如何建立連線

在 Nitro 型執行個體與另一個端點之間建立連線時,Nitro 卡會評估兩個端點之間傳送或接收的第一個封包的完整流程。對於相同流程的後續封包,通常不需要完全重新評估。但是,也有例外。如需例外狀況的詳細資訊,請參閱不使用硬體加速的封包

下列內容定義兩個端點及它們之間的封包流量。這五個屬性一起被稱為 5 元組流程。

  • 來源 IP

  • 來源連接埠

  • 目標 IP

  • 目標連接埠

  • 通訊協定

封包流程的方向稱為入 (入埠) 和出 (出埠)。下列高階說明摘要說明端對端網路封包流量。

  • Ingress — 當 Nitro 卡處理輸入網路封包時,會根據狀態防火牆規則和存取控制清單來評估封包。它會追蹤連線、測量連線,並視情況執行其他動作。然後它會將封包轉送到主機CPU上的目的地。

  • 出 — 當 Nitro 卡處理輸出網路封包時,它會查詢遠端介面目的地、評估各種VPC功能、套用速率限制,以及執行其他適用的動作。然後它會將封包轉送到網路上的下一個躍點目的地。

設計您的網路以獲得最佳效能

要利用 Nitro 系統的性能功能,您必須了解網絡處理需求以及這些需求如何影響 Nitro 資源的工作負載。然後,您可以針對網路環境設計最佳效能。您的基礎結構設定以及應用程式工作負載的設計和組態可能會影響封包處理和連線速率。例如,如果您的應用程式建立連線速率很高,例如DNS服務、防火牆或虛擬路由器,則只有在建立連線之後才會發生的硬體加速,就會有較少的機會。

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

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

硝基系統的網路設計考量

當您為執行個體設定網路流量時,有許多方面需要考量,可能會影響PPS效能。建立流程之後,大多數定期進出的封包都有資格加速。但是,存在例外情況,以確保基礎架構設計和封包流程持續符合通訊協定標準。

為了從 Nitro 卡獲得最佳性能,您應該仔細考慮基礎架構和應用程序的以下配置詳細信息的優缺點。

基礎架構考

您的基礎架構組態可能會影響您的封包流量和處理效率。下列清單包含一些重要的考量。

具有不對稱性的網絡接口配置

安全性群組會使用連線追蹤來追蹤進出執行個體的流量相關資訊。非對稱路由是流量透過一個網路介面進入執行個體,並透過不同的網路介面離開,可降低執行個體在追蹤流程時所能達到的尖峰效能。如需有關安全性群組連線追蹤、未追蹤連線以及自動追蹤連線的詳細資訊,請參閱Amazon EC2 安全組連接跟踪

網絡驅動

網絡驅動程序會定期更新和發布。如果您的驅動程序過時,可能會嚴重損害性能。讓驅動程式保持在最新狀態,以確保您擁有最新的修補程式,並可利用效能改進的優勢,例如僅適用於最新一代驅動程式的加速路徑功能。較早的驅動程序不支持加速路徑功能。

若要利用加速路徑功能,建議您在執行個體上安裝最新的ENA驅動程式。

Linux 執行個體 — ENA Linux 驅動程式 2.2.9 或更新版本。若要從 Amazon 驅動程式 GitHub 儲存庫安裝或更新 ENA Linux 驅動程式,請參閱讀我檔案的驅動程式編譯一節。

視窗執行個體 — ENA 視窗驅動程式 2.0.0 或更新版本。若要安裝或更新 ENA Windows 驅動程式,請參閱在 EC2 Windows 執行個體上安裝ENA驅動程式

端點之間的距離

由於在應用程式層進行TCP視窗化,相同可用區域中的兩個執行個體之間的連線每秒處理的封包數量會比跨區域的連線多,這會決定在任何指定時間可以處理傳輸中的資料量。執行個體之間的長距離會增加延遲,並減少端點可處理的封包數目。

應用程式的設計

應用程式設計和組態的某些方面可能會影響您的處理效率。下列清單包含一些重要的考量。

封包大小

較大的封包大小可增加執行個體在網路上傳送和接收的資料輸送量。較小的封包大小可以增加封包處理速率,但是當封包數量超過PPS容量時,這樣可以減少達到的最大頻寬。

如果封包的大小超過網路躍點的最大傳輸單位 (MTU),路徑上的路由器可能會將其分段。產生的封包片段會被視為例外狀況,並以標準速率處理 (非加速)。這可能會導致您的表現變化。Amazon EC2 支持 9001 字節的巨型框架,但並非所有服務都支持它。我們建議您在設定時評估拓撲MTU。

協議權衡

可靠的協議,例TCP如比不可靠的協議具有更多的UDP開銷。較低的額外負荷和簡化的UDP傳輸通訊協定的網路處理可能會導致較高的PPS速率,但會犧牲可靠的封包傳遞。如果可靠的數據包傳遞對您的應用程序並不重要,那麼可UDP能是一個不錯的選擇。

微爆破

當流量在短時間內超過限額而非均勻分佈時,就會發生微爆炸。這通常發生在微秒的範圍內。

例如,假設您有一個最多可傳送 10 Gbps 的執行個體,而您的應用程式會在半秒內傳送完整的 10 Gb。這種微爆在上半年第二次超過了津貼,並且在第二個的剩餘部分沒有留下任何東西。即使您在 1 秒的時間範圍內傳送 10Gb,前半秒的限額也可能導致封包排入佇列或捨棄。

您可以使用網路排程器 (例如 Linux 流量控制) 來協助調整輸送量,並避免因為微量爆發造成佇列或丟棄封包。

流量數

單一流程的限制為 5 Gbps,除非它位於支援高達 10 Gbps 的叢集置放群組內,或使用支援高達 25 Gbps 的 ENA Express。

同樣地,與使用單一流程相比,Nitro 卡可以跨多個流程處理更多封包。為了達到每個執行個體的尖峰封包處理速率,我們建議在 100 Gbps 或更高彙總頻寬的執行個體上至少 100 個流量。隨著彙總頻寬功能的增加,達到尖峰處理速率所需的流量數也會增加。基準測試可協助您判斷網路上達到最高速率所需的組態。

彈性網路介面卡 (ENA) 佇列數

根據預設,ENA佇列數目上限會根據您的執行個體大小和類型分配給網路介面。減少佇列計數可降低可達到的最大PPS速率。我們建議使用預設佇列配置以獲得最佳效能。

對於 Linux,網絡接口默認配置為最大值。對於以「資料平面開發套件」(DPDK) 為基礎的應用程式,建議您設定可用的佇列數目上限。

功能過程開銷

流量鏡像和 ENA Express 等功能可以增加更多的處理額外負荷,從而降低絕對封包處理效能。您可以限制功能使用或停用功能,以提高封包處理速率。

連線追蹤以維持狀態

您的安全性群組會使用連線追蹤來儲存進出執行個體的流量相關資訊。連線追蹤會針對每個個別網路流量套用規則,以判斷流量是否允許或拒絕。Nitro 卡使用流量追蹤來維持流量的狀態。隨著套用的安全性群組規則越多,評估流程需要更多工作。

注意

並非所有網路流量都會追蹤。如果使用設定安全性群組規則未追蹤的連線,則除了自動追蹤的連線以確保在有多個有效回覆路徑時對稱路由,則不需要其他工作。

不使用硬體加速的封包

並非所有封包都能利用硬體加速。處理這些例外狀況涉及一些處理額外負荷,這是確保網路流程健全狀況所必需的。網路流程必須可靠地符合通訊協定標準、符合VPC設計中的變更,並且只將封包路由到允許的目的地。但是,開銷會降低您的性能。

封包片段

應用程式考量所述,超過網路封包所產生的封包片段MTU會當做例外狀況處理,而且無法利用硬體加速的優勢。

閒置連線

當連線有一段時間沒有活動時,即使連線尚未達到其逾時限制,系統也可以取消其優先順序。然後,如果在取消連接優先級之後傳入數據,則系統需要將其作為異常處理才能重新連接。

若要管理連線,您可以使用連線追蹤逾時來關閉閒置連線。您也可以使用 TCP Keepalives 來保持閒置連線的開啟狀態。如需詳細資訊,請參閱閒置連線追蹤逾時

VPC突變

安全性群組、路由表和存取控制清單的更新都需要在處理路徑中重新評估,以確保路由項目和安全性群組規則仍如預期般套用。

ICMP流

網際網路控制訊息通訊協定 (ICMP) 是網路裝置用來診斷網路通訊問題的網路層通訊協定。這些封包一律會使用完整流程。

最大限度地提高 Nitro 系統的網絡性能

在您對執行個體做出任何設計決策或調整任何網路設定之前,我們建議您採取下列步驟,以協助確保您獲得最佳結果:

  1. 透過檢閱,瞭解您可以採取的行動的優缺點硝基系統的網路設計考量

    如需有關 Linux 執行個體組態的更多考量和最佳做法,請參閱上的《ENALinux 驅動程式最佳做法和效能最佳化指南》 GitHub。

  2. 使用尖峰作用中流量計數對工作負載進行基準測試,以決定應用程式效能的基準 使用效能基準,您可以測試設定或應用程式設計中的變化,以瞭解哪些考量會產生最大的影響,尤其是在您打算擴充或向外擴充時。

下列清單包含您可以根據系統需求調整PPS效能的動作。

  • 減少兩個例證之間的物理距離。當傳送和接收執行個體位於相同的可用區域或使用叢集置放群組時,您可以減少封包從一個端點移動到另一個端點所需採取的躍點數目。

  • 請使用 未追蹤的連線

  • 使用通UDP訊協定進行網路流量。

  • 對於彙總頻寬為 100 Gbps 或更高的EC2執行個體,請將工作負載分配超過 100 個或更多個別流程,以將工作平均分散到 Nitro 卡上。

監控 Linux 執行個體的效能

您可以在 Linux 執行個體上使用 Ethtool 指標來監控執行個體網路效能指標,例如頻寬、封包速率和連線追蹤。如需詳細資訊,請參閱監控EC2執行個體ENA設定的網路效能