因?yàn)榭戳艘粋€(gè)介紹說(shuō)低延時(shí),然后就很好奇的去搜了下是怎么做到的,就搜索到了RDMA技術(shù)
背景
面對(duì)高性能計(jì)算、大數(shù)據(jù)分析和浪涌型IO高并發(fā)、低時(shí)延應(yīng)用,現(xiàn)有TCP/IP軟硬件架構(gòu)和應(yīng)用高CPU消耗的技術(shù)特征根本不能滿足應(yīng)用的需求。這要有體現(xiàn)在處理延時(shí)過(guò)大,數(shù)十微秒;多次內(nèi)存拷貝、中斷處理,上下文切換、復(fù)雜的TCP/IP協(xié)議處理、網(wǎng)絡(luò)延時(shí)過(guò)大、存儲(chǔ)轉(zhuǎn)發(fā)模式和丟包導(dǎo)致額外延時(shí)

RDMA是一種遠(yuǎn)端內(nèi)存直接訪問(wèn)技術(shù)
相比傳統(tǒng)DMA的內(nèi)部總線IO,RDMA通過(guò)網(wǎng)絡(luò)在兩個(gè)端點(diǎn)的應(yīng)用軟件之間實(shí)現(xiàn)Buffer的直接傳遞;相比比傳統(tǒng)的網(wǎng)絡(luò)傳輸,RDMA又無(wú)需操作系統(tǒng)和協(xié)議棧的介入。RDMA可以輕易實(shí)現(xiàn)端點(diǎn)間的超低延時(shí)、超高吞吐量傳輸,而且基本不需要CPU、OS等資源介入,也不必再為網(wǎng)絡(luò)數(shù)據(jù)的處理和搬移耗費(fèi)過(guò)多其他資源。

RDMA最早專屬于Infiniband架構(gòu),隨著在網(wǎng)絡(luò)融合大趨勢(shì)下出現(xiàn)的RoCE和iWARP.
InfiniBand通過(guò)以下技術(shù)保證網(wǎng)絡(luò)轉(zhuǎn)發(fā)的低時(shí)延(亞微秒級(jí)),采用Cut-Through轉(zhuǎn)發(fā)模式,減少轉(zhuǎn)發(fā)時(shí)延;基于Credit的流控機(jī)制,保證無(wú)丟包;硬件卸載;Buffer盡可能小,減少報(bào)文被緩沖的時(shí)延 。
iWARP(RDMA over TCP/IP) 利用成熟的IP網(wǎng)絡(luò);繼承RDMA的優(yōu)點(diǎn);TCP/IP硬件實(shí)現(xiàn)成本高,但如果采用傳統(tǒng)IP網(wǎng)絡(luò)丟包對(duì)性能影響大。
RoCE性能與IB網(wǎng)絡(luò)相當(dāng);DCB特性保證無(wú)丟包;需要以太網(wǎng)支持DCB特性;以太交換機(jī)時(shí)延比IB交換機(jī)時(shí)延要稍高一些。

RoCEv2針對(duì)RoCE進(jìn)行了一些改進(jìn),如引入IP解決擴(kuò)展性問(wèn)題,可以跨二層組網(wǎng);引入U(xiǎn)DP解決ECMP負(fù)載分擔(dān)等問(wèn)題。

在Infiniband/RDMA的模型中,核心是如何實(shí)現(xiàn)應(yīng)用之間最簡(jiǎn)單、高效和直接的通信。RDMA提供了基于消息隊(duì)列的點(diǎn)對(duì)點(diǎn)通信,每個(gè)應(yīng)用都可以直接獲取自己的消息,無(wú)需操作系統(tǒng)和協(xié)議棧的介入。
消息服務(wù)建立在通信雙方本端和遠(yuǎn)端應(yīng)用之間創(chuàng)建的Channel-IO連接之上。當(dāng)應(yīng)用需要通信時(shí),就會(huì)創(chuàng)建一條Channel連接,每條Channel的首尾端點(diǎn)是兩對(duì)Queue Pairs(QP),每對(duì)QP由Send Queue(SQ)和Receive Queue(RQ)構(gòu)成,這些隊(duì)列中管理著各種類型的消息。QP會(huì)被映射到應(yīng)用的虛擬地址空間,使得應(yīng)用直接通過(guò)它訪問(wèn)RNIC網(wǎng)卡。除了QP描述的兩種基本隊(duì)列之外,RDMA還提供一種隊(duì)列Complete Queue(CQ),CQ用來(lái)知會(huì)用戶WQ上的消息已經(jīng)被處理完。
RDMA提供了一套軟件傳輸接口,方便用戶創(chuàng)建傳輸請(qǐng)求Work Request(WR),WR中描述了應(yīng)用希望傳輸?shù)紺hannel對(duì)端的消息內(nèi)容,WR通知QP中的某個(gè)隊(duì)列Work Queue(WQ)。在WQ中,用戶的WR被轉(zhuǎn)化為Work Queue Ellement(WQE)的格式,等待RNIC的異步調(diào)度解析,并從WQE指向的Buffer中拿到真正的消息發(fā)送到Channel對(duì)端。
RDMA中SEND/RECEIVE是雙邊操作,即必須要遠(yuǎn)端的應(yīng)用感知參與才能完成收發(fā)。READ和WRITE是單邊操作,只需要本端明確信息的源和目的地址,遠(yuǎn)端應(yīng)用不必感知此次通信,數(shù)據(jù)的讀或?qū)懚纪ㄟ^(guò)RDMA在RNIC與應(yīng)用Buffer之間完成,再由遠(yuǎn)端RNIC封裝成消息返回到本端。在實(shí)際中,SEND /RECEIVE多用于連接控制類報(bào)文,而數(shù)據(jù)報(bào)文多是通過(guò)READ/WRITE來(lái)完成的。
對(duì)于雙邊操作為例,主機(jī)A向主機(jī)B(下面簡(jiǎn)稱A、B)發(fā)送數(shù)據(jù)的流程如下
- 首先,A和B都要?jiǎng)?chuàng)建并初始化好各自的QP,CQ
- A和B分別向自己的WQ中注冊(cè)WQE,對(duì)于A,WQ=SQ,WQE描述指向一個(gè)等到被發(fā)送的數(shù)據(jù);對(duì)于B,WQ=RQ,WQE描述指向一塊用于存儲(chǔ)數(shù)據(jù)的Buffer。
- A的RNIC異步調(diào)度輪到A的WQE,解析到這是一個(gè)SEND消息,從Buffer中直接向B發(fā)出數(shù)據(jù)。數(shù)據(jù)流到達(dá)B的RNIC后,B的WQE被消耗,并把數(shù)據(jù)直接存儲(chǔ)到WQE指向的存儲(chǔ)位置。
- AB通信完成后,A的CQ中會(huì)產(chǎn)生一個(gè)完成消息CQE表示發(fā)送完成。與此同時(shí),B的CQ中也會(huì)產(chǎn)生一個(gè)完成消息表示接收完成。每個(gè)WQ中WQE的處理完成都會(huì)產(chǎn)生一個(gè)CQE。
雙邊操作與傳統(tǒng)網(wǎng)絡(luò)的底層Buffer Pool類似,收發(fā)雙方的參與過(guò)程并無(wú)差別,區(qū)別在零拷貝、Kernel Bypass,實(shí)際上對(duì)于RDMA,這是一種復(fù)雜的消息傳輸模式,多用于傳輸短的控制消息。
對(duì)于單邊操作,以存儲(chǔ)網(wǎng)絡(luò)環(huán)境下的存儲(chǔ)為例(A作為文件系統(tǒng),B作為存儲(chǔ)介質(zhì)),數(shù)據(jù)的流程如下
- 首先A、B建立連接,QP已經(jīng)創(chuàng)建并且初始化。
- 數(shù)據(jù)被存檔在A的buffer地址VA,注意VA應(yīng)該提前注冊(cè)到A的RNIC,并拿到返回的local key,相當(dāng)于RDMA操作這塊buffer的權(quán)限。
- A把數(shù)據(jù)地址VA,key封裝到專用的報(bào)文傳送到B,這相當(dāng)于A把數(shù)據(jù)buffer的操作權(quán)交給了B。同時(shí)A在它的WQ中注冊(cè)進(jìn)一個(gè)WR,以用于接收數(shù)據(jù)傳輸?shù)腂返回的狀態(tài)。
- B在收到A的送過(guò)來(lái)的數(shù)據(jù)VA和R_key后,RNIC會(huì)把它們連同存儲(chǔ)地址VB到封裝RDMA READ,這個(gè)過(guò)程A、B兩端不需要任何軟件參與,就可以將A的數(shù)據(jù)存儲(chǔ)到B的VB虛擬地址。
- B在存儲(chǔ)完成后,會(huì)向A返回整個(gè)數(shù)據(jù)傳輸?shù)臓顟B(tài)信息。
單邊操作傳輸方式是RDMA與傳統(tǒng)網(wǎng)絡(luò)傳輸?shù)淖畲蟛煌?,只需提供直接訪問(wèn)遠(yuǎn)程的虛擬地址,無(wú)須遠(yuǎn)程應(yīng)用的參與其中,這種方式適用于批量數(shù)據(jù)傳輸。
小結(jié)
Infiniband的成功取決于兩個(gè)因素,一是主機(jī)側(cè)采用RDMA技術(shù),可以把主機(jī)內(nèi)數(shù)據(jù)處理的時(shí)延從幾十微秒降低到幾微秒,同時(shí)不占用CPU;二是InfiniBand網(wǎng)絡(luò)的采用高帶寬(40G/56G)、低時(shí)延(幾百納秒)和無(wú)丟包特性