深入淺出全面解析RDMA

   RDMA(RemoteDirect Memory Access)技術全稱遠程直接內存訪問,就是爲了解決網絡傳輸中服務器端數據處理的延遲而產生的。它將數據直接從一臺計算機的內存傳輸到另一臺計算機,無需雙方操作系統的介入。這允許高吞吐、低延遲的網絡通信,尤其適合在大規模並行計算機集羣中使用。RDMA通過網絡把資料直接傳入計算機的存儲區,將數據從一個系統快速移動到遠程系統存儲器中,而不對操作系統造成任何影響,這樣就不需要用到多少計算機的處理能力。它消除了外部存儲器複製和上下文切換的開銷,因而能解放內存帶寬和CPU週期用於改進應用系統性能。

    本次詳解我們從三個方面詳細介紹RDMA:RDMA背景、RDMA相關工作、RDMA技術詳解。

一、背景介紹


1.1 傳統TCP/IP通信模式

傳統的TCP/IP網絡通信,數據需要通過用戶空間發送到遠程機器的用戶空間。數據發送方需要講數據從用戶應用空間Buffer複製到內核空間的Socket Buffer中。然後Kernel空間中添加數據包頭,進行數據封裝。通過一系列多層網絡協議的數據包處理工作,這些協議包括傳輸控制協議(TCP)、用戶數據報協議(UDP)、互聯網協議(IP)以及互聯網控制消息協議(ICMP)等。數據才被Push到NIC網卡中的Buffer進行網絡傳輸。消息接受方接受從遠程機器發送的數據包後,要將數據包從NIC buffer中複製數據到Socket Buffer。然後經過一些列的多層網絡協議進行數據包的解析工作。解析後的數據被複制到相應位置的用戶應用空間Buffer。這個時候再進行系統上下文切換,用戶應用程序才被調用。以上就是傳統的TCP/IP協議層的工作。

如今隨着社會的發展,我們希望更快和更輕量級的網絡通信。

1.2 通信網絡定義
    計算機網絡通信中最重要兩個衡量指標主要是指高帶寬和低延遲。通信延遲主要是指:處理延遲和網絡傳輸延遲。處理延遲開銷指的就是消息在發送和接收階段的處理時間。網絡傳輸延遲指的就是消息在發送和接收方的網絡傳輸時延。如果網絡通信狀況很好的情況下,網絡基本上可以 達到高帶寬和低延遲。

1.3  當今網絡現狀
    當今隨着計算機網絡的發展。消息通信主要分爲兩類消息,一類是Large messages,在這類消息通信中,網絡傳輸延遲佔整個通信中的主導位置。還有一類消息是Small messages,在這類消息通信中,消息發送端和接受端的處理開銷佔整個通信的主導地位。然而在現實計算機網絡中的通信場景中,主要是以發送小消息爲主。所有說發送消息和接受消息的處理開銷佔整個通信的主導的地位。具體來說,處理開銷指的是buffer管理、在不同內存空間中消息複製、以及消息發送完成後的系統中斷。

1.4 傳統TCP/IP存在的問題
    傳統的TPC/IP存在的問題主要是指I/O bottleneck瓶頸問題。在高速網絡條件下與網絡I/O相關的主機處理的高開銷限制了可以在機器之間發送的帶寬。這裏感興趣的高額開銷是數據移動操作和複製操作。具體來講,主要是傳統的TCP/IP網絡通信是通過內核發送消息。Messaging passing through kernel這種方式會導致很低的性能和很低的靈活性。性能低下的原因主要是由於網絡通信通過內核傳遞,這種通信方式存在的很高的數據移動和數據複製的開銷。並且現如今內存帶寬性相較如CPU帶寬和網絡帶寬有着很大的差異。很低的靈活性的原因主要是所有網絡通信協議通過內核傳遞,這種方式很難去支持新的網絡協議和新的消息通信協議以及發送和接收接口。

二、相關工作
    高性能網絡通信歷史發展主要有以下四個方面:TCP Offloading Engine(TOE)、User-Net Networking(U-Net)、Virtual interface Architecture(VIA)、Remote Direct Memroy Access(RDMA)。U-Net是第一個跨過內核網絡通信的模式之一。VIA首次提出了標準化user-level的網絡通信模式,其次它組合了U-Net接口和遠程DMA設備。RDMA就是現代化高性能網絡通信技術。

2.1 TCP Offloading Engine
    在主機通過網絡進行通信的過程中,主機處理器需要耗費大量資源進行多層網絡協議的數據包處理工作,這些協議包括傳輸控制協議(TCP)、用戶數據報協議(UDP)、互聯網協議(IP)以及互聯網控制消息協議(ICMP)等。由於CPU需要進行繁重的封裝網絡數據包協議,爲了將佔用的這部分主機處理器資源解放出來專注於其他應用,人們發明了TOE(TCP/IP Offloading Engine)技術,將上述主機處理器的工作轉移到網卡上。

    這種技術需要特定網絡接口-網卡支持這種Offloading操作。這種特定網卡能夠支持封裝多層網絡協議的數據包,這個功能常見於高速以太網接口上,如吉比特以太網(GbE)或10吉比特以太網(10GbE)。

2.2 User-Net Networking(U-Net)
    U-Net的設計目標是將協議處理部分移動到用戶空間去處理。這種方式避免了用戶空間將數據移動和複製到內核空間的開銷。它的設計宗旨就是移動整個協議棧到用戶空間中去,並且從數據通信路徑中徹底刪除內核。這種設計帶來了高性能的提升和高靈活性的提升。

    U-Net的virtual NI 爲每個進程提供了一種擁有網絡接口的錯覺,內核接口只涉及到連接步驟。傳統上的網絡,內核控制整個網絡通信,所有的通信都需要通過內核來傳遞。U-Net應用程序可以通過MUX直接訪問網絡,應用程序通過MUX直接訪問內核,而不需要將數據移動和複製到內核空間中去。

三、RDMA詳解
    RDMA(Remote Direct Memory Access)技術全稱遠程直接內存訪問,就是爲了解決網絡傳輸中服務器端數據處理的延遲而產生的。RDMA通過網絡把資料直接傳入計算機的存儲區,將數據從一個系統快速移動到遠程系統存儲器中,而不對操作系統造成任何影響,這樣就不需要用到多少計算機的處理功能。它消除了外部存儲器複製和上下文切換的開銷,因而能解放內存帶寬和CPU週期用於改進應用系統性能。

RDMA主要有以下三個特性:1.Low-Latency 2.Low CPU overhead 3. high bandwidth

3.1 RDMA 簡介
Remote:數據通過網絡與遠程機器間進行數據傳輸

Direct:沒有內核的參與,有關發送傳輸的所有內容都卸載到網卡上

Memory:在用戶空間虛擬內存與RNIC網卡直接進行數據傳輸不涉及到系統內核,沒有額外的數據移動和複製

Access:send、receive、read、write、atomic操作

3.2 RDMA基本概念
    RDMA有兩種基本操作。

Memory verbs: 包括RDMA read、write和atomic操作。這些操作指定遠程地址進行操作並且繞過接收者的CPU。
Messaging verbs:包括RDMA send、receive操作。這些動作涉及響應者的CPU,發送的數據被寫入由響應者的CPU先前發佈的接受所指定的地址。
    RDMA傳輸分爲可靠和不可靠的,並且可以連接和不連接的(數據報)。憑藉可靠的傳輸,NIC使用確認來保證消息的按序傳送。不可靠的傳輸不提供這樣的保證。然而,像InfiniBand這樣的現代RDMA實現使用了一個無損鏈路層,它可以防止使用鏈路層流量控制的基於擁塞的損失[1],以及使用鏈路層重傳的基於位錯誤的損失[8]。因此,不可靠的傳輸很少會丟棄數據包。 

目前的RDMA硬件提供一種數據報傳輸:不可靠的數據報(UD),並且不支持memory verbs。


3.3 RDMA三種不同的硬件實現
    目前RDMA有三種不同的硬件實現。分別是InfiniBand、iWarp(internet Wide Area RDMA Protocol)、RoCE(RDMA over Converged Ethernet)。

目前,大致有三類RDMA網絡,分別是Infiniband、RoCE、iWARP。其中,Infiniband是一種專爲RDMA設計的網絡,從硬件級別保證可靠傳輸 , 而RoCE 和 iWARP都是基於以太網的RDMA技術,支持相應的verbs接口,如圖1所示。從圖中不難發現,RoCE協議存在RoCEv1和RoCEv2兩個版本,主要區別RoCEv1是基於以太網鏈路層實現的RDMA協議(交換機需要支持PFC等流控技術,在物理層保證可靠傳輸),而RoCEv2是以太網TCP/IP協議中UDP層實現。從性能上,很明顯Infiniband網絡最好,但網卡和交換機是價格也很高,然而RoCEv2和iWARP僅需使用特殊的網卡就可以了,價格也相對便宜很多。

Infiniband,支持RDMA的新一代網絡協議。 由於這是一種新的網絡技術,因此需要支持該技術的NIC和交換機。
RoCE,一個允許在以太網上執行RDMA的網絡協議。 其較低的網絡標頭是以太網標頭,其較高的網絡標頭(包括數據)是InfiniBand標頭。 這支持在標準以太網基礎設施(交換機)上使用RDMA。 只有網卡應該是特殊的,支持RoCE。
iWARP,一個允許在TCP上執行RDMA的網絡協議。 IB和RoCE中存在的功能在iWARP中不受支持。 這支持在標準以太網基礎設施(交換機)上使用RDMA。 只有網卡應該是特殊的,並且支持iWARP(如果使用CPU卸載),否則所有iWARP堆棧都可以在SW中實現,並且喪失了大部分RDMA性能優勢。


3.4 RDMA技術


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

3.5 RDMA整體系統架構圖


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

3.6 RDMA技術詳解
RDMA 的工作過程如下:

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

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

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

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

3.7 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對端。

3.7.1 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與傳統網絡傳輸的最大不同,只需提供直接訪問遠程的虛擬地址,無須遠程應用的參與其中,這種方式適用於批量數據傳輸。

3.7.2 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與傳統網絡傳輸的最大不同,只需提供直接訪問遠程的虛擬地址,無須遠程應用的參與其中,這種方式適用於批量數據傳輸。

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


--------------------- 
作者:MasterT-J 
來源:CSDN 
原文:https://blog.csdn.net/qq_21125183/article/details/80563463 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章