RDMA概述

1. DMA和RDMA概念

1.1 DMA

DMA(直接內存訪問)是一種能力,允許在計算機主板上的設備直接把數據發送到內存中去,數據搬運不需要CPU的參與。

傳統內存訪問需要通過CPU進行數據copy來移動數據,通過CPU將內存中的Buffer1移動到Buffer2中。DMA模式:可以同DMA Engine之間通過硬件將數據從Buffer1移動到Buffer2,而不需要操作系統CPU的參與,大大降低了CPU Copy的開銷。

1.2 RDMA

RDMA是一種概念,在兩個或者多個計算機進行通訊的時候使用DMA, 從一個主機的內存直接訪問另一個主機的內存。

RDMA是一種host-offload, host-bypass技術,允許應用程序(包括存儲)在它們的內存空間之間直接做數據傳輸。具有RDMA引擎的以太網卡(RNIC)--而不是host--負責管理源和目標之間的可靠連接。使用RNIC的應用程序之間使用專注的QP和CQ進行通訊:

  1. 每一個應用程序可以有很多QP和CQ
  2. 每一個QP包括一個SQ和RQ
  3. 每一個CQ可以跟多個SQ或者RQ相關聯

2. RDMA的優勢

傳統的TCP/IP技術在數據包處理過程中,要經過操作系統及其他軟件層,需要占用大量的服務器資源和內存總線帶寬,數據在系統內存、處理器緩存和網絡控制器緩存之間來回進行復制移動,給服務器的CPU和內存造成了沉重負擔。尤其是網絡帶寬、處理器速度與內存帶寬三者的嚴重"不匹配性",更加劇了網絡延遲效應。

RDMA是一種新的直接內存訪問技術,RDMA讓計算機可以直接存取其他計算機的內存,而不需要經過處理器的處理。RDMA將數據從一個系統快速移動到遠程系統的內存中,而不對操作系統造成任何影響。

在實現上,RDMA實際上是一種智能網卡與軟件架構充分優化的遠端內存直接高速訪問技術,通過將RDMA協議固化于硬件(即網卡)上,以及支持Zero-copy和Kernel bypass這兩種途徑來達到其高性能的遠程直接數據存取的目標。 使用RDMA的優勢如下:

  • 零拷貝(Zero-copy) - 應用程序能夠直接執行數據傳輸,在不涉及到網絡軟件棧的情況下。數據能夠被直接發送到緩沖區或者能夠直接從緩沖區里接收,而不需要被復制到網絡層。
  • 內核旁路(Kernel bypass) - 應用程序可以直接在用戶態執行數據傳輸,不需要在內核態與用戶態之間做上下文切換。
  • 不需要CPU干預(No CPU involvement) - 應用程序可以訪問遠程主機內存而不消耗遠程主機中的任何CPU。遠程主機內存能夠被讀取而不需要遠程主機上的進程(或CPU)參與。遠程主機的CPU的緩存(cache)不會被訪問的內存內容所填充。
  • 消息基于事務(Message based transactions) - 數據被處理為離散消息而不是流,消除了應用程序將流切割為不同消息/事務的需求。
  • 支持分散/聚合條目(Scatter/gather entries support) - RDMA原生態支持分散/聚合。也就是說,讀取多個內存緩沖區然后作為一個流發出去或者接收一個流然后寫入到多個內存緩沖區里去。

在具體的遠程內存讀寫中,RDMA操作用于讀寫操作的遠程虛擬內存地址包含在RDMA消息中傳送,遠程應用程序要做的只是在其本地網卡中注冊相應的內存緩沖區。遠程節點的CPU除在連接建立、注冊調用等之外,在整個RDMA數據傳輸過程中并不提供服務,因此沒有帶來任何負載。

3. RDMA 三種不同的硬件實現

RDMA作為一種host-offload, host-bypass技術,使低延遲、高帶寬的直接的內存到內存的數據通信成為了可能。目前支持RDMA的網絡協議有:

  1. InfiniBand(IB): 從一開始就支持RDMA的新一代網絡協議。由于這是一種新的網絡技術,因此需要支持該技術的網卡和交換機。
  2. RDMA過融合以太網(RoCE): 即RDMA over Ethernet, 允許通過以太網執行RDMA的網絡協議。這允許在標準以太網基礎架構(交換機)上使用RDMA,只不過網卡必須是支持RoCE的特殊的NIC。
  3. 互聯網廣域RDMA協議(iWARP): 即RDMA over TCP, 允許通過TCP執行RDMA的網絡協議。這允許在標準以太網基礎架構(交換機)上使用RDMA,只不過網卡要求是支持iWARP(如果使用CPU offload的話)的NIC。否則,所有iWARP棧都可以在軟件中實現,但是失去了大部分的RDMA性能優勢。

在三種主流的RDMA技術中,可以劃分為兩大陣營。一個是IB技術, 另一個是支持RDMA的以太網技術(RoCE和iWARP)。其中, IBTA力挺的技術自然是IB和RoCE, Mellanox公司(一個以色列人搞的小公司)是這方面的急先鋒。而iWARP則是IEEE/IETF力挺的技術,主要是Chelsio公司在推進。RoCE和iWARP的爭論,請參考Mellanox和Chelsio這兩家公司發布的白皮書。

在存儲領域,支持RDMA的技術早就存在,比如SRP(SCSI RDMA Protocol)和iSER(iSCSI Extensions for RDMA)。 如今興起的NVMe over Fabrics如果使用的不是FC網絡的話,本質上就是NVMe over RDMA。 換句話說,NVMe over InfiniBand, NVMe over RoCE和NVMe over iWARP都是NVMe over RDMA。

4. RDMA基本術語

4.1 Fabric

A local-area RDMA network is usually referred to as a fabric.

所謂Fabric,就是支持RDMA的局域網(LAN)。

4.2 CA(Channel Adapter)

A channel adapter is the hardware component that connects a system to the fabric.

CA是Channel Adapter(通道適配器)的縮寫。那么,CA就是將系統連接到Fabric的硬件組件。 在IBTA中,一個CA就是IB子網中的一個終端結點(End Node)。分為兩種類型,一種是HCA, 另一種叫做TCA, 它們合稱為xCA。其中, HCA(Host Channel Adapter)是支持"verbs"接口的CA, TCA(Target Channel Adapter)可以理解為"weak CA", 不需要像HCA一樣支持很多功能。 而在IEEE/IETF中,CA的概念被實體化為RNIC(RDMA Network Interface Card), iWARP就把一個CA稱之為一個RNIC。

簡言之,在IBTA陣營中,CA即HCA或TCA; 而在iWARP陣營中,CA就是RNIC。 總之,無論是HCA、 TCA還是RNIC,它們都是CA, 它們的基本功能本質上都是生產或消費數據包(packet)

4.3 Verbs

在RDMA的持續演進中,有一個組織叫做OpenFabric Alliance所做的貢獻可謂功不可沒。 Verbs這個詞不好翻譯,大致可以理解為訪問RDMA硬件的“一組標準動作”。 每一個Verb可以理解為一個Function。

5. 核心概念

5.1 Memory Registration(MR) | 內存注冊

RDMA 就是用來對內存進行數據傳輸。那么怎樣才能對內存進行傳輸,很簡單,注冊。 因為RDMA硬件對用來做數據傳輸的內存是有特殊要求的。

  • 在數據傳輸過程中,應用程序不能修改數據所在的內存。
  • 操作系統不能對數據所在的內存進行page out操作 -- 物理地址和虛擬地址的映射必須是固定不變的。

注意無論是DMA或者RDMA都要求物理地址連續,這是由DMA引擎所決定的。 那么怎么進行內存注冊呢?

  • 創建兩個key (local和remote)指向需要操作的內存區域
  • 注冊的keys是數據傳輸請求的一部分

注冊一個Memory Region之后,這個時候這個Memory Region也就有了它自己的屬性:

  • context : RDMA操作上下文
  • addr : MR被注冊的Buffer地址
  • length : MR被注冊的Buffer長度
  • lkey:MR被注冊的本地key
  • rkey:MR被注冊的遠程key

對Memrory Registration:Memory Registration只是RDMA中對內存保護的一種措施,只有將要操作的內存注冊到RDMA Memory Region中,這快操作的內存就交給RDMA 保護域來操作了。這個時候我們就可以對這快內存進行操作,至于操作的起始地址、操作Buffer的長度,可以根據程序的具體需求進行操作。我們只要保證接受方的Buffer 接受的長度大于等于發送的Buffer長度。

5.2 Queues | 隊列

RDMA一共支持三種隊列,發送隊列(SQ)和接收隊列(RQ),完成隊列(CQ)。其中,SQ和RQ通常成對創建,被稱為Queue Pairs(QP)。

RDMA是基于消息的傳輸協議,數據傳輸都是異步操作。 RDMA操作其實很簡單,可以理解為:

  1. Host提交工作請求(WR)到工作隊列(WQ): 工作隊列包括發送隊列(SQ)和接收隊列(RQ)。工作隊列的每一個元素叫做WQE, 也就是WR。
  2. Host從完成隊列(CQ)中獲取工作完成(WC): 完成隊列里的每一個叫做CQE, 也就是WC。
  3. 具有RDMA引擎的硬件(hardware)就是一個隊列元素處理器。 RDMA硬件不斷地從工作隊列(WQ)中去取工作請求(WR)來執行,執行完了就給完成隊列(CQ)中放置工作完成(WC)。從生產者-消費者的角度理解就是:
  4. Host生產WR, 把WR放到WQ中去
  5. RDMA硬件消費WR
  6. RDMA硬件生產WC, 把WC放到CQ中去
  7. Host消費WC

6. RDMA數據傳輸

6.1 RDMA Send | RDMA發送(/接收)操作 (Send/Recv)

跟TCP/IP的send/recv是類似的,不同的是RDMA是基于消息的數據傳輸協議(而不是基于字節流的傳輸協議),所有數據包的組裝都在RDMA硬件上完成的,也就是說OSI模型中的下面4層(傳輸層,網絡層,數據鏈路層,物理層)都在RDMA硬件上完成。

6.2 RDMA Read | RDMA讀操作 (Pull)

RDMA讀操作本質上就是Pull操作, 把遠程系統內存里的數據拉回到本地系統的內存里。

6.3 RDMA Write | RDMA寫操作 (Push)

RDMA寫操作本質上就是Push操作,把本地系統內存里的數據推送到遠程系統的內存里。

6.4 RDMA Write with Immediate Data | 支持立即數的RDMA寫操作

支持立即數的RDMA寫操作本質上就是給遠程系統Push(推送)帶外(OOB)數據, 這跟TCP里的帶外數據是類似的。

可選地,immediate 4字節值可以與數據緩沖器一起發送。 該值作為接收通知的一部分呈現給接收者,并且不包含在數據緩沖器中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38441.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38441.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38441.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【圖像分類】理論篇 (4)圖像增強opencv實現

隨機旋轉 隨機旋轉是一種圖像增強技術,它通過將圖像以隨機角度進行旋轉來增加數據的多樣性,從而幫助改善模型的魯棒性和泛化能力。這在訓練深度學習模型時尤其有用,可以使模型更好地適應各種角度的輸入。 原圖像: 旋轉后的圖像&…

1.MySQL數據庫的基本操作

數據庫操作過程: 1.用戶在客戶端輸入 SQL 2.客戶端會把 SQL 通過網絡發送給服務器 3.服務器執行這個 SQL,把結果返回給客戶端 4.客戶端收到結果,顯示到界面上 數據庫的操作 這里的數據庫不是代表一個軟件,而是代表一個數據集合。 顯示當前的數據庫 …

Python中的MetaPathFinder

MetaPathFinder 是 Python 導入系統中的一個關鍵組件,它與 sys.meta_path 列表緊密相關。sys.meta_path 是一個包含 MetaPathFinder 實例的列表,這些實例用于自定義模塊的查找和加載邏輯。當使用 import 語句嘗試導入一個模塊時,Python 會遍歷…

Golang通過alibabaCanal訂閱MySQLbinlog

最近在做redis和MySQL的緩存一致性,一個方式是訂閱MySQL的BinLog文件,我們使用阿里巴巴的Canal的中間件來做。 Canal是服務端和客戶端兩部分構成,我們需要先啟動Canal的服務端,然后在Go程序里面連接Canal服務端,即可監…

Maven - 統一構建規范:Maven 插件管理最佳實踐

文章目錄 Available Plugins開源項目中的使用插件介紹maven-jar-pluginmaven-assembly-pluginmaven-shade-pluginShade 插件 - 標簽artifactSetrelocationsfilters 完整配置 Available Plugins https://maven.apache.org/plugins/index.html Maven 是一個開源的軟件構建工具&…

零食量販店熱潮:小縣城的新零售革命

零食量販店熱潮:小縣城的新零售革命 目錄 引言零食量販店的快速崛起零食量販店的運營模式量販零食店在小縣城的影響技術在零食量販店的應用未來展望結論 1. 引言 近年來,零食量販店在我國小縣城迅速發展,成為一種新型的零售模式。在一條街…

flutter 二進制轉字符串

通常接口返回的數據都是二進制數據 二進制轉字符串:utf8二進制轉字符串 onRoomMsg.body是二進制編碼 utf8.decode(onRoomMsg.body)然后字符串轉對象 json.decode(utf8.decode(onRoomMsg.body))然后再用fromJson解析 PrankActivityModel prankActivityModel Prank…

新疆大學841軟件工程考研

1.軟件生產的發展經歷了三個階段,分別是____、程序系統時代和軟件工程時代時代。 2.可行性研究從以下三個方面研究每種解決方法的可行性:經濟可行性、社會可行性和_____。 3.HIPO圖的H圖用于描述軟件的層次關系&…

Android 12.0 系統systemui下拉通知欄的通知布局相關源碼分析

1.前言 在android12.0的系統rom開發中,在進行systemui中的下拉通知欄的布局自定義的時候,對于原生systemui的 系統的下拉通知欄的通知布局的了解也是非常重要的,接下來就來分析下相關的下拉通知欄的通知布局的相關 源碼流程,了解這些才方便對通知欄的布局做修改 2.系統sy…

創建maven的Springboot項目出現錯誤:Cannot access alimaven

創建maven的Springboot項目出現錯誤:Cannot access alimaven 1)問題2) 分析問題3)解決問題 1)問題 創建maven的Springboot項目出現錯誤: Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/p…

“深入探索JVM內部機制:解密Java虛擬機的工作原理“

標題:深入探索JVM內部機制:解密Java虛擬機的工作原理 摘要:本文將深入探索Java虛擬機(JVM)的內部機制,解密其工作原理。我們將介紹JVM的基本組成部分、類加載過程、內存管理和垃圾回收、即時編譯器等關鍵概…

Linux C++ 網絡編程基礎(2) : TCP多線程一個server對應多個client

目錄 一、linux posix線程相關函數介紹二、tcp server基礎版本三、tpc服務端多線程版本四、tpc客戶端代碼tcp編程時, 一個server可以對應多個client, server端用多線程可以實現. linux下多線程可以使用POSIX的線程函數, 下面給出服務端和客戶端的代碼. 一、linux posix線程相關…

RocketMQ 單機源碼部署 自定義配置文件和端口以及acl權限配置解析

思路 1、我們首先配置完 namesrv和broker和acl認證的配置文件,然后直接使用-c指定配置文件來啟動程序,就會非常明了,用戶名密碼要大于6,第一個用戶我測試著不知道為什么始終有最高權限,大家盡量不要吧第一個用戶給別人…

Redis輔助功能

一、Redis隊列 1.1、訂閱 subscribe ch1 ch2 1.2 publish:發布消息 publish channel message 1.3 unsubscribe: 退訂 channel 1.4 模式匹配 psubscribe ch* 模糊發布&#xff0c;訂閱&#xff0c;退訂&#xff0c; p* <channelName> 1.5 發布訂閱原理 訂閱某個頻道或…

05-基礎入門-系統及數據庫等

基礎入門-系統及數據庫等 一、操作系統層面1、識別操作系統常見方法2、簡要兩者區別及識別意義3、操作系統層面漏洞類型對應意義4、簡要操作系統層面漏洞影響范圍 二、數據庫層面1、識別數據庫類型常見方法2、數據庫類型區別及識別意義3、數據庫常見漏洞類型及攻擊4、簡要數據庫…

word在頁眉頁腳添加第幾頁

如果直接在頁腳添加數字&#xff0c;整個文檔的頁腳會是統一的。 這里我們需要的是每一頁按照頁碼排布的文檔&#xff0c;所以首先打開頁腳設置&#xff1a; 在插入內選擇頁腳 在彈出的下拉窗口中選擇空白即可 在菜單欄會多出“頁眉和頁腳”的選項卡&#xff0c;選擇其中的頁…

【CTFshow】——PWN簽到題

文章目錄 一【題目環境】二【題目類別】三【題目編號】四【題目描述】五【解題思路】六【解題過程】七【提交結果】 一【題目環境】 名稱版本Ubuntu系統22.04.1 LTSLinux內核5.15.0-43-generic 二【題目類別】 此題無特殊類別&#xff0c;為入門題 三【題目編號】 PWN簽到…

數字孿生:Three.js(WebGL)和虛擬引擎

一、先說總結 總的來說&#xff0c;選擇Three.js和WebGL還是虛擬引擎&#xff0c;主要取決于你的項目需求和優先級。 如果你的數字孿生項目主要是為了Web展示&#xff0c;需要快速加載&#xff0c;且對3D效果和物理模擬的需求不高&#xff0c;那么Three.js是一個非常好的選擇。…

gstreamer rtsp server 在ubuntu系統上的安裝

gstreamer rtsp server 在ubuntu系統上的安裝 本篇博客介紹gstreamer rtsp server在ubuntu系統上的安裝 python python直接使用pip安裝 sudo apt install gir1.2-gst-rtsp-server-1.0C 安裝 下載源碼 git clone https://github.com/GStreamer/gst-rtsp-server.git進入倉…

supOS APP開發者課程練習冊創建服務(命名:getPropertiesHistory)

創建服務&#xff08;命名&#xff1a;getPropertiesHistory&#xff09;,調用getPropertiesHistory()服務&#xff0c;獲取“催化裂化一車間”對象的“重質餾分油_進”最近5分鐘內的歷史值&#xff0c;每一分鐘取一個值&#xff0c;開始時間和結束時間需要調用時間格式化功能集…