學習筆記 RDMA技術下篇

2021-10-01 18:56:27 字數 3287 閱讀 5254

傳統上的rdma技術設計核心封裝多層網路協議並且涉及核心資料傳輸。rdma通過專有的rdma網絡卡rnic,繞過核心直接從使用者空間訪問rdma enabled nic網絡卡。rdma提供乙個專有的verbs inte***ce而不是傳統的tcp/ip socket inte***ce。要使用rdma首先要建立從rdma到應用程式記憶體的資料路徑 ,可以通過rdma專有的verbs inte***ce介面來建立這些資料路徑,一旦資料路徑建立後,就可以直接訪問使用者空間buffer。

rdma在應用程式使用者空間,提供了一系列verbs inte***ce介面操作rdma硬體。rdma繞過核心直接從使用者空間訪問rdma 網絡卡(rnic)。rnic網絡卡中包括cached page table entry,頁表就是用來將虛擬頁面對映到相應的物理頁面。

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,這是一種複雜的訊息傳輸模式,多用於傳輸短的控制訊息。

RDMA學習筆記

三種實現為 infiniband,roce,iwrp infiniband是一種專為rdma設計的網路,從硬體級別保證可靠傳輸 而roce 和 iwarp都是基於乙太網的rdma技術 roce協議存在rocev1和rocev2兩個版本,主要區別rocev1是基於乙太網鏈路層實現的rdma協議 交換機...

了解Infiniband和RDMA技術

了解infiniband和rdma技術 infiniband涉及兩個不同的事物。第乙個是用於infiniband網路的物理鏈路層協議。第二個是稱為infiniband verbs api的高階程式設計api。infiniband動詞api是遠端直接記憶體訪問 rdma 技術的實現。rdma可以從一台...

C 學習筆記 類和物件(下篇)

include using namespace std 初始化列表 class b private int a 4 char b 1 class a class d private int g void display private int year 4 int month 4 int day 4...