網(wǎng)站設(shè)計(jì) app開發(fā)優(yōu)化關(guān)鍵詞排名公司
從帝國(guó)理工的PPT學(xué)習(xí)。
什么是RDMA
Remote Direct Memory Access,也就是Remote的DMA,是一種硬件機(jī)制,能直接訪問遠(yuǎn)端結(jié)點(diǎn)的內(nèi)存,而不需要處理器介入。
其中:
- Remote:跨node進(jìn)行數(shù)據(jù)傳輸
- Direct:不需要CPU或者OS kernel介入
- Memory:從兩個(gè)node各自app的虛擬地址空間直接傳輸數(shù)據(jù)
- Access:支持send、receive、read、write、atomic operation
RDMA的優(yōu)點(diǎn)
也就說明了適用場(chǎng)景
- 較高的高吞吐量(帶寬)
- 較低的E2E時(shí)延
- 較低的CPU適用:單側(cè)的RDMA操作完全不需要remote CPU參與)
- 較低的內(nèi)存總線爭(zhēng)用:user space和kernel之間完全不拷貝數(shù)據(jù))
- 異步操作:所以很適合overlapping的通信和計(jì)算
傳統(tǒng)的TCP/IP vs RDMA
可以看到RDMA繞過kenel mode的同時(shí)也bypass了這些協(xié)議棧
協(xié)議棧對(duì)比
RDMA網(wǎng)絡(luò)棧
準(zhǔn)備階段:設(shè)置RDMA的data channels
buffer在使用前需要在網(wǎng)卡那邊注冊(cè)一下,具體地,在注冊(cè)階段需要:
- Pin memory,保證這塊memory不會(huì)被OS swap出去
- 將地址轉(zhuǎn)換信息存到NIC里
- 對(duì)這段memory region設(shè)置權(quán)限
- 返回remote key和local key,這是給adapter在執(zhí)行RDMA操作時(shí)用的
工作隊(duì)列
RDMA通信是基于Send、Receive、Completion這三種隊(duì)列的,其中Send和Receive的queue屬于work queue,總是以Queue Pair的形式被創(chuàng)建。SQ和RQ用于schedule work,當(dāng)work完成時(shí),CQ用于通知。
在工作時(shí),應(yīng)用會(huì)issue一個(gè)work request,這個(gè)struct包含了指向一個(gè)buffer的指針:
- 對(duì)于SQ,指向要發(fā)送的消息
- 對(duì)于CQ,指向了incoming message要放入的位置
而一旦一個(gè)work request完成了,那么adapter就會(huì)往CQ里塞一個(gè)元素。
支持RDMA的網(wǎng)絡(luò)協(xié)議
IB (InfiniBand)、RoCE (RDMA over Converged Ethernet)、iWARP (internet Wide Area RDMA Protocol)
RDMA只是一種機(jī)制
并沒有指定data transfer的語義,RDMA網(wǎng)絡(luò)支持兩種訪問模型:
Two Sided:RDMA send & receive
這是最傳統(tǒng)的消息傳遞模式,消息源和目標(biāo)方都積極地參與通信。
雙方都需要?jiǎng)?chuàng)建:
- 一對(duì)QP (SQ+CQ),用于發(fā)送和接收
- 給這對(duì)QP用的CQ
發(fā)送方的work request會(huì)指向要傳輸?shù)腷uffer,然后把這個(gè)WQE塞到SQ里發(fā)過去。
接收方的work request會(huì)指向一個(gè)empty buffer用于接收數(shù)據(jù),通過這種方式WQE會(huì)被添加到對(duì)應(yīng)的RQ里。
在send+receive完成之后,也就是直接寫入了remote的registered memory,然后雙方的CQ里都會(huì)被添加一個(gè)CQE表示完成了。
One Sided:RDMA read & write + atomic操作
只有發(fā)起方是活動(dòng)的,接收方是純被動(dòng)的,不會(huì)issue任何操作,也不會(huì)有CPU cycle,甚至完全不會(huì)感知到有read/write發(fā)生了。
如果要發(fā)起RDMA read/write,那么work request必須包含:
- 遠(yuǎn)端目標(biāo)內(nèi)存的虛擬地址
- 遠(yuǎn)端的memory registration key
也就是說要使用RDMA read/write,發(fā)起方必須事先就知道這兩個(gè)knowledge。
基于RDMA的上層協(xié)議
RDMA有很多好處,但也因?yàn)殚_發(fā)者需要使用它的Verbs API帶來了額外的復(fù)雜性。