乙太網路測試洞見
如何模擬 RoCEv2 流量?
何謂RoCEv2?
RoCEv2(Converged Ethernet 上的 RDMA 第 2 版)是一種網路協定,可透過 UDP 封裝,在可路由的 IP 網路中實現遠端直接記憶體存取(RDMA)。
RDMA 是一種高效能協定,可讓伺服器在不經由 CPU、作業系統或中間資料複製的情況下,直接讀取或寫入另一台伺服器的記憶體。此技術常應用於高速資料中心網路中,以降低延遲並減少 CPU 負載。
乙太網路測試洞見
RoCEv2(Converged Ethernet 上的 RDMA 第 2 版)是一種網路協定,可透過 UDP 封裝,在可路由的 IP 網路中實現遠端直接記憶體存取(RDMA)。
RDMA 是一種高效能協定,可讓伺服器在不經由 CPU、作業系統或中間資料複製的情況下,直接讀取或寫入另一台伺服器的記憶體。此技術常應用於高速資料中心網路中,以降低延遲並減少 CPU 負載。
RoCEv2 幀本質上是將 InfiniBand (IB) 封裝在 UDP、IP 和乙太網路中,如下所示。
UDP 目的埠 4791 表示該資料包採用 RoCEv2 協定。
RDMA 協定包含以下高階步驟,用於將資料從一台伺服器的某個記憶體位置傳輸至另一台伺服器的記憶體位置:
1. 連線建立
– 兩台裝置透過具備 RDMA 功能的硬體(例如支援 RDMA 的網路介面卡)建立連線。
– 兩台裝置皆建立佇列對(傳送佇列、接收佇列及完成佇列)。
2. 記憶體註冊
– 發送端與接收端裝置會將其記憶體區域向 RDMA 硬體進行註冊。
– 已註冊的記憶體區域會被固定,這表示在 RDMA 運作期間,作業系統無法移動或交換這些區域。
3. 記憶體金鑰交換
– 裝置間會交換記憶體金鑰(例如:遠端記憶體位址與存取權限),以便直接存取已登錄的記憶體區域。
4. 資料傳輸
– 其中一臺裝置直接從遠端裝置的記憶體讀取或寫入,繞過兩端的 CPU。
– 由於不涉及中間緩衝區或核心上下文切換,傳輸過程的延遲極低。
5. 完成通知
– RDMA 硬體會在操作完成時通知應用程式,以確保可靠性與一致性。
6. 連線關閉
– 一旦資料交換完成,RDMA 連線即會關閉,且記憶體區塊將被解除註冊。
兩台裝置之間交換的各種封包類型,皆編碼於基礎傳輸標頭(BTH)中。由於資料交換已在上述第 4 點中說明,因此此處的效能測試便顯得尤為重要。 資料可透過 IPv4 或 IPv6 進行交換,並可採用可靠連接 (RC)、可靠數據報 (RD)、不可靠連接 (UC) 及不可靠數據報 (UD) 等模式。此外,每次資料交換皆由一個「SEND FIRST」幀、數個「SEND MIDDLE」幀以及一個「SEND LAST」幀所組成。
下圖 2 展示了 RC SEND 操作的情況。該圖同時說明了 BTH 指令碼如何編碼這三種類型的 RC SEND 幀。
Teledyne LeCroy Z800Freya 產生器可用於產生 RoCEv2 流量,以在各種工作負載下對網路介面卡(NIC)、交換器及整個網路進行效能測試。
必須注意的是,雖然 Z800Freya RoCEv2 流量,但它本身並不參與 RDMA 協定。此設計透過將流量產生與協定處理分離,有助於精準定位潛在問題,從而更準確地識別效能瓶頸與網路效率低下的狀況。
Z800Freya 透過XenaManager軟體及我們的其中一個設定檔,進行配置以模擬 RoCEv2 流量。若需進行更進階的腳本編寫,亦提供適用於Xena (XOA) 的 Python 程式碼。
為了簡化 RoCEv2 流量的設定,我們已建立四個可供您使用的設定檔:
要在 XenaManager 中載入檔案,只需在埠上按右鍵,然後選取「載入埠設定」,如左側所示。
為了建立更進階的 RoCEv2 流量,並可能與您的測試環境整合,我們製作了一個範例 Python 腳本。此腳本提供靈活的設定選項,例如調整每個流量的幀數、流量速率、突發性、重複次數等。
範例可在此處找到:open-automation-script-library/rocev2 at main · xenanetworks/open-automation-script-library · GitHub
檔案「headers.py」包含了 BTH 中各種 BTH 指令碼及其他元件的所有定義。檔案「roce2_emulate.py」則定義了每流的幀數、幀大小等參數。
Teledyne LeCroy Xena E100Chimera能夠模擬多種網路干擾,包括延遲、抖動、封包與埠干擾、彈性分發,以及頻寬整形。
這對於對延遲、封包順序錯亂及其他類似干擾極為敏感的 RoCEv2 流量而言,尤為重要。
我們提供適用於 E100Chimera 的設定檔,上傳後即可根據 UDP 目的地埠 4791 過濾 RoCEv2 幀。這使得建立僅對 RoCEv2 幀進行干擾的測試情境變得輕而易舉。