歡迎光臨
每天分享高質量文章

深入淺出全面解析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

原文:

https://blog.csdn.net/qq_21125183/article/details/80563463

 

推薦閱讀:

 

 

溫馨提示:

請識別二維碼關註公眾號,點選原文連結獲取更多RDMA技術資料總結

    閱讀原文

    贊(0)

    分享創造快樂