使用 ENA Express 改善EC2執行個體間的網路效能 - Amazon Elastic Compute Cloud

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

使用 ENA Express 改善EC2執行個體間的網路效能

ENAExpress 由可 AWS 擴展的可靠數據報(SRD)技術提供支持。SRD是一種高效能網路傳輸通訊協定,使用動態路由來增加輸送量並將尾端延遲降至最低。使用 ENA Express,您可以在相同可用區域中的兩個EC2執行個體之間進行通訊。

ENA快遞的好處
  • 將可用區域內單一流程可使用的最大頻寬從 5 Gbps 增加到 25 Gbps,最高可達彙總執行個體限制。

  • 減少EC2執行個體之間網路流量的尾部延遲,特別是在高網路負載期間。

  • 偵測並避免擁塞的網路路徑。

  • 直接在網路層中處理某些任務,例如接收端的封包重新排序,以及大多數需要的重新傳輸。這會釋放應用程式層進行其他工作。

注意
  • 如果應用程式每秒傳送或接收大量封包,而且大部分時間需要最佳化延遲,尤其是在網路上沒有擁塞的期間,則 增強型網路 可能更適合您的網路。

  • ENA快速流量無法跨本機區域中的子網路傳送。

在執行個體上為網路介面附件啟用 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快遞的工作原理

ENAExpress 由可 AWS 擴展的可靠數據報(SRD)技術提供支持。它會將每個網路流量的封包分配到不同的 AWS 網路路徑,並在偵測到擁塞跡象時動態調整分佈。它還管理接收端的封包重新排序。

為確保 ENA Express 能夠按預期管理網路流量,傳送和接收執行個體以及它們之間的通訊必須符合下列所有需求:

  • 支援傳送和接收執行個體類型。如需詳細資訊,請參閱 ENA快速支援的執行個體類型 資料表。

  • 傳送和接收執行個體都必須設定 ENA Express。如果組態有所差異,您可能會遇到流量預設為標準ENA傳輸的情況。下列情境說明會發生的情況。

    情況:組態的差異

    執行個體 ENA快速啟用 UDP使用ENA快遞
    執行個體 1
    執行個體 2

    在此情況下,兩個執行個體之間的TCP流量可以使用 ENA Express,因為這兩個執行個體都已啟用 Express。但是,由於其中一個執行個體不使用 ENA Express 進行UDP流量,因此這兩個執行個體之間的通訊會UDP使用標準ENA傳輸。

  • 傳送和接收執行個體必須在相同的可用區域中執行。

  • 執行個體之間的網路路徑不得包含中介軟體方塊。ENA快遞目前不支持中間件框。

  • (僅限 Linux 執行個體) 若要充分利用可能的頻寬,請使用 2.2.9 或更新版本的驅動程式。

  • (僅限 Linux 執行個體) 若要產生指標,請使用 2.8 或更新版本的驅動程式。

如果未滿足任何要求,則執行個體會使用標準TCP/通UDP訊協定,但不會SRD進行通訊。

若要確保您的執行個體網路驅動程式設定為最佳效能,請檢閱建議的ENA驅動程式最佳做法。這些最佳作法也適用於 ENA Express。如需詳細資訊,請參閱 GitHub 網站上的《ENALinux 驅動程式最佳作法和效能最佳化指南》

注意

Amazon 是EC2指執行個體與以附件形式連接到執行個體的網路界面之間的關係。ENA快速設定會套用至貼附。如果網路介面從執行個體中斷連結,則附件將不再存在,套用至該介面的 ENA Express 設定將不再有效。執行個體終止時也是如此,即使網路介面仍然存在。

在傳送執行個體和接收執行個體上啟用網路介面附件的 ENA Express 之後,您可以使用 ENA Express 指標來協助確保執行個體能夠充分利用SRD技術提供的效能改進。如需ENA快速測量結果的詳細資訊,請參閱ENA快速的測量結果

ENA快速支援的執行個體類型

下列索引標籤顯示支援 ENA Express 的執行個體類型。

General purpose
執行個體類型 架構
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
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
Compute optimized
執行個體類型 架構
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.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
c7g.12xlarge arm64
c7g.16xlarge arm64
c7g.metal arm64
c7gd.12xlarge arm64
c7gd.16xlarge arm64
c7gd.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
Memory optimized
執行個體類型 架構
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
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
r8g.12xlarge arm64
r8g.16xlarge arm64
r8g.24xlarge arm64
r8g.48xlarge arm64
r8g.metal-24xl arm64
r8g.metal-48xl arm64
u7i-12tb.224xlarge x86_64
u7in-16tb.224xlarge x86_64
u7in-24tb.224xlarge x86_64
u7in-32tb.224xlarge 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
Accelerated computing
執行個體類型 架構
g6.48xlarge x86_64
Storage optimized
執行個體類型 架構
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
im4gn.4xlarge arm64
im4gn.8xlarge arm64
im4gn.16xlarge arm64

Linux 執行個體的先決條

若要確保 ENA Express 可以有效運作,請依照下列方式更新 Linux 執行個體的設定。

  • 如果您的執行個體使用 Jumbo 框架,請執行下列命令,將最大傳輸單位 (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小型佇列限制設定為 1MB 或更高。這會讓在通訊端上排入佇列並等待傳輸的資料量增多。

      sudo sh -c 'echo 1048576 > /proc/sys/net/ipv4/tcp_limit_output_bytes'
    2. 如果 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驅動程式預設會停用位元組佇列限制。

調整 Linux 執行個體上ENA快速設定的效能

若要檢查 Linux 執行個體組態以獲得最佳的 ENA Express 效能,您可以執行 Amazon GitHub 儲存庫上提供的以下指令碼:

https://github.com/amzn/AMZN-EC2-ENA-實用程序/BLOB /主/ENA-快遞 /.sh check-ena-express-settings

該腳本運行一系列測試,並建議建議和必要的配置更改。