學習筆記-RDMA技術下篇

RDMA技術

傳統上的RDMA技術設計內核封裝多層網絡協議並且涉及內核數據傳輸。RDMA通過專有的RDMA網卡RNIC,繞過內核直接從用戶空間訪問RDMA enabled NIC網卡。RDMA提供一個專有的Verbs Interface而不是傳統的TCP/IP Socket Interface。要使用RDMA首先要建立從RDMA到應用程序內存的數據路徑 ,可以通過RDMA專有的Verbs Interface接口來建立這些數據路徑,一旦數據路徑建立後,就可以直接訪問用戶空間buffer。

RDMA系統架構圖


        RDMA在應用程序用戶空間,提供了一系列verbs interface接口操作RDMA硬件。RDMA繞過內核直接從用戶空間訪問RDMA 網卡(RNIC)。RNIC網卡中包括Cached Page Table Entry,頁表就是用來將虛擬頁面映射到相應的物理頁面。

RDMA工作過程

1)當一個應用執行RDMA 讀或寫請求時,不執行任何數據複製.在不需要任何內核內存參與的條件下,RDMA 請求從運行在用戶空間中的應用中發送到本地NIC( 網卡)。

2) NIC 讀取緩衝的內容,並通過網絡傳送到遠程NIC。

3) 在網絡上傳輸的RDMA 信息包含目標虛擬地址、內存鑰匙和數據本身.請求既可以完全在用戶空間中處理(通過輪詢用戶級完成排列) ,又或者在應用一直睡眠到請求完成時的情況下通過系統中斷處理.RDMA 操作使應用可以從一個遠程應用的內存中讀數據或向這個內存寫數據。

4) 目標NIC 確認內存鑰匙,直接將數據寫人應用緩存中.用於操作的遠程虛擬內存地址包含在RDMA 信息中。

 

 RDMA提供了基於消息隊列的點對點通信,每個應用都可以直接獲取自己的消息,無需操作系統和協議棧的介入。
       消息服務建立在通信雙方本端和遠端應用之間創建的Channel-IO連接之上。當應用需要通信時,就會創建一條Channel連接,每條Channel的首尾端點是兩對Queue Pairs(QP)。每對QP由Send Queue(SQ)和Receive Queue(RQ)構成,這些隊列中管理着各種類型的消息。QP會被映射到應用的虛擬地址空間,使得應用直接通過它訪問RNIC網卡。除了QP描述的兩種基本隊列之外,RDMA還提供一種隊列Complete Queue(CQ),CQ用來知會用戶WQ上的消息已經被處理完。

       RDMA提供了一套軟件傳輸接口,方便用戶創建傳輸請求Work Request(WR),WR中描述了應用希望傳輸到Channel對端的消息內容,WR通知QP中的某個隊列Work Queue(WQ)。在WQ中,用戶的WR被轉化爲Work Queue Element(WQE)的格式,等待RNIC的異步調度解析,並從WQE指向的Buffer中拿到真正的消息發送到Channel對端。

RDAM單邊操作 (RDMA READ)

READ和WRITE是單邊操作,只需要本端明確信息的源和目的地址,遠端應用不必感知此次通信,數據的讀或寫都通過RDMA在RNIC與應用Buffer之間完成,再由遠端RNIC封裝成消息返回到本端。

對於單邊操作,以存儲網絡環境下的存儲爲例,數據的流程如下:
1.   首先A、B建立連接,QP已經創建並且初始化。
2.   數據被存檔在B的buffer地址VB,注意VB應該提前註冊到B的RNIC (並且它是一個Memory Region) ,並拿到返回的local key,相當於RDMA操作這塊buffer的權限。
3.   B把數據地址VB,key封裝到專用的報文傳送到A,這相當於B把數據buffer的操作權交給了A。同時B在它的WQ中註冊進一個WR,以用於接收數據傳輸的A返回的狀態。
4.   A在收到B的送過來的數據VB和R_key後,RNIC會把它們連同自身存儲地址VA到封裝RDMA READ請求,將這個消息請求發送給B,這個過程A、B兩端不需要任何軟件參與,就可以將B的數據存儲到A的VA虛擬地址。
5.   A在存儲完成後,會向B返回整個數據傳輸的狀態信息。

單邊操作傳輸方式是RDMA與傳統網絡傳輸的最大不同,只需提供直接訪問遠程的虛擬地址,無須遠程應用的參與其中,這種方式適用於批量數據傳輸。

RDMA 單邊操作 (RDMA WRITE)

對於單邊操作,以存儲網絡環境下的存儲爲例,數據的流程如下:
1.   首先A、B建立連接,QP已經創建並且初始化。
2.   數據remote目標存儲buffer地址VB,注意VB應該提前註冊到B的RNIC(並且它是一個Memory Region),並拿到返回的local key,相當於RDMA操作這塊buffer的權限。
3.   B把數據地址VB,key封裝到專用的報文傳送到A,這相當於B把數據buffer的操作權交給了A。同時B在它的WQ中註冊進一個WR,以用於接收數據傳輸的A返回的狀態。
4.   A在收到B的送過來的數據VB和R_key後,RNIC會把它們連同自身發送地址VA到封裝RDMA WRITE請求,這個過程A、B兩端不需要任何軟件參與,就可以將A的數據發送到B的VB虛擬地址。
5.   A在發送數據完成後,會向B返回整個數據傳輸的狀態信息。


單邊操作傳輸方式是RDMA與傳統網絡傳輸的最大不同,只需提供直接訪問遠程的虛擬地址,無須遠程應用的參與其中,這種方式適用於批量數據傳輸。

RDMA 雙邊操作 (RDMA SEND/RECEIVE)

 RDMA中SEND/RECEIVE是雙邊操作,即必須要遠端的應用感知參與才能完成收發。在實際中,SEND/RECEIVE多用於連接控制類報文,而數據報文多是通過READ/WRITE來完成的。
對於雙邊操作爲例,主機A向主機B(下面簡稱A、B)發送數據的流程如下:
1.   首先,A和B都要創建並初始化好各自的QP,CQ
2.   A和B分別向自己的WQ中註冊WQE,對於A,WQ=SQ,WQE描述指向一個等到被髮送的數據;對於B,WQ=RQ,WQE描述指向一塊用於存儲數據的Buffer。
3.   A的RNIC異步調度輪到A的WQE,解析到這是一個SEND消息,從Buffer中直接向B發出數據。數據流到達B的RNIC後,B的WQE被消耗,並把數據直接存儲到WQE指向的存儲位置。
4.  AB通信完成後,A的CQ中會產生一個完成消息CQE表示發送完成。與此同時,B的CQ中也會產生一個完成消息表示接收完成。每個WQ中WQE的處理完成都會產生一個CQE。


雙邊操作與傳統網絡的底層Buffer Pool類似,收發雙方的參與過程並無差別,區別在零拷貝、Kernel Bypass,實際上對於RDMA,這是一種複雜的消息傳輸模式,多用於傳輸短的控制消息。
 

 

發佈了122 篇原創文章 · 獲贊 29 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章