<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          海思專家如何看待RDMA技術(shù)?

          共 5061字,需瀏覽 11分鐘

           ·

          2021-09-14 06:50



          作者介紹:華為海思軟件工程師Savir(知乎用戶名)。

          本想完全靠自己的語(yǔ)言完成這篇概述,然而開(kāi)篇并沒(méi)有想象當(dāng)中的好寫(xiě),看樣子從宏觀上概括一個(gè)技術(shù)比從微觀上探究細(xì)枝末節(jié)要困難不少。本文是以前人們對(duì)RDMA技術(shù)的介紹為主,加入了一些自己的理解。

          什么是DMA

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

          無(wú)DMA控制器時(shí)I/O設(shè)備和內(nèi)存間的數(shù)據(jù)路徑

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

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

          有DMA控制器時(shí)I/O設(shè)備和內(nèi)存間的數(shù)據(jù)路徑

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

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

          什么是RDMA

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

          為了能夠直觀的理解這一過(guò)程,請(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ù),通過(guò)網(wǎng)絡(luò)鏈路搬移到節(jié)點(diǎn)B的內(nèi)存中”,而這一過(guò)程無(wú)論是發(fā)端還是收段,都需要CPU的指揮和控制,包括網(wǎng)卡的控制,中斷的處理,報(bào)文的封裝和解析等等。

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

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

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

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

          同樣是把本端內(nèi)存中的一段數(shù)據(jù),復(fù)制到對(duì)端內(nèi)存中,在使用了RDMA技術(shù)時(shí),兩端的CPU幾乎不用參與數(shù)據(jù)傳輸過(guò)程(只參與控制面)。本端的網(wǎng)卡直接從內(nèi)存的用戶空間DMA拷貝數(shù)據(jù)到內(nèi)部存儲(chǔ)空間,然后硬件進(jìn)行各層報(bào)文的組裝后,通過(guò)物理鏈路發(fā)送到對(duì)端網(wǎng)卡。對(duì)端的RDMA網(wǎng)卡收到數(shù)據(jù)后,剝離各層報(bào)文頭和校驗(yàn)碼,通過(guò)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與普通開(kāi)發(fā)者和消費(fèi)者的距離較遠(yuǎn),目前主要是一些大型互聯(lián)網(wǎng)企業(yè)在部署和使用。

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

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

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

          關(guān)于0拷貝可以參考這篇文章:jianshu.com/p/e76e3580e

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

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

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

          通信領(lǐng)域兩大出場(chǎng)率最高的性能指標(biāo)就是“帶寬”和“時(shí)延”。簡(jiǎn)單的說(shuō),所謂帶寬指的是指單位時(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ā)揮其作用。

          協(xié)議

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

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

          Infiniband

          2000年由IBTA(InfiniBand Trade Association)提出的IB協(xié)議是當(dāng)之無(wú)愧的核心,其規(guī)定了一整套完整的鏈路層到傳輸層(非傳統(tǒng)OSI七層模型的傳輸層,而是位于其之上)規(guī)范,但是其無(wú)法兼容現(xiàn)有以太網(wǎng),除了需要支持IB的網(wǎng)卡之外,企業(yè)如果想部署的話還要重新購(gòu)買(mǎi)配套的交換設(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)門(mén)CP是面向連接的協(xié)議,而大量的TCP連接會(huì)耗費(fèi)很多的內(nèi)存資源,另外TCP復(fù)雜的流控等機(jī)制會(huì)導(dǎo)致性能問(wèn)題,所以iWARP相比基于UDP的RoCE v2來(lái)說(shuō)并沒(méi)有優(yōu)勢(shì)(IB的傳輸層也可以像TCP一樣保證可靠性),所以iWARP相比其他兩種協(xié)議的應(yīng)用不是很多。

          需要注意的是,上述幾種協(xié)議都需要專門(mén)的硬件(網(wǎng)卡)支持。這三種協(xié)議的關(guān)系大致如下圖所示:

          由于筆者在工作中只接觸過(guò)IB和RoCE,所以本專欄著重介紹IB和RoCE,不涉及iWARP的內(nèi)容。

          玩家

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

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

          IBTA

          成立于1999年,負(fù)責(zé)制定和維護(hù)Infiniband協(xié)議標(biāo)準(zhǔn)。IBTA獨(dú)立于各個(gè)廠商,通過(guò)贊助技術(shù)活動(dòng)和推動(dòng)資源共享來(lái)將整個(gè)行業(yè)整合在一起,并且通過(guò)線上交流、營(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

          成立于2004年的非盈利組織,負(fù)責(zé)開(kāi)發(fā)、測(cè)試、認(rèn)證、支持和分發(fā)獨(dú)立于廠商的開(kāi)源跨平臺(tái)infiniband協(xié)議棧,2010年開(kāi)始支持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é)開(kāi)發(fā)、維護(hù)和增強(qiáng)Infiniband協(xié)議標(biāo)準(zhǔn);OFA負(fù)責(zé)開(kāi)發(fā)和維護(hù)Infiniband協(xié)議和上層應(yīng)用API。

          開(kāi)發(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)行修改。

          郵件訂閱:vger.kernel.org/vger-li

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

          代碼倉(cāng):git.kernel.org/pub/scm/

          RDMA社區(qū)

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

          • rdma-core

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

          • perftest

          一個(gè)功能強(qiáng)大的用于測(cè)試RDMA性能的工具代碼倉(cāng):github.com/linux-rdma/

          UCX

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

          筆者對(duì)其并不了解太多,只知道業(yè)界有一些企業(yè)在基于UCX開(kāi)發(fā)應(yīng)用。代碼倉(cāng):github.com/openucx/ucx

          硬件廠商

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

          Mellanox:IB領(lǐng)域的領(lǐng)頭羊,協(xié)議標(biāo)準(zhǔn)制定、軟硬件開(kāi)發(fā)和生態(tài)建設(shè)都能看到Mellanox的身影,其在社區(qū)和標(biāo)準(zhǔn)制定上上擁有最大的話語(yǔ)權(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公司在做初步的開(kāi)發(fā)和測(cè)試。在數(shù)據(jù)中心和高性能計(jì)算場(chǎng)景下,RDMA代替?zhèn)鹘y(tǒng)網(wǎng)絡(luò)是大勢(shì)所趨。筆者對(duì)于市場(chǎng)接觸不多,所以并不能提供更詳細(xì)的應(yīng)用情況。



          轉(zhuǎn)載申明:轉(zhuǎn)載本號(hào)文章請(qǐng)注明作者來(lái)源,本號(hào)發(fā)布文章若存在版權(quán)等問(wèn)題,請(qǐng)留言聯(lián)系處理,謝謝。


          推薦閱讀

          更多架構(gòu)相關(guān)技術(shù)知識(shí)總結(jié)請(qǐng)參考“架構(gòu)師全店鋪技術(shù)資料打包”相關(guān)電子書(shū)(37本技術(shù)資料打包匯總詳情可通過(guò)“閱讀原文”獲取)。

          全店內(nèi)容持續(xù)更新,現(xiàn)下單“全店鋪技術(shù)資料打包(全)”,后續(xù)可享全店內(nèi)容更新“免費(fèi)”贈(zèng)閱,價(jià)格僅收198元(原總價(jià)350元)。



          溫馨提示:

          掃描二維碼關(guān)注公眾號(hào),點(diǎn)擊閱讀原文鏈接獲取架構(gòu)師技術(shù)全店資料打包匯總(全)電子書(shū)資料詳情。


          瀏覽 147
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色大片操逼 | 卡一卡二无码 | 欧美1234区黄片 | 内射美女网站 | 免费全黄A片免费播放 |