天天看點

關于遠端直接記憶體通路技術 RDMA 的高性能架構設計介紹 | 龍蜥技術

作者:龍蜥社群小龍

編者按:傳統以太網方案存在系統調用消耗大量時間、增加資料傳輸延時、對 CPU 造成很重的負擔三個缺點,而 RDMA 技術可以解決以上三個缺點。那 RDMA 究竟是什麼?它的方案的設計思路是什麼?今天,浪潮資訊驅動工程師劉偉帶大家深入了解 RDMA 技術的基本原理,交流在工程上的設計思路。本文整理自龍蜥大講堂 83 期,以下為本次分享内容:

01 RDMA技術的優點、基礎知識和設計思路

  • RDMA 和傳統網絡方案的比較

傳統以太網方案存在三個缺點:send/sendto 等系統調用導緻 CPU 在使用者态和核心态之間切換,消耗大量時間;發送過程中需要 CPU 把資料從使用者空間複制到核心空間(接收時反向複制),增加了資料傳輸延時;需要 CPU 全程參與資料包的封裝和解析,在資料量大時将對 CPU 将造成很重的負擔。

RDMA 技術可以解決上述三個問題:首先,其在資料傳輸過程中沒有系統調用;然後,在系統記憶體内部做到零拷貝,省掉了資料在使用者空間和核心空間之間拷貝的步驟。最後,把資料包的封裝和解析交由網卡硬體來做,降低了 CPU 負載。

  • RDMA 協定類型

RDMA 指的是一種遠端直接記憶體通路技術。具體到協定層面,它主要包含了Infiniband(IB),RDMA over Converged Ethernet(RoCE)和Internet Wide Area RDMA Protocol(iWARP)三種協定。三種協定都符合RDMA标準,共享相同的上層使用者接口(Verbs),隻是在不同層次上有一些差别。

  • RDMA 軟體架構

RDMA 的軟體架構按層次可分成兩部分,即 rdma-core 和核心 RDMA 子系統,分别運作在 Linux 系統中的使用者态和核心态。整個軟體架構适用于所有類型的 RDMA 網卡,不管網卡硬體執行了哪種 RDMA 協定(Infiniband/RoCE/iWARP)。

關于遠端直接記憶體通路技術 RDMA 的高性能架構設計介紹 | 龍蜥技術
  • RDMA 基本元素和操作類型

WQE(Work Queue Element,工作隊列元素)的作用類似于以太網方案中收發隊列裡的描述符(Desc) 。其中包含了軟體希望硬體去做的任務類型(遠端讀、遠端寫、發送還是接收等)以及任務的詳細資訊(資料所在的記憶體位址、資料長度和通路密鑰等)。

WQ(Work Queue,工作隊列)類似于以太網方案中的發送/接收隊列,WQ 裡面可以容納很多 WQE,這些 WQE 在 WQ 中以先進先出(FIFO)隊列的形式存在。左圖展示了 WQ 和 WQE 的關系,以及它們和以太網方案中隊列和描述符功能的比較。

QP 是一個發送工作隊列和一個接受工作隊列的組合,這兩個隊列分别稱為 SQ(Send Queue)和 RQ(Receive Queue)。SQ 和 RQ 都是一種 WQ。SQ 專門用來存放發送任務,RQ 專門用來存放接收任務。在一次 SEND-RECV 流程中,發送端需要把表示一次發送任務的 WQE 放到 SQ 裡面(這種操作稱為 Post Send)。同樣的,接收端需要把表示一次接收任務的 WQE 放到 RQ 裡面(稱為Post Receive),這樣硬體才知道收到資料之後放到記憶體中的哪個位置。在RDMA技術中,通信的基本主體或對象是 QP,而不是節點。對于每個節點來說,每個程序都可以申請和使用若幹個 QP,而每個本地 QP 可以“連接配接到”一個遠端的 QP。每個節點的每個 QP 都有一個唯一的編号,稱為 QPN(Query Pair Number),通過 QPN 可以唯一确定一個節點上的 QP。

CQ 意為完成隊列(Completion Queue)。跟 WQ 中含有很多 WQE 類似,CQ 這個隊列中也有很多元素,叫做 CQE(Completion Queue Element)。可以認為 CQE 跟 WQE 是相反的概念。如果 WQE 是軟體下發給硬體的任務,CQE 就是硬體完成任務之後傳回給軟體的“完成報告”。每個 CQE 都包含某個 WQE 的完成資訊。

RDMA WRITE 操作是一端應用主動寫入遠端記憶體的行為,除了準備階段,遠端 CPU 不需要參與,也不感覺何時有資料寫入、資料在何時接收完畢。是以這是一種單端操作。需要注意的是,操作發起端的應用程式是通過虛拟位址來讀寫遠端記憶體的,上層應用可以非常友善的對其進行操作。實際的虛拟位址—實體位址的轉換是由 RDMA 網卡完成的。

關于遠端直接記憶體通路技術 RDMA 的高性能架構設計介紹 | 龍蜥技術
  • RDMA 方案的設計思路

下圖中橫向箭頭表示的是某應用程式執行的步驟。每個步驟中下行的箭頭和方框表示目前這個步驟的簡要實作流程。

關于遠端直接記憶體通路技術 RDMA 的高性能架構設計介紹 | 龍蜥技術

RDMA 實作方案的設計思路中比較重要的三點:初始化和配置等低頻操作可以進入核心态執行;資料傳輸等高頻操作旁路核心;獨立的 QP、CQ 資源保證多線程并發。

關于遠端直接記憶體通路技術 RDMA 的高性能架構設計介紹 | 龍蜥技術

02 浪潮 iRDMA 方案簡介

iRDMA 是浪潮資訊體系結構研究部利用自研 F10A FPGA 加速卡,基于 Linux 核心 IB 驅動架構和 rdma-core 開源協定棧,開發的一套 RDMA 網絡加速平台,使用者可在其基礎上進行二次開發。

下面是它的軟體子產品框圖:

關于遠端直接記憶體通路技術 RDMA 的高性能架構設計介紹 | 龍蜥技術

我們使用 perftest 工具測試 iRDMA,并和 Mellanox ConnectX-4 Lx 10G 網卡做比較,帶寬測試結果見下圖。

關于遠端直接記憶體通路技術 RDMA 的高性能架構設計介紹 | 龍蜥技術

總體來說 Mellanox 網卡比 iRDMA 帶寬大一點,按比例看小 size 時比較明顯。

關于直播課件及視訊回放擷取方式:

【PPT 課件擷取】:關注微信公衆号(OpenAnolis),回複“龍蜥課件” 即可擷取。有任何疑問請随時咨詢龍蜥助手—小龍(微信:openanolis_assis)。

【視訊回放】:視訊回放可在龍蜥視訊号(賬号:龍蜥社群_小龍)或龍蜥官網 檢視。

—— 完 ——

繼續閱讀