亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原(yuan)創

RDMA基本工作原理簡介

2023-03-30 01:51:01
627
0

1、技術背景:

傳(chuan)(chuan)統(tong)的TCP/IP通信方式在兩臺PC之間的傳(chuan)(chuan)輸過程大概是(shi)這樣的:

  • 發送端需要將數據從用戶空間復制到內核空間的Socket Buffer
  • 發送端在內核空間中添加數據包頭,進行數據封裝
  • 數據從內核空間的Socket Buffer復制到NIC Buffer進行網絡傳輸
  • 端接收到從遠端發送的數據包后,要將數據包從NIC Buffer中復制到內核空間的Socket Buffer
  • 經過一系列網絡協議進行數據包的解析工作,將解析后的數據從內核空間的Socket Buffer復制到用戶空間
  • 進行系統上下文切換,用戶應用程序才被調用

多次上(shang)下(xia)文切(qie)換,內存(cun)拷(kao)貝需(xu)要CPU介入,導(dao)致處理延時(shi)大,消耗CPU。同時(shi)傳統(tong)內存(cun)訪(fang)問需(xu)要通(tong)(tong)過(guo)CPU進行(xing)數(shu)據(ju)(ju)copy來移(yi)動(dong)數(shu)據(ju)(ju),通(tong)(tong)過(guo)CPU將內存(cun)中的(de)(de)是數(shu)據(ju)(ju)進行(xing)搬(ban)運。在(zai)DMA模式下(xia)中,計(ji)算機主板(ban)上(shang)的(de)(de)設備通(tong)(tong)過(guo)DMA直接把(ba)數(shu)據(ju)(ju)發送到目標(biao)內存(cun)中去,數(shu)據(ju)(ju)搬(ban)運不需(xu)要CPU的(de)(de)參與。如下(xia)圖(tu)所(suo)示,圖(tu)中紅色部(bu)分(fen)(fen)是CPU參與數(shu)據(ju)(ju)搬(ban)運,綠色部(bu)分(fen)(fen)是DMA搬(ban)運數(shu)據(ju)(ju)。

2、RDMA概念

RDMA( Remote Direct Memory Access )意為(wei)遠(yuan)程直(zhi)接地址訪問(wen),通過RDMA,本(ben)端節(jie)點(dian)可(ke)以(yi)“直(zhi)接”訪問(wen)遠(yuan)端節(jie)點(dian)的(de)內存(cun)。所謂直(zhi)接,指的(de)是(shi)可(ke)以(yi)像(xiang)訪問(wen)本(ben)地內存(cun)一樣,繞過傳統以(yi)太網(wang)復雜的(de)TCP/IP網(wang)絡協(xie)議棧讀寫遠(yuan)端內存(cun),而(er)這(zhe)個(ge)過程對端是(shi)不感知的(de),而(er)且這(zhe)個(ge)讀寫過程的(de)大部分工(gong)作是(shi)由(you)硬(ying)件而(er)不是(shi)軟件完成(cheng)的(de)。如下圖(tu)所示:

3、與傳統通信對比的優勢:

如上圖(tu)所示:可(ke)以(yi)看(kan)到傳統的(de)方(fang)法需要經(jing)過(guo)用戶(hu)態->內(nei)核->硬(ying)件。而RDMA直(zhi)接是(shi)只(zhi)經(jing)過(guo)用戶(hu)態,數據(ju)的(de)存取是(shi)通過(guo)RDMA硬(ying)件直(zhi)接操(cao)作內(nei)存的(de)。

使用RDMA的優勢如(ru)下:

  • 零拷貝:用戶的數據能夠被直接發送到緩沖區或者能夠直接從緩沖區里接收,而不需要被多次拷貝。
  • 內核bypass:用戶可以直接在用戶態執行數據傳輸,不需要在內核態與用戶態之間做上下文切換;
  • CPU卸載:用戶可以訪問遠程主機內存而不消耗遠程主機中的任何CPU。可以在遠程主機不知情的情況下對其進行讀寫操作。

4、支持RDMA的網絡協議

目前支持RDMA的網絡協議(yi)主要有三種:

  • InfiniBand(IB)
  • iWARP(RDMA over TCP/IP)
  • RoCE(RDMA over Converged Ethernet)

上圖對于幾種(zhong)常見(jian)的(de)RDMA技術(shu)的(de)協(xie)議層次做了非常清(qing)晰的(de)對比,

4.1、Infiniband

由IBTA(InfiniBand Trade Association)提出(chu)的IB協議,RDMA在(zai)設計的時候(hou)重新定(ding)義了(le)物理(li)鏈路層、網(wang)絡(luo)層、傳輸(shu)層,所以要使用專用的IB交(jiao)換機和網(wang)卡做(zuo)物理(li)隔離的專網(wang),成本較大,但(dan)性能表現(xian)最(zui)優。

4.2、RoCE

RoCEv2是運行在以太網(wang)之上的RDMA,RoCEV1基(ji)于以太網(wang)數據鏈(lian)路層協議(yi),僅可在局域網(wang)的單個廣播域內(nei)傳輸。RoCEv2基(ji)于UDP協議(yi),支持路由協議(yi),傳輸距(ju)離更(geng)遠。RoCEv2需要支持“無損以太網(wang)”以達到類似于InfiniBand的性(xing)能特(te)征,一般通過無損以太網(wang)的優先流量控制(PFC)配置保證(zheng)擁塞時(shi)不丟包,同時(shi)使用(yong)ECN進一步減緩擁塞。

4.3、iWARP

iWARP將(jiang)InfiniBand移植到TCP/IP協議(yi)(yi)棧(zhan),使主流的(de)(de)以(yi)太網支(zhi)持RDMA,支(zhi)持在(zai)標準的(de)(de)以(yi)太網交換(huan)機(ji)上運行RDMA,但缺點(dian)在(zai)于TCP協議(yi)(yi)開銷較(jiao)大(da),且算法復(fu)雜,失(shi)去了大(da)部分的(de)(de)RDMA性能優勢。

綜上:雖然有軟件實現(xian)的RoCE和iWARP協議(yi),但是真(zhen)正商用時上述幾種(zhong)協議(yi)都需要專門的硬件(網卡)支持。

5、RDMA 基本元素:

5.1、隊列(Queue)
  • RDMA一共支持三種隊列:

(1)發送(song)隊列Send Queue(SQ)和(he)接收隊列Recv Queue(RQ),SQ和(he)RQ通常成(cheng)對創建(jian),被(bei)稱為Queue Pairs(QP)。

(2)完成(cheng)隊列Completion Queue(CQ)。

  • 隊列中的元素:

(1)SQ和(he)RQ中元素(su)的(de)叫WQE(Work Queue Element,工(gong)作隊列元素(su)),因(yin)此SQ和(he)RQ也被統稱為WQ。

(2)CQ中的元(yuan)素叫(jiao)CQE(Completion Queue Elemen)。

5.2、WR和WC:

WR全稱(cheng)(cheng)Work Request,意為工作請求;WC全稱(cheng)(cheng)Work Completion,意為工作完成(cheng)。這兩(liang)者其實是WQE和CQE在用戶層(ceng)的“映射”。因為用戶是通(tong)過調(diao)用協(xie)議棧接口來完成(cheng)RDMA通(tong)信(xin)的,WQE和CQE本身(shen)并不對用戶可見,是驅動中(zhong)的概(gai)念。用戶真正通(tong)過Verbs API下發的是WR,收到的是WC。

5.3、Memory Registration(MR) | 內存注冊

MR全(quan)稱(cheng)為Memory Region,指的是由(you)RDMA軟件層在內存(cun)(cun)中規劃出的一片區域,用(yong)于(yu)存(cun)(cun)放收發的數據。IB協議中,用(yong)戶在申請完用(yong)于(yu)存(cun)(cun)放數據的內存(cun)(cun)區域之后(hou),都需(xu)要通過(guo)調用(yong)IB框架提供的API注冊MR,才能讓RDMA網卡(ka)訪問(wen)這片內存(cun)(cun)區域。

注冊MR主要解決三(san)個問(wen)題:(1)實現虛擬(ni)地址與物(wu)理地址轉換(huan),(2)避免(mian)進程(cheng)換(huan)頁導致數據發生變(bian)化;(3)控制本端(duan)和對端(duan)訪(fang)問(wen)內存的權(quan)限。

6、RDMA基本操作

6.1、概述:

以生(sheng)產者-消費者角度(du)簡(jian)單概述如下:

(1)HOST提交工(gong)作請求WR,將WR放到(post)工(gong)作隊列WQ(SQ和(he)RQ)。此時SQ和(he)RQ中就有WQE(WR),等待RDMA硬件消費;

(2)RDMA硬件從SQ和(he)RQ中(zhong)消費WQE(WR);

(3)RDMA硬件消(xiao)費(fei)完成后(hou),產生CQE(WC),將CQE放入CQ隊列中,等待HOST消(xiao)費(fei)。

(4)HOST從(cong)CQ中消費(fei)WC(CQE)。

6.2、RDMA SEND/RECV操作:

SEND/RECV是(shi)雙邊(bian)操作,即(ji)需(xu)要(yao)通信雙方的參與(yu),并且(qie)RECV要(yao)先于(yu)SEND執行(xing),這(zhe)樣對方才能發送數據(ju),當然如果(guo)對方不需(xu)要(yao)發送數據(ju),可以不執行(xing)RECEIVE操作。如下圖所示(圖中的順(shun)序不一定(ding)是(shi)正(zheng)確(que)的,處理邏輯由硬件(jian)決定(ding)的):

(1)service host以(yi)WR(WQE)的形式下發一次RECV任務(wu)到(dao)RQ。

(2)client host以WR(WQE)的(de)形(xing)式下發一(yi)次SEND任務到SQ。

(3)client host的RDMA硬件(具有RDMA功能的硬件)從SQ中消費WQE。

(4)client host的RDMA硬件從內存中拿到(dao)待發送數據(ju),組裝(zhuang)數據(ju)包。

(5)client host的網卡(ka)將數據包通過物理鏈路發送給service網卡(ka)。

(6)service host收到數據,進行(xing)校驗(yan)后回復(fu)ACK報文給client。

(7)service host的RDMA硬件從RQ中消費WQE。

(8)service host的(de)RDMA硬件將(jiang)數(shu)據放到WQE中指(zhi)定的(de)位(wei)置。

(9)service host的RDMA硬(ying)件(jian)生成CQE,放置(zhi)到CQ中。

(10)service host消費CQE。

(11)client host的RDMA硬件收到ACK后(hou),生成CQE,放置(zhi)到CQ中(zhong)。

(12)client host消費CQE。

6.3、RDMA WRITE操作:

RDMA WRITE是(shi)(shi)單邊操作,是(shi)(shi)本端(duan)主動寫入(ru)(ru)遠端(duan)內(nei)存(cun)的行為,除了準備階(jie)段(duan)(建鏈、交換內(nei)存(cun)信(xin)息),遠端(duan)CPU不需要參與,也不感知何(he)時有數據(ju)寫入(ru)(ru)、數據(ju)在何(he)時接收完畢(bi)。如(ru)下圖所示:

(1)client host以WR(WQE)的形式下(xia)發一次WRITE任務。

(2)client host的RDMA硬件(jian)從(cong)SQ中取出WQE,解析信息。

(3)client host的RDMA硬件根據(ju)WQE中的虛擬地(di)址(zhi),轉換(huan)得到物理(li)地(di)址(zhi),然后(hou)從內存中拿(na)到待發送數據(ju),組裝(zhuang)數據(ju)包。

(4)client host網卡(ka)將(jiang)數據(ju)包通過物理(li)鏈(lian)路發送給service網卡(ka)。

(5)service host的RDMA硬件收到(dao)數(shu)據(ju)包,解(jie)析(xi)目的虛(xu)擬(ni)地址,轉換成本地物(wu)理地址,解(jie)析(xi)數(shu)據(ju),將數(shu)據(ju)放置到(dao)指定內存區域。

(6)service host回復(fu)ACK報文給client。

(7)client host的RDMA硬件收到ACK后,生成CQE,放置到CQ中。

(8)client host消費CQE。

6.4、RDMA READ操作:

RDMA READ也是單(dan)邊操作,與WRITE是相(xiang)反的(de)(de)過程(cheng),是本(ben)端主動讀取遠端內(nei)存的(de)(de)行為。同WRITE一樣,遠端CPU不需要參與,也不感(gan)知數據(ju)在內(nei)存中被讀取的(de)(de)過程(cheng)。如下(xia)圖(tu)所示:

(1)client host以(yi)WR(WQE)的形式下(xia)發一(yi)次READ任務(wu)。

(2)client host的(de)RDMA硬件從(cong)SQ中取出WQE,解析信息。

(3)client host的網卡將READ請(qing)求(qiu)包通(tong)過物(wu)理鏈路發送給service。

(4)service host收(shou)到(dao)數據包,解析(xi)目的(de)虛擬地址,轉換成本(ben)地物理地址,解析(xi)數據,從指定內存(cun)區域取出數據。

(5)service host的RDMA硬(ying)件(jian)將數據(ju)組裝成(cheng)回復數據(ju)包發(fa)送(song)到(dao)物理鏈路。

(6)client host的(de)RDMA硬件收到(dao)數據包,解析提取出(chu)數據后放到(dao)READ WQE指定的(de)內存區(qu)域中。

(7)client host的RDMA硬件生(sheng)成CQE,放置到(dao)CQ中。

(8)client host消費CQE。

7、RDMA編程接口之IB Verbs API:

7.1一些基本信息了解:
  • RDMA Core 指開源RDMA用戶態軟件協議棧,包含用戶態框架、各廠商用戶態驅動、API幫助手冊以及開發自測試工具等。rdma-core在github上維護,我們的用戶態Verbs API實際上就是它實現的。

路徑://github.com/linux-rdma/rdma-core 

  • kernel RDMA subsystem指開源的Linux內核中的RDMA子系統,包含RDMA內核框架及各廠商的驅動。RDMA子系統跟隨Linux維護,是內核的的一部分。一方面提供內核態的Verbs API,一方面負責對接用戶態的接口。

驅動路徑:kernel/drivers/infiniband; 頭文件(jian)kernel/include/rdma;和 kernel/include/uapi/rdma。

  • OFED:全稱為OpenFabrics Enterprise Distribution,是一個開源軟件包集合,其中包含內核框架和驅動、用戶框架和驅動、以及各種中間件、測試工具和API文檔。

開源OFED由OFA組(zu)織負責開發、發布和(he)維護,它會定期從rdma-core和(he)內核的 RDMA子系統(tong)取軟(ruan)件版(ban)本(ben),并對各商(shang)用OS發行(xing)版(ban)進行(xing)適配。除了協議(yi)棧和(he)驅動(dong)外, 還(huan)包含了perftest等測試(shi)工具(ju)。

7.2 什么是Verbs API

Verbs API是一(yi)組用(yong)于使用(yong)RDMA服務的(de)(de)最(zui)基本(ben)的(de)(de)軟件接口,也就(jiu)是說業界的(de)(de)RDMA應用(yong),向(xiang)用(yong)戶提供了有關RDMA的(de)(de)一(yi)切功(gong)能,典(dian)型的(de)(de)包括:注冊MR、創建QP、Post Send、Post send、Poll CQ等等。

對于Linux系統來說,Verbs的功(gong)能由rdma-core和內核中(zhong)的RDMA子系統提供,分為用戶態(tai)Verbs接(jie)口和內核態(tai)Verbs接(jie)口,分別用于用戶態(tai)和內核態(tai)的RDMA應用。

組件架構如下:

0條評論
0 / 1000
z****n
10文(wen)章數
1粉絲數
z****n
10 文章 | 1 粉絲(si)
原創

RDMA基本工作原理簡介

2023-03-30 01:51:01
627
0

1、技術背景:

傳統的(de)TCP/IP通信方(fang)式在兩臺PC之間的(de)傳輸過(guo)程大概(gai)是這樣的(de):

  • 發送端需要將數據從用戶空間復制到內核空間的Socket Buffer
  • 發送端在內核空間中添加數據包頭,進行數據封裝
  • 數據從內核空間的Socket Buffer復制到NIC Buffer進行網絡傳輸
  • 端接收到從遠端發送的數據包后,要將數據包從NIC Buffer中復制到內核空間的Socket Buffer
  • 經過一系列網絡協議進行數據包的解析工作,將解析后的數據從內核空間的Socket Buffer復制到用戶空間
  • 進行系統上下文切換,用戶應用程序才被調用

多次上下(xia)文切換,內存(cun)拷貝需(xu)要CPU介入,導致處理(li)延時(shi)大,消耗CPU。同時(shi)傳統內存(cun)訪問(wen)需(xu)要通(tong)(tong)過CPU進行(xing)數(shu)據copy來(lai)移動數(shu)據,通(tong)(tong)過CPU將內存(cun)中的(de)(de)是數(shu)據進行(xing)搬(ban)運(yun)。在DMA模式下(xia)中,計算機主板上的(de)(de)設(she)備通(tong)(tong)過DMA直接把數(shu)據發送(song)到目標內存(cun)中去,數(shu)據搬(ban)運(yun)不需(xu)要CPU的(de)(de)參與。如下(xia)圖所示(shi),圖中紅色(se)部分(fen)是CPU參與數(shu)據搬(ban)運(yun),綠色(se)部分(fen)是DMA搬(ban)運(yun)數(shu)據。

2、RDMA概念

RDMA( Remote Direct Memory Access )意為遠(yuan)程(cheng)直接(jie)地址訪問(wen)(wen),通過(guo)RDMA,本(ben)端節(jie)點可以“直接(jie)”訪問(wen)(wen)遠(yuan)端節(jie)點的(de)內存。所謂直接(jie),指的(de)是(shi)可以像訪問(wen)(wen)本(ben)地內存一樣,繞(rao)過(guo)傳統以太網復雜(za)的(de)TCP/IP網絡協議棧讀寫遠(yuan)端內存,而(er)這(zhe)個(ge)過(guo)程(cheng)對(dui)端是(shi)不(bu)(bu)感知的(de),而(er)且這(zhe)個(ge)讀寫過(guo)程(cheng)的(de)大部分工作(zuo)是(shi)由硬(ying)件而(er)不(bu)(bu)是(shi)軟件完成的(de)。如下圖所示:

3、與傳統通信對比的優勢:

如上圖(tu)所示:可以看到傳(chuan)統的方法(fa)需要(yao)經過用戶態->內核->硬(ying)件。而RDMA直接是只經過用戶態,數據的存取是通過RDMA硬(ying)件直接操作內存的。

使用RDMA的優勢如下:

  • 零拷貝:用戶的數據能夠被直接發送到緩沖區或者能夠直接從緩沖區里接收,而不需要被多次拷貝。
  • 內核bypass:用戶可以直接在用戶態執行數據傳輸,不需要在內核態與用戶態之間做上下文切換;
  • CPU卸載:用戶可以訪問遠程主機內存而不消耗遠程主機中的任何CPU。可以在遠程主機不知情的情況下對其進行讀寫操作。

4、支持RDMA的網絡協議

目前支持(chi)RDMA的(de)網絡協議主要有三種:

  • InfiniBand(IB)
  • iWARP(RDMA over TCP/IP)
  • RoCE(RDMA over Converged Ethernet)

上圖對(dui)于(yu)幾種常見的RDMA技術的協議層次做了非常清晰(xi)的對(dui)比,

4.1、Infiniband

由IBTA(InfiniBand Trade Association)提出的(de)(de)IB協議,RDMA在設計的(de)(de)時(shi)候重(zhong)新定義了物理鏈路層(ceng)、網絡層(ceng)、傳輸層(ceng),所以要使用專(zhuan)用的(de)(de)IB交換機和網卡做物理隔離的(de)(de)專(zhuan)網,成(cheng)本較大(da),但性能表(biao)現(xian)最優。

4.2、RoCE

RoCEv2是運行在以(yi)太(tai)(tai)網(wang)之(zhi)上的(de)(de)(de)RDMA,RoCEV1基于以(yi)太(tai)(tai)網(wang)數據鏈路層協議,僅可在局域網(wang)的(de)(de)(de)單個廣(guang)播域內(nei)傳輸(shu)。RoCEv2基于UDP協議,支持(chi)路由協議,傳輸(shu)距離更遠。RoCEv2需(xu)要支持(chi)“無(wu)損以(yi)太(tai)(tai)網(wang)”以(yi)達到類似于InfiniBand的(de)(de)(de)性能特(te)征,一般通過無(wu)損以(yi)太(tai)(tai)網(wang)的(de)(de)(de)優(you)先流量控制(PFC)配置保證擁(yong)塞時(shi)不丟包,同時(shi)使(shi)用ECN進(jin)一步(bu)減緩擁(yong)塞。

4.3、iWARP

iWARP將InfiniBand移(yi)植到(dao)TCP/IP協(xie)議棧,使主流的(de)以太網(wang)支(zhi)持(chi)RDMA,支(zhi)持(chi)在(zai)(zai)標準(zhun)的(de)以太網(wang)交換機上運行RDMA,但缺點在(zai)(zai)于TCP協(xie)議開銷(xiao)較(jiao)大,且算法(fa)復雜,失(shi)去(qu)了大部(bu)分的(de)RDMA性能優勢。

綜上:雖然有軟件實(shi)現的RoCE和iWARP協(xie)議,但是真正商用(yong)時上述(shu)幾種協(xie)議都需要專門的硬件(網(wang)卡)支持。

5、RDMA 基本元素:

5.1、隊列(Queue)
  • RDMA一共支持三種隊列:

(1)發送隊(dui)(dui)列Send Queue(SQ)和(he)接收隊(dui)(dui)列Recv Queue(RQ),SQ和(he)RQ通常成對創建,被稱為Queue Pairs(QP)。

(2)完成隊列Completion Queue(CQ)。

  • 隊列中的元素:

(1)SQ和(he)RQ中元素的叫(jiao)WQE(Work Queue Element,工作隊(dui)列元素),因此SQ和(he)RQ也被統(tong)稱為WQ。

(2)CQ中的元(yuan)素叫CQE(Completion Queue Elemen)。

5.2、WR和WC:

WR全稱(cheng)Work Request,意為(wei)工作(zuo)請求;WC全稱(cheng)Work Completion,意為(wei)工作(zuo)完成。這兩(liang)者其實是(shi)WQE和(he)CQE在用(yong)戶層(ceng)的“映射”。因為(wei)用(yong)戶是(shi)通過調(diao)用(yong)協議棧接口來完成RDMA通信的,WQE和(he)CQE本身(shen)并不對用(yong)戶可見,是(shi)驅動中(zhong)的概(gai)念。用(yong)戶真(zhen)正(zheng)通過Verbs API下(xia)發的是(shi)WR,收(shou)到的是(shi)WC。

5.3、Memory Registration(MR) | 內存注冊

MR全稱為Memory Region,指的(de)是由RDMA軟件層在(zai)內存(cun)中規劃出的(de)一(yi)片區(qu)域(yu),用(yong)于(yu)(yu)存(cun)放收發(fa)的(de)數據。IB協(xie)議中,用(yong)戶在(zai)申請完用(yong)于(yu)(yu)存(cun)放數據的(de)內存(cun)區(qu)域(yu)之后,都需要通過調用(yong)IB框架(jia)提供的(de)API注冊(ce)MR,才能讓RDMA網(wang)卡訪問這片內存(cun)區(qu)域(yu)。

注冊(ce)MR主要解決(jue)三個問(wen)題(ti):(1)實現虛擬地(di)址與物(wu)理地(di)址轉換,(2)避免(mian)進程換頁導致數據(ju)發生變(bian)化;(3)控制本端(duan)和對端(duan)訪問(wen)內(nei)存的(de)權(quan)限。

6、RDMA基本操作

6.1、概述:

以生(sheng)產(chan)者-消費者角度簡(jian)單概述如下:

(1)HOST提交工作(zuo)請求WR,將WR放到(post)工作(zuo)隊列WQ(SQ和RQ)。此(ci)時SQ和RQ中就有WQE(WR),等待RDMA硬件(jian)消費;

(2)RDMA硬件從(cong)SQ和(he)RQ中消(xiao)費WQE(WR);

(3)RDMA硬(ying)件消(xiao)費完(wan)成后,產生CQE(WC),將(jiang)CQE放入CQ隊列(lie)中,等待HOST消(xiao)費。

(4)HOST從(cong)CQ中(zhong)消費WC(CQE)。

6.2、RDMA SEND/RECV操作:

SEND/RECV是(shi)雙邊操作,即需(xu)要(yao)(yao)通信(xin)雙方的參與,并且RECV要(yao)(yao)先于SEND執行(xing),這樣對方才能(neng)發(fa)送(song)數據,當然如果對方不需(xu)要(yao)(yao)發(fa)送(song)數據,可以(yi)不執行(xing)RECEIVE操作。如下圖(tu)所示(圖(tu)中的順(shun)序(xu)不一定是(shi)正確(que)的,處理邏輯由(you)硬件決定的):

(1)service host以(yi)WR(WQE)的形式(shi)下發(fa)一次RECV任務到(dao)RQ。

(2)client host以WR(WQE)的形式下發一次(ci)SEND任務(wu)到SQ。

(3)client host的(de)RDMA硬件(具有RDMA功能的(de)硬件)從(cong)SQ中消(xiao)費WQE。

(4)client host的RDMA硬件從內存中(zhong)拿到待(dai)發送數據(ju),組裝數據(ju)包。

(5)client host的網(wang)卡將(jiang)數據包通過(guo)物理鏈路發送(song)給(gei)service網(wang)卡。

(6)service host收(shou)到數據,進行校驗(yan)后回復ACK報文給client。

(7)service host的RDMA硬件從RQ中消費(fei)WQE。

(8)service host的RDMA硬件將(jiang)數據放到(dao)WQE中(zhong)指定(ding)的位(wei)置。

(9)service host的(de)RDMA硬件生(sheng)成CQE,放(fang)置到CQ中。

(10)service host消費CQE。

(11)client host的(de)RDMA硬件收(shou)到ACK后,生(sheng)成CQE,放置到CQ中。

(12)client host消(xiao)費CQE。

6.3、RDMA WRITE操作:

RDMA WRITE是(shi)單邊操作,是(shi)本端(duan)(duan)主動寫入遠(yuan)端(duan)(duan)內存的(de)行為,除了準備階段(建鏈、交換內存信(xin)息(xi)),遠(yuan)端(duan)(duan)CPU不(bu)需要參與,也不(bu)感知何時(shi)(shi)有(you)數據寫入、數據在何時(shi)(shi)接收完畢(bi)。如下圖所(suo)示(shi):

(1)client host以WR(WQE)的形式下發(fa)一次WRITE任(ren)務。

(2)client host的RDMA硬件從(cong)SQ中取出WQE,解析信息。

(3)client host的RDMA硬件根(gen)據(ju)WQE中(zhong)的虛擬地址(zhi),轉(zhuan)換得(de)到物理地址(zhi),然后從內存中(zhong)拿到待發送(song)數(shu)(shu)據(ju),組(zu)裝數(shu)(shu)據(ju)包。

(4)client host網(wang)卡將數據(ju)包通過物理鏈路發送給service網(wang)卡。

(5)service host的(de)RDMA硬件(jian)收到(dao)數據(ju)包,解析目的(de)虛擬地址,轉換成本地物(wu)理地址,解析數據(ju),將數據(ju)放置到(dao)指定內(nei)存(cun)區域。

(6)service host回復ACK報文給client。

(7)client host的RDMA硬件收到ACK后,生成CQE,放置到CQ中(zhong)。

(8)client host消費(fei)CQE。

6.4、RDMA READ操作:

RDMA READ也是(shi)單邊操作,與WRITE是(shi)相(xiang)反的過(guo)程,是(shi)本端主動(dong)讀(du)取(qu)遠端內存的行為(wei)。同WRITE一(yi)樣,遠端CPU不(bu)需(xu)要參與,也不(bu)感(gan)知數據(ju)在內存中被讀(du)取(qu)的過(guo)程。如(ru)下圖所示:

(1)client host以(yi)WR(WQE)的形式下(xia)發一次READ任務(wu)。

(2)client host的RDMA硬件從SQ中取出(chu)WQE,解析信(xin)息。

(3)client host的網(wang)卡(ka)將READ請求包(bao)通過物理鏈路發送給service。

(4)service host收到(dao)數據(ju)包,解(jie)析目(mu)的虛擬地址,轉(zhuan)換成(cheng)本地物理地址,解(jie)析數據(ju),從(cong)指定內存區域(yu)取出數據(ju)。

(5)service host的RDMA硬件(jian)將數(shu)據組裝成回復數(shu)據包發送到物理(li)鏈(lian)路。

(6)client host的RDMA硬件收到數據(ju)包(bao),解析(xi)提取出(chu)數據(ju)后(hou)放到READ WQE指(zhi)定的內存區(qu)域中。

(7)client host的(de)RDMA硬件生成CQE,放(fang)置到CQ中。

(8)client host消費CQE。

7、RDMA編程接口之IB Verbs API:

7.1一些基本信息了解:
  • RDMA Core 指開源RDMA用戶態軟件協議棧,包含用戶態框架、各廠商用戶態驅動、API幫助手冊以及開發自測試工具等。rdma-core在github上維護,我們的用戶態Verbs API實際上就是它實現的。

路徑://github.com/linux-rdma/rdma-core 

  • kernel RDMA subsystem指開源的Linux內核中的RDMA子系統,包含RDMA內核框架及各廠商的驅動。RDMA子系統跟隨Linux維護,是內核的的一部分。一方面提供內核態的Verbs API,一方面負責對接用戶態的接口。

驅動路(lu)徑:kernel/drivers/infiniband; 頭文件kernel/include/rdma;和 kernel/include/uapi/rdma。

  • OFED:全稱為OpenFabrics Enterprise Distribution,是一個開源軟件包集合,其中包含內核框架和驅動、用戶框架和驅動、以及各種中間件、測試工具和API文檔。

開源OFED由OFA組織負責開發、發布和(he)維護,它(ta)會定期從rdma-core和(he)內核的 RDMA子系統取軟件版本,并對各商(shang)用OS發行(xing)版進(jin)行(xing)適配。除了(le)協議棧(zhan)和(he)驅動外, 還包含了(le)perftest等測(ce)試工具。

7.2 什么是Verbs API

Verbs API是(shi)一組用于使用RDMA服(fu)務的(de)最基本的(de)軟件接口,也(ye)就是(shi)說業界的(de)RDMA應用,向用戶提供了有關RDMA的(de)一切功(gong)能,典(dian)型(xing)的(de)包括:注(zhu)冊MR、創建QP、Post Send、Post send、Poll CQ等等。

對于Linux系統(tong)來說,Verbs的(de)功能由rdma-core和內核中的(de)RDMA子系統(tong)提供(gong),分為用(yong)戶態Verbs接(jie)口和內核態Verbs接(jie)口,分別用(yong)于用(yong)戶態和內核態的(de)RDMA應用(yong)。

組件架構如下:

文章來自個人專欄
文(wen)章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0