本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 ENA Express 提高 EC2 執行個體之間的網路效能
ENA Express 採用可擴展可靠資料包 AWS (SRD) 技術。SRD 是一種高效能的網路傳輸通訊協定,其使用動態路由來增加輸送量並將網路流量尾延遲降至最低。使用 ENA Express,您可以在相同可用區域中的兩個 EC2 執行個體之間或相同區域內的跨可用區域進行通訊。
ENA Express 的優勢
-
將單一流程可使用的最大頻寬從相同區域內的 5 Gbps 增加到 25 Gbps,直到彙總執行個體限制為止。
-
減少相同可用區域中 EC2 執行個體之間的網路流量尾端延遲,尤其是在高網路負載期間。
-
偵測並避免擁塞的網路路徑。
-
直接在網路層中處理某些任務,例如接收端的封包重新排序,以及大多數需要的重新傳輸。這會釋放應用程式層進行其他工作。
-
如果您的應用程式具有高packets-per-second數需求,且需要在不擁塞期間最佳化延遲,則 增強型網路 可能更適合。
-
ENA Express 流量無法在本機區域中傳送。
-
南美洲 (聖保羅)、中東 (巴林) 和中東 (阿拉伯聯合大公國) 不提供可用區域之間流量的 ENA Express 支援。
在執行個體上為網路介面附件啟用 ENA Express 之後,傳送執行個體會啟動與接收執行個體的通訊,而 SRD 會偵測 ENA Express 是否同時在傳送執行個體和接收執行個體上運作。如果 ENA Express 正在運作,則通訊可以使用 SRD 傳輸。如果 ENA Express 尚未運作,則通訊會回復為標準 ENA 傳輸。
在網路流量較輕的期間,當封包使用 ENA Express 時,您可能會注意到封包延遲中位數 (數十微秒) 稍微增加。在這段時間內,優先考慮特定網路效能特性的應用程式可以從 ENA Express 中受益,如下所示:
-
程序可以從同一區域內從 5 Gbps 增加到 25 Gbps 的最大單一流量頻寬,直到彙總執行個體限制。例如,如果特定執行個體類型最高支援 12.5 Gbps,則單一流量頻寬也會限制為 12.5 Gbps。
-
在相同可用區域中執行時間較長的程序,會在網路擁塞期間降低尾部延遲。
-
程序可以從更順暢且更標準的網路回應時間分佈中獲益。
ENA Express 的工作原理
ENA Express 採用可擴展可靠資料包 AWS (SRD) 技術。它會將每個網路流程的封包分配到不同的 AWS 網路路徑,並在偵測到擁塞跡象時動態調整分佈。它還管理接收端的封包重新排序。
若要確保 ENA Express 可以按預期管理網路流量,傳送和接收執行個體及其之間的通訊必須符合下列所有要求:
-
支援傳送和接收執行個體類型。如需詳細資訊,請參閱 ENA Express 支援的執行個體類型 資料表。
-
傳送和接收執行個體都必須設定 ENA Express。如果組態有任何差異,您可能會遇到流量預設為標準 ENA 傳輸的情況。下列情境說明會發生的情況。
情況:組態的差異
| 執行個體 |
ENA Express 已啟用 |
UDP 使用 ENA Express |
| 執行個體 1 |
是 |
是 |
| 執行個體 2 |
是 |
否 |
在這種情況下,兩個執行個體之間的 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 驅動程式最佳實務與效能最佳化指南。
Amazon EC2 是指執行個體與以附件形式連接到執行個體的網路介面之間的關係。ENA Express 設定會套用至附件。如果網路介面從執行個體中斷連接,則附件將不再存在,而套用至該執行個體的 ENA Express 設定將不再有效。執行個體終止時也是如此,即使網路介面仍然存在。
在傳送執行個體和接收執行個體上啟用網路介面附件的 ENA Express 之後,您可以使用 ENA Express 指標來協助確保您的執行個體充分利用 SRD 技術提供的效能改進。如需 ENA Express 指標的詳細資訊,請參閱 ENA Express 的指標。
ENA Express 支援的執行個體類型
下列執行個體類型支援 ENA Express。
- General purpose
-
| 執行個體類型 |
Architecture |
m6a.12xlarge |
x86_64 |
m6a.16xlarge |
x86_64 |
m6a.24xlarge |
x86_64 |
m6a.32xlarge |
x86_64 |
m6a.48xlarge |
x86_64 |
m6a.metal |
x86_64 |
m6i.8xlarge |
x86_64 |
m6i.12xlarge |
x86_64 |
m6i.16xlarge |
x86_64 |
m6i.24xlarge |
x86_64 |
m6i.32xlarge |
x86_64 |
m6i.metal |
x86_64 |
m6id.8xlarge |
x86_64 |
m6id.12xlarge |
x86_64 |
m6id.16xlarge |
x86_64 |
m6id.24xlarge |
x86_64 |
m6id.32xlarge |
x86_64 |
m6id.metal |
x86_64 |
m6idn.8xlarge |
x86_64 |
m6idn.12xlarge |
x86_64 |
m6idn.16xlarge |
x86_64 |
m6idn.24xlarge |
x86_64 |
m6idn.32xlarge |
x86_64 |
m6idn.metal |
x86_64 |
m6in.8xlarge |
x86_64 |
m6in.12xlarge |
x86_64 |
m6in.16xlarge |
x86_64 |
m6in.24xlarge |
x86_64 |
m6in.32xlarge |
x86_64 |
m6in.metal |
x86_64 |
m7a.12xlarge |
x86_64 |
m7a.16xlarge |
x86_64 |
m7a.24xlarge |
x86_64 |
m7a.32xlarge |
x86_64 |
m7a.48xlarge |
x86_64 |
m7a.metal-48xl |
x86_64 |
m7g.12xlarge |
arm64 |
m7g.16xlarge |
arm64 |
m7g.metal |
arm64 |
m7gd.12xlarge |
arm64 |
m7gd.16xlarge |
arm64 |
m7gd.metal |
arm64 |
m7i.12xlarge |
x86_64 |
m7i.16xlarge |
x86_64 |
m7i.24xlarge |
x86_64 |
m7i.48xlarge |
x86_64 |
m7i.metal-24xl |
x86_64 |
m7i.metal-48xl |
x86_64 |
m8a.16xlarge |
x86_64 |
m8a.24xlarge |
x86_64 |
m8a.48xlarge |
x86_64 |
m8a.metal-24xl |
x86_64 |
m8a.metal-48xl |
x86_64 |
m8azn.12xlarge |
x86_64 |
m8azn.24xlarge |
x86_64 |
m8azn.metal-12xl |
x86_64 |
m8azn.metal-24xl |
x86_64 |
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_64 |
m8i.32xlarge |
x86_64 |
m8i.48xlarge |
x86_64 |
m8i.96xlarge |
x86_64 |
m8i.metal-48xl |
x86_64 |
m8i.metal-96xl |
x86_64 |
m8id.24xlarge |
x86_64 |
m8id.32xlarge |
x86_64 |
m8id.48xlarge |
x86_64 |
m8id.96xlarge |
x86_64 |
m8id.metal-48xl |
x86_64 |
m8id.metal-96xl |
x86_64 |
m8in.12xlarge |
x86_64 |
m8in.16xlarge |
x86_64 |
m8in.24xlarge |
x86_64 |
m8in.32xlarge |
x86_64 |
m8in.48xlarge |
x86_64 |
m8in.96xlarge |
x86_64 |
m8idn.12xlarge |
x86_64 |
m8idn.16xlarge |
x86_64 |
m8idn.24xlarge |
x86_64 |
m8idn.32xlarge |
x86_64 |
m8idn.48xlarge |
x86_64 |
m8idn.96xlarge |
x86_64 |
m8ib.12xlarge |
x86_64 |
m8ib.16xlarge |
x86_64 |
m8ib.24xlarge |
x86_64 |
m8ib.32xlarge |
x86_64 |
m8ib.48xlarge |
x86_64 |
m8ib.96xlarge |
x86_64 |
m8idb.12xlarge |
x86_64 |
m8idb.16xlarge |
x86_64 |
m8idb.24xlarge |
x86_64 |
m8idb.32xlarge |
x86_64 |
m8idb.48xlarge |
x86_64 |
m8idb.96xlarge |
x86_64 |
- Compute optimized
-
| 執行個體類型 |
Architecture |
c6a.12xlarge |
x86_64 |
c6a.16xlarge |
x86_64 |
c6a.24xlarge |
x86_64 |
c6a.32xlarge |
x86_64 |
c6a.48xlarge |
x86_64 |
c6a.metal |
x86_64 |
c6gn.4xlarge |
arm64 |
c6gn.8xlarge |
arm64 |
c6gn.12xlarge |
arm64 |
c6gn.16xlarge |
arm64 |
c6i.8xlarge |
x86_64 |
c6i.12xlarge |
x86_64 |
c6i.16xlarge |
x86_64 |
c6i.24xlarge |
x86_64 |
c6i.32xlarge |
x86_64 |
c6i.metal |
x86_64 |
c6id.8xlarge |
x86_64 |
c6id.12xlarge |
x86_64 |
c6id.16xlarge |
x86_64 |
c6id.24xlarge |
x86_64 |
c6id.32xlarge |
x86_64 |
c6id.metal |
x86_64 |
c6in.8xlarge |
x86_64 |
c6in.12xlarge |
x86_64 |
c6in.16xlarge |
x86_64 |
c6in.24xlarge |
x86_64 |
c6in.32xlarge |
x86_64 |
c6in.metal |
x86_64 |
c7a.12xlarge |
x86_64 |
c7a.16xlarge |
x86_64 |
c7a.24xlarge |
x86_64 |
c7a.32xlarge |
x86_64 |
c7a.48xlarge |
x86_64 |
c7a.metal-48xl |
x86_64 |
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_64 |
c7i.16xlarge |
x86_64 |
c7i.24xlarge |
x86_64 |
c7i.48xlarge |
x86_64 |
c7i.metal-24xl |
x86_64 |
c7i.metal-48xl |
x86_64 |
c8a.16xlarge |
x86_64 |
c8a.24xlarge |
x86_64 |
c8a.48xlarge |
x86_64 |
c8a.metal-24xl |
x86_64 |
c8a.metal-48xl |
x86_64 |
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_64 |
c8i.32xlarge |
x86_64 |
c8i.48xlarge |
x86_64 |
c8i.96xlarge |
x86_64 |
c8i.metal-48xl |
x86_64 |
c8i.metal-96xl |
x86_64 |
c8id.24xlarge |
x86_64 |
c8id.32xlarge |
x86_64 |
c8id.48xlarge |
x86_64 |
c8id.96xlarge |
x86_64 |
c8id.metal-48xl |
x86_64 |
c8id.metal-96xl |
x86_64 |
c8in.12xlarge |
x86_64 |
c8in.16xlarge |
x86_64 |
c8in.24xlarge |
x86_64 |
c8in.32xlarge |
x86_64 |
c8in.48xlarge |
x86_64 |
c8in.96xlarge |
x86_64 |
c8in.metal-48xl |
x86_64 |
c8in.metal-96xl |
x86_64 |
c8ib.12xlarge |
x86_64 |
c8ib.16xlarge |
x86_64 |
c8ib.24xlarge |
x86_64 |
c8ib.32xlarge |
x86_64 |
c8ib.48xlarge |
x86_64 |
c8ib.96xlarge |
x86_64 |
c8ib.metal-48xl |
x86_64 |
c8ib.metal-96xl |
x86_64 |
- Memory optimized
-
| 執行個體類型 |
Architecture |
r6a.12xlarge |
x86_64 |
r6a.16xlarge |
x86_64 |
r6a.24xlarge |
x86_64 |
r6a.32xlarge |
x86_64 |
r6a.48xlarge |
x86_64 |
r6a.metal |
x86_64 |
r6i.8xlarge |
x86_64 |
r6i.12xlarge |
x86_64 |
r6i.16xlarge |
x86_64 |
r6i.24xlarge |
x86_64 |
r6i.32xlarge |
x86_64 |
r6i.metal |
x86_64 |
r6id.8xlarge |
x86_64 |
r6id.12xlarge |
x86_64 |
r6id.16xlarge |
x86_64 |
r6id.24xlarge |
x86_64 |
r6id.32xlarge |
x86_64 |
r6id.metal |
x86_64 |
r6idn.8xlarge |
x86_64 |
r6idn.12xlarge |
x86_64 |
r6idn.16xlarge |
x86_64 |
r6idn.24xlarge |
x86_64 |
r6idn.32xlarge |
x86_64 |
r6idn.metal |
x86_64 |
r6in.8xlarge |
x86_64 |
r6in.12xlarge |
x86_64 |
r6in.16xlarge |
x86_64 |
r6in.24xlarge |
x86_64 |
r6in.32xlarge |
x86_64 |
r6in.metal |
x86_64 |
r7a.12xlarge |
x86_64 |
r7a.16xlarge |
x86_64 |
r7a.24xlarge |
x86_64 |
r7a.32xlarge |
x86_64 |
r7a.48xlarge |
x86_64 |
r7a.metal-48xl |
x86_64 |
r7g.12xlarge |
arm64 |
r7g.16xlarge |
arm64 |
r7g.metal |
arm64 |
r7gd.12xlarge |
arm64 |
r7gd.16xlarge |
arm64 |
r7gd.metal |
arm64 |
r7i.12xlarge |
x86_64 |
r7i.16xlarge |
x86_64 |
r7i.24xlarge |
x86_64 |
r7i.48xlarge |
x86_64 |
r7i.metal-24xl |
x86_64 |
r7i.metal-48xl |
x86_64 |
r7iz.8xlarge |
x86_64 |
r7iz.12xlarge |
x86_64 |
r7iz.16xlarge |
x86_64 |
r7iz.32xlarge |
x86_64 |
r7iz.metal-16xl |
x86_64 |
r7iz.metal-32xl |
x86_64 |
r8a.16xlarge |
x86_64 |
r8a.24xlarge |
x86_64 |
r8a.48xlarge |
x86_64 |
r8a.metal-24xl |
x86_64 |
r8a.metal-48xl |
x86_64 |
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_64 |
r8i.32xlarge |
x86_64 |
r8i.48xlarge |
x86_64 |
r8i.96xlarge |
x86_64 |
r8i.metal-48xl |
x86_64 |
r8i.metal-96xl |
x86_64 |
r8id.24xlarge |
x86_64 |
r8id.32xlarge |
x86_64 |
r8id.48xlarge |
x86_64 |
r8id.96xlarge |
x86_64 |
r8id.metal-48xl |
x86_64 |
r8id.metal-96xl |
x86_64 |
r8in.12xlarge |
x86_64 |
r8in.16xlarge |
x86_64 |
r8in.24xlarge |
x86_64 |
r8in.32xlarge |
x86_64 |
r8in.48xlarge |
x86_64 |
r8in.96xlarge |
x86_64 |
r8idn.12xlarge |
x86_64 |
r8idn.16xlarge |
x86_64 |
r8idn.24xlarge |
x86_64 |
r8idn.32xlarge |
x86_64 |
r8idn.48xlarge |
x86_64 |
r8idn.96xlarge |
x86_64 |
r8ib.12xlarge |
x86_64 |
r8ib.16xlarge |
x86_64 |
r8ib.24xlarge |
x86_64 |
r8ib.32xlarge |
x86_64 |
r8ib.48xlarge |
x86_64 |
r8ib.96xlarge |
x86_64 |
r8idb.12xlarge |
x86_64 |
r8idb.16xlarge |
x86_64 |
r8idb.24xlarge |
x86_64 |
r8idb.32xlarge |
x86_64 |
r8idb.48xlarge |
x86_64 |
r8idb.96xlarge |
x86_64 |
u7i-6tb.112xlarge |
x86_64 |
u7i-8tb.112xlarge |
x86_64 |
u7i-12tb.224xlarge |
x86_64 |
u7in-16tb.224xlarge |
x86_64 |
u7in-24tb.224xlarge |
x86_64 |
u7in-32tb.224xlarge |
x86_64 |
u7inh-32tb.480xlarge |
x86_64 |
x2idn.16xlarge |
x86_64 |
x2idn.24xlarge |
x86_64 |
x2idn.32xlarge |
x86_64 |
x2idn.metal |
x86_64 |
x2iedn.8xlarge |
x86_64 |
x2iedn.16xlarge |
x86_64 |
x2iedn.24xlarge |
x86_64 |
x2iedn.32xlarge |
x86_64 |
x2iedn.metal |
x86_64 |
x8g.12xlarge |
arm64 |
x8g.16xlarge |
arm64 |
x8g.24xlarge |
arm64 |
x8g.48xlarge |
arm64 |
x8g.metal-24xl |
arm64 |
x8g.metal-48xl |
arm64 |
x8aedz.24xlarge |
x86_64 |
x8aedz.metal-24xl |
x86_64 |
x8i.24xlarge |
x86_64 |
x8i.32xlarge |
x86_64 |
x8i.48xlarge |
x86_64 |
x8i.64xlarge |
x86_64 |
x8i.96xlarge |
x86_64 |
x8i.metal-48xl |
x86_64 |
x8i.metal-96xl |
x86_64 |
- Accelerated computing
-
| 執行個體類型 |
Architecture |
g6.48xlarge |
x86_64 |
g6e.12xlarge |
x86_64 |
g6e.24xlarge |
x86_64 |
g6e.48xlarge |
x86_64 |
g7e.12xlarge |
x86_64 |
g7e.24xlarge |
x86_64 |
g7e.48xlarge |
x86_64 |
p5.4xlarge |
x86_64 |
p5.48xlarge |
x86_64 |
p5e.48xlarge |
x86_64 |
p5en.48xlarge |
x86_64 |
p6-b200.48xlarge |
x86_64 |
p6-b300.48xlarge |
x86_64 |
- Storage optimized
-
| 執行個體類型 |
Architecture |
i4g.4xlarge |
arm64 |
i4g.8xlarge |
arm64 |
i4g.16xlarge |
arm64 |
i4i.8xlarge |
x86_64 |
i4i.12xlarge |
x86_64 |
i4i.16xlarge |
x86_64 |
i4i.24xlarge |
x86_64 |
i4i.32xlarge |
x86_64 |
i4i.metal |
x86_64 |
i7i.12xlarge |
x86_64 |
i7i.16xlarge |
x86_64 |
i7i.24xlarge |
x86_64 |
i7i.48xlarge |
x86_64 |
i7i.metal-24xl |
x86_64 |
i7i.metal-48xl |
x86_64 |
i7ie.12xlarge |
x86_64 |
i7ie.18xlarge |
x86_64 |
i7ie.24xlarge |
x86_64 |
i7ie.48xlarge |
x86_64 |
i7ie.metal-24xl |
x86_64 |
i7ie.metal-48xl |
x86_64 |
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 執行個體上 ENA Express 設定的效能
為了確保 ENA Express 可以有效運作,您的 Linux 執行個體必須符合數個網路組態要求。
您可以從 Amazon GitHub 儲存庫下載並執行 ENA Express 設定檢查指令碼,而不是手動設定每個設定。指令碼會根據 ENA Express 的必要和建議設定來驗證您的執行個體,並輸出確切的命令來修正其發現的任何問題。
https://github.com/amzn/amzn-ec2-ena-utilities/blob/main/ena-express/check-ena-express-settings.sh
指令碼會檢查下列設定和組態:
-
MTU 大小 – ENA Express 需要低於預設值的 MTU,才能容納其他 AWS SRD 標頭。新建立的 TCP 連線會自動固定 MSS 以緩解此問題,但 UDP 流量仍需要較低的 MTU。
-
TCP 輸出佇列大小限制 – 檢查每個通訊端的傳輸中位元組限制是否足以維持高輸送量。網路延遲增加的環境需要更高的限制。
-
位元組佇列限制 – 確認網路界面上已停用位元組佇列限制 (BQL)。BQL 可以限制為裝置層級傳輸排入佇列的資料量,這會限制 ENA Express 效能。
Amazon Linux 發行版本的 ENA 驅動程式預設會停用位元組佇列限制。
-
TCP Autocorking – 檢查是否停用 TCP Autocorking。停用自動追蹤可以減少某些 ENA Express TCP 流量模式的延遲,例如請求回應工作負載。這可能會導致封包處理額外負荷的最小增加。
-
TX 佇列大小和大型 LLQ – 驗證網路界面的傳輸佇列大小是否足夠大,以獲得最佳效能。指令碼也會檢查 ENA 模組參數是否明確停用大型低延遲佇列 (大型 LLQ) 功能,因為它可以減少可用的 TX 佇列深度。如需大型 LLQ 及其對 TX 佇列大小影響的詳細資訊,請參閱 GitHub 上的大型低延遲佇列 (大型 LLQ)。
-
RX 佇列大小 – 檢查網路界面的接收環緩衝區是否足夠大,以有效率地處理傳入流量,並避免封包在負載下下降。
-
TCP 和網路通訊端緩衝區大小 – 驗證 TCP 接收和傳送緩衝區大小上限,以及核心網路通訊端緩衝區預設值和上限是否足夠大,以維持高輸送量。這些設定在網路延遲增加的環境中很重要,其中您需要較大的緩衝區來利用連線。
-
TCP 擁塞控制 – 驗證 TCP 擁塞控制組態已最佳化,可在網路延遲增加的環境中與 ENA Express 搭配使用。
指令碼也會報告其他診斷資訊,包括 ENA 驅動程式版本、EMA SRD 統計資料、中斷審核設定、佇列組態和通訊端緩衝區大小。此資訊有助於對 ENA Express 效能問題進行故障診斷。
為了確保您的執行個體網路驅動程式已設定為最佳效能,請同時檢閱 GitHub 上的 ENA Linux 驅動程式最佳實務和效能最佳化指南。