最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

一文讀懂|RDMA原理

2023-08-08 20:23 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

什么是DMA

DMA全稱為Direct Memory Access,即直接內(nèi)存訪問。意思是外設(shè)對(duì)內(nèi)存的讀寫過程可以不用CPU參與而直接進(jìn)行。我們先來看一下沒有DMA的時(shí)候:

假設(shè)I/O設(shè)備為一個(gè)普通網(wǎng)卡,為了從內(nèi)存拿到需要發(fā)送的數(shù)據(jù),然后組裝數(shù)據(jù)包發(fā)送到物理鏈路上,網(wǎng)卡需要通過總線告知CPU自己的數(shù)據(jù)請(qǐng)求。然后CPU將會(huì)把內(nèi)存緩沖區(qū)中的數(shù)據(jù)復(fù)制到自己內(nèi)部的寄存器中,再復(fù)制到I/O設(shè)備的存儲(chǔ)空間中。如果數(shù)據(jù)量比較大,那么很長(zhǎng)一段時(shí)間內(nèi)CPU都會(huì)忙于搬移數(shù)據(jù),而無法投入到其他工作中去。

CPU的最主要工作是計(jì)算,而不是進(jìn)行數(shù)據(jù)復(fù)制,這種工作屬于白白浪費(fèi)了它的計(jì)算能力。為了給CPU“減負(fù)”,讓它投入到更有意義的工作中去,后來人們?cè)O(shè)計(jì)了DMA機(jī)制:

可以看到總線上又掛了一個(gè)DMA控制器,它是專門用來讀寫內(nèi)存的設(shè)備。有了它以后,當(dāng)我們的網(wǎng)卡想要從內(nèi)存中拷貝數(shù)據(jù)時(shí),除了一些必要的控制命令外,整個(gè)數(shù)據(jù)復(fù)制過程都是由DMA控制器完成的。過程跟CPU復(fù)制是一樣的,只不過這次是把內(nèi)存中的數(shù)據(jù)通過總線復(fù)制到DMA控制器內(nèi)部的寄存器中,再復(fù)制到I/O設(shè)備的存儲(chǔ)空間中。CPU除了關(guān)注一下這個(gè)過程的開始和結(jié)束以外,其他時(shí)間可以去做其他事情。

DMA控制器一般是和I/O設(shè)備在一起的,也就是說一塊網(wǎng)卡中既有負(fù)責(zé)數(shù)據(jù)收發(fā)的模塊,也有DMA模塊。

什么是RDMA

RDMA( Remote Direct Memory Access )意為遠(yuǎn)程直接地址訪問,通過RDMA,本端節(jié)點(diǎn)可以“直接”訪問遠(yuǎn)端節(jié)點(diǎn)的內(nèi)存。所謂直接,指的是可以像訪問本地內(nèi)存一樣,繞過傳統(tǒng)以太網(wǎng)復(fù)雜的TCP/IP網(wǎng)絡(luò)協(xié)議棧讀寫遠(yuǎn)端內(nèi)存,而這個(gè)過程對(duì)端是不感知的,而且這個(gè)讀寫過程的大部分工作是由硬件而不是軟件完成的。

為了能夠直觀的理解這一過程,請(qǐng)看下面兩個(gè)圖(圖中箭頭僅做示意,不表示實(shí)際邏輯或物理關(guān)系):

傳統(tǒng)網(wǎng)絡(luò)中,“節(jié)點(diǎn)A給節(jié)點(diǎn)B發(fā)消息”實(shí)際上做的是“把節(jié)點(diǎn)A內(nèi)存中的一段數(shù)據(jù),通過網(wǎng)絡(luò)鏈路搬移到節(jié)點(diǎn)B的內(nèi)存中”,而這一過程無論是發(fā)端還是收段,都需要CPU的指揮和控制,包括網(wǎng)卡的控制,中斷的處理,報(bào)文的封裝和解析等等。

上圖中左邊的節(jié)點(diǎn)在內(nèi)存用戶空間中的數(shù)據(jù),需要經(jīng)過CPU拷貝到內(nèi)核空間的緩沖區(qū)中,然后才可以被網(wǎng)卡訪問,這期間數(shù)據(jù)會(huì)經(jīng)過軟件實(shí)現(xiàn)的TCP/IP協(xié)議棧,加上各層頭部和校驗(yàn)碼,比如TCP頭,IP頭等。網(wǎng)卡通過DMA拷貝內(nèi)核中的數(shù)據(jù)到網(wǎng)卡內(nèi)部的緩沖區(qū)中,進(jìn)行處理后通過物理鏈路發(fā)送給對(duì)端。

對(duì)端收到數(shù)據(jù)后,會(huì)進(jìn)行相反的過程:從網(wǎng)卡內(nèi)部存儲(chǔ)空間,將數(shù)據(jù)通過DMA拷貝到內(nèi)存內(nèi)核空間的緩沖區(qū)中,然后CPU會(huì)通過TCP/IP協(xié)議棧對(duì)其進(jìn)行解析,將數(shù)據(jù)取出來拷貝到用戶空間中。

可以看到,即使有了DMA技術(shù),上述過程還是對(duì)CPU有較強(qiáng)的依賴。

而使用了RDMA技術(shù)之后,這一過程可以簡(jiǎn)單的表示成下面的示意圖:

同樣是把本端內(nèi)存中的一段數(shù)據(jù),復(fù)制到對(duì)端內(nèi)存中,在使用了RDMA技術(shù)時(shí),兩端的CPU幾乎不用參與數(shù)據(jù)傳輸過程(只參與控制面)。本端的網(wǎng)卡直接從內(nèi)存的用戶空間DMA拷貝數(shù)據(jù)到內(nèi)部存儲(chǔ)空間,然后硬件進(jìn)行各層報(bào)文的組裝后,通過物理鏈路發(fā)送到對(duì)端網(wǎng)卡。對(duì)端的RDMA網(wǎng)卡收到數(shù)據(jù)后,剝離各層報(bào)文頭和校驗(yàn)碼,通過DMA將數(shù)據(jù)直接拷貝到用戶空間內(nèi)存中。

RDMA的優(yōu)勢(shì)

RDMA主要應(yīng)用在高性能計(jì)算(HPC)領(lǐng)域和大型數(shù)據(jù)中心當(dāng)中,并且設(shè)備相對(duì)普通以太網(wǎng)卡要昂貴不少(比如Mellanox公司的Connext-X 5 100Gb PCIe網(wǎng)卡市價(jià)在4000元以上)。由于使用場(chǎng)景和價(jià)格的原因,RDMA與普通開發(fā)者和消費(fèi)者的距離較遠(yuǎn),目前主要是一些大型互聯(lián)網(wǎng)企業(yè)在部署和使用。

RDMA技術(shù)為什么可以應(yīng)用在上述場(chǎng)景中呢?這就涉及到它的以下幾個(gè)特點(diǎn):

  • 0拷貝:指的是不需要在用戶空間和內(nèi)核空間中來回復(fù)制數(shù)據(jù)。

由于Linux等操作系統(tǒng)將內(nèi)存劃分為用戶空間和內(nèi)核空間,在傳統(tǒng)的Socket通信流程中CPU需要多次把數(shù)據(jù)在內(nèi)存中來回拷貝。而通過RDMA技術(shù),我們可以直接訪問遠(yuǎn)端已經(jīng)注冊(cè)的內(nèi)存區(qū)域。356

  • 內(nèi)核Bypass:指的是IO(數(shù)據(jù))流程可以繞過內(nèi)核,即在用戶層就可以把數(shù)據(jù)準(zhǔn)備好并通知硬件準(zhǔn)備發(fā)送和接收。避免了系統(tǒng)調(diào)用和上下文切換的開銷。

上圖(原圖[1])可以很好的解釋“0拷貝”和“內(nèi)核Bypass”的含義。上下兩部分分別是基于Socket的和基于RDMA的一次收-發(fā)流程,左右分別為兩個(gè)節(jié)點(diǎn)??梢悦黠@的看到Socket流程中在軟件中多了一次拷貝動(dòng)作。而RDMA繞過了內(nèi)核同時(shí)也減少了內(nèi)存拷貝,數(shù)據(jù)可以直接在用戶層和硬件間傳遞。

  • CPU卸載:指的是可以在遠(yuǎn)端節(jié)點(diǎn)CPU不參與通信的情況下(當(dāng)然要持有訪問遠(yuǎn)端某段內(nèi)存的“鑰匙”才行)對(duì)內(nèi)存進(jìn)行讀寫,這實(shí)際上是把報(bào)文封裝和解析放到硬件中做了。而傳統(tǒng)的以太網(wǎng)通信,雙方CPU都必須參與各層報(bào)文的解析,如果數(shù)據(jù)量大且交互頻繁,對(duì)CPU來講將是一筆不小的開銷,而這些被占用的CPU計(jì)算資源本可以做一些更有價(jià)值的工作。

通信領(lǐng)域兩大出場(chǎng)率最高的性能指標(biāo)就是“帶寬”和“時(shí)延”。簡(jiǎn)單的說,所謂帶寬指的是指單位時(shí)間內(nèi)能夠傳輸?shù)臄?shù)據(jù)量,而時(shí)延指的是數(shù)據(jù)從本端發(fā)出到被對(duì)端接收所耗費(fèi)的時(shí)間。因?yàn)樯鲜鰩讉€(gè)特點(diǎn),相比于傳統(tǒng)以太網(wǎng),RDMA技術(shù)同時(shí)做到了更高帶寬和更低時(shí)延,所以其在帶寬敏感的場(chǎng)景——比如海量數(shù)據(jù)的交互,時(shí)延敏感——比如多個(gè)計(jì)算節(jié)點(diǎn)間的數(shù)據(jù)同步的場(chǎng)景下得以發(fā)揮其作用。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)??


協(xié)議

RDMA本身指的是一種技術(shù),具體協(xié)議層面,包含Infiniband(IB),RDMA over Converged Ethernet(RoCE)和internet Wide Area RDMA Protocol(iWARP)。三種協(xié)議都符合RDMA標(biāo)準(zhǔn),使用相同的上層接口,在不同層次上有一些差別。

上圖[2]對(duì)于幾種常見的RDMA技術(shù)的協(xié)議層次做了非常清晰的對(duì)比,

Infiniband

2000年由IBTA(InfiniBand Trade Association)提出的IB協(xié)議是當(dāng)之無愧的核心,其規(guī)定了一整套完整的鏈路層到傳輸層(非傳統(tǒng)OSI七層模型的傳輸層,而是位于其之上)規(guī)范,但是其無法兼容現(xiàn)有以太網(wǎng),除了需要支持IB的網(wǎng)卡之外,企業(yè)如果想部署的話還要重新購買配套的交換設(shè)備。

RoCE

RoCE從英文全稱就可以看出它是基于以太網(wǎng)鏈路層的協(xié)議,v1版本網(wǎng)絡(luò)層仍然使用了IB規(guī)范,而v2使用了UDP+IP作為網(wǎng)絡(luò)層,使得數(shù)據(jù)包也可以被路由。RoCE可以被認(rèn)為是IB的“低成本解決方案”,將IB的報(bào)文封裝成以太網(wǎng)包進(jìn)行收發(fā)。由于RoCE v2可以使用以太網(wǎng)的交換設(shè)備,所以現(xiàn)在在企業(yè)中應(yīng)用也比較多,但是相同場(chǎng)景下相比IB性能要有一些損失。

iWARP

iWARP協(xié)議是IETF基于TCP提出的,因?yàn)門CP是面向連接的可靠協(xié)議,這使得iWARP在面對(duì)有損網(wǎng)絡(luò)場(chǎng)景(可以理解為網(wǎng)絡(luò)環(huán)境中可能經(jīng)常出現(xiàn)丟包)時(shí)相比于RoCE v2和IB具有更好的可靠性,在大規(guī)模組網(wǎng)時(shí)也有明顯的優(yōu)勢(shì)。但是大量的TCP連接會(huì)耗費(fèi)很多的內(nèi)存資源,另外TCP復(fù)雜的流控等機(jī)制會(huì)導(dǎo)致性能問題,所以從性能上看iWARP要比UDP的RoCE v2和IB差。

需要注意的是,雖然有軟件實(shí)現(xiàn)的RoCE和iWARP協(xié)議,但是真正商用時(shí)上述幾種協(xié)議都需要專門的硬件(網(wǎng)卡)支持。

iWARP本身不是由Infiniband直接發(fā)展而來的,但是它繼承了一些Infiniband技術(shù)的設(shè)計(jì)思想。這三種協(xié)議的關(guān)系如下圖所示:

玩家

標(biāo)準(zhǔn)/生態(tài)組織

提到IB協(xié)議,就不得不提到兩大組織——IBTA和OFA。

IBTA[3]

成立于1999年,負(fù)責(zé)制定和維護(hù)Infiniband協(xié)議標(biāo)準(zhǔn)。IBTA獨(dú)立于各個(gè)廠商,通過贊助技術(shù)活動(dòng)和推動(dòng)資源共享來將整個(gè)行業(yè)整合在一起,并且通過線上交流、營(yíng)銷和線下活動(dòng)等方式積極推廣IB和RoCE。

IBTA會(huì)對(duì)商用的IB和RoCE設(shè)備進(jìn)行協(xié)議標(biāo)準(zhǔn)符合性和互操作性測(cè)試及認(rèn)證,由很多大型的IT廠商組成的委員會(huì)領(lǐng)導(dǎo),其主要成員包括博通,HPE,IBM,英特爾,Mellanox和微軟等,華為也是IBTA的會(huì)員。

OFA[4]

成立于2004年的非盈利組織,負(fù)責(zé)開發(fā)、測(cè)試、認(rèn)證、支持和分發(fā)獨(dú)立于廠商的開源跨平臺(tái)infiniband協(xié)議棧,2010年開始支持RoCE。其對(duì)用于支撐RDMA/Kernel bypass應(yīng)用的OFED(OpenFabrics Enterprise Distribution)軟件棧負(fù)責(zé),保證其與主流軟硬件的兼容性和易用性。OFED軟件棧包括驅(qū)動(dòng)、內(nèi)核、中間件和API。

上述兩個(gè)組織是配合關(guān)系,IBTA主要負(fù)責(zé)開發(fā)、維護(hù)和增強(qiáng)Infiniband協(xié)議標(biāo)準(zhǔn);OFA負(fù)責(zé)開發(fā)和維護(hù)Infiniband協(xié)議和上層應(yīng)用API。

開發(fā)社區(qū)

Linux社區(qū)

Linux內(nèi)核的RDMA子系統(tǒng)還算比較活躍,經(jīng)常會(huì)討論一些協(xié)議細(xì)節(jié),對(duì)框架的修改比較頻繁,另外包括華為和Mellanox在內(nèi)的一些廠商也會(huì)經(jīng)常對(duì)驅(qū)動(dòng)代碼進(jìn)行修改。

郵件訂閱:http://vger.kernel.org/vger-lists.html#linux-rdma

代碼位于內(nèi)核drivers/infiniband/目錄下,包括框架核心代碼和各廠商的驅(qū)動(dòng)代碼。

代碼倉:https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git/

RDMA社區(qū)

對(duì)于上層用戶,IB提供了一套與Socket套接字類似的接口——libibverbs,前文所述三種協(xié)議都可以使用。參考著協(xié)議、API文檔和示例程序很容易就可以寫一個(gè)Demo出來。本專欄中的RDMA社區(qū)專指其用戶態(tài)社區(qū),在github上其倉庫的名字為linux-rdma。

主要包含兩個(gè)子倉庫:

  • rdma-core

用戶態(tài)核心代碼,API,文檔以及各個(gè)廠商的用戶態(tài)驅(qū)動(dòng)。

  • perftest

一個(gè)功能強(qiáng)大的用于測(cè)試RDMA性能的工具。

代碼倉:https://github.com/linux-rdma/

UCX[5]

UCX是一個(gè)建立在RDMA等技術(shù)之上的用于數(shù)據(jù)處理和高性能計(jì)算的通信框架,RDMA是其底層核心之一。我們可以將其理解為是位于應(yīng)用和RDMA API之間的中間件,向上層用戶又封裝了一層更易開發(fā)的接口。



筆者對(duì)其并不了解太多,只知道業(yè)界有一些企業(yè)在基于UCX開發(fā)應(yīng)用。

代碼倉:https://github.com/openucx/ucx

硬件廠商

設(shè)計(jì)和生產(chǎn)IB相關(guān)硬件的廠商有不少,包括Mellanox、華為、收購了Qlogic的IB技術(shù)的Intel,博通、Marvell,富士通等等,這里就不逐個(gè)展開了,僅簡(jiǎn)單提一下Mellanox和華為。

  • Mellanox

IB領(lǐng)域的領(lǐng)頭羊,協(xié)議標(biāo)準(zhǔn)制定、軟硬件開發(fā)和生態(tài)建設(shè)都能看到Mellanox的身影,其在社區(qū)和標(biāo)準(zhǔn)制定上上擁有最大的話語權(quán)。目前最新一代的網(wǎng)卡是支持200Gb/s的ConnextX-6系列。

  • 華為

去年初推出的鯤鵬920芯片已經(jīng)支持100Gb/s的RoCE協(xié)議,技術(shù)上在國(guó)內(nèi)處于領(lǐng)先地位。但是軟硬件和影響力方面距離Mellanox還有比較長(zhǎng)的路要走,相信華為能夠早日趕上老大哥的步伐。

用戶

微軟、IBM和國(guó)內(nèi)的阿里、京東都正在使用RDMA,另外還有很多大型IT公司在做初步的開發(fā)和測(cè)試。在數(shù)據(jù)中心和高性能計(jì)算場(chǎng)景下,RDMA代替?zhèn)鹘y(tǒng)網(wǎng)絡(luò)是大勢(shì)所趨。筆者對(duì)于市場(chǎng)接觸不多,所以并不能提供更詳細(xì)的應(yīng)用情況。



原文作者:Savir



一文讀懂|RDMA原理的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
新疆| 漳州市| 蕉岭县| 滕州市| 武汉市| 崇明县| 石屏县| 玛曲县| 滨州市| 卢氏县| 永州市| 车险| 当阳市| 道真| 嘉兴市| 明水县| 清镇市| 武冈市| 罗江县| 且末县| 文化| 昌图县| 天镇县| 江陵县| 新源县| 常熟市| 读书| 曲松县| 海门市| 营山县| 林州市| 华蓥市| 泸水县| 十堰市| 许昌县| 台北市| 罗定市| 招远市| 磐石市| 滦南县| 吐鲁番市|