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

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

    分享創造快樂