RDMA協(xié)議-RDMA write 處理流程簡介
掃描二維碼
隨時(shí)隨地手機(jī)看文章
-
RDMA WRITE簡介
本文僅僅涉及可靠傳輸?shù)腞DMA WRITE。
Reliable Connection(可靠連接,簡稱 RC )模式下的 RDMA WRITE 是一種可靠、高效的RDMA傳輸方式。
-
可靠:
-
RDMA WRITE 通過 PSN 序列號 + ACK/NAK 確認(rèn) + 自動(dòng)重傳,保障數(shù)據(jù)不丟、不重、不亂序,適合對數(shù)據(jù)完整性要求極高的場景(如分布式數(shù)據(jù)庫同步、金融交易系統(tǒng)等)。
-
高效:
-
全程繞過 CPU / 操作系統(tǒng):數(shù)據(jù)從發(fā)送端內(nèi)存,經(jīng)硬件(網(wǎng)卡)直接 “搬運(yùn)” 到接收端內(nèi)存,無傳統(tǒng)網(wǎng)絡(luò)傳輸?shù)?“內(nèi)核態(tài) - 用戶態(tài)” 拷貝開銷,吞吐量和延遲優(yōu)勢顯著。
RDMA WRITE操作,是本端主動(dòng)寫入遠(yuǎn)端內(nèi)存的行為。在RDMA WRITE傳輸階段,數(shù)據(jù)寫入遠(yuǎn)端存儲的過程不需要遠(yuǎn)端CPU參與,遠(yuǎn)端CPU也不感知何時(shí)有數(shù)據(jù)寫入、數(shù)據(jù)在何時(shí)接收完畢。
2.Reliable Connection RDMA WRITE報(bào)文格式
RC RDMA WRITER包含DMA WRITE和RDMA WRITE with Immediate 這兩種類型報(bào)文,格式如下所示。
RDMA WRITE報(bào)文格式包含BTH、RETH和Payld。RDMA WRITE with Immediate報(bào)文格式包含BTH、RETH、Immediate 和Payld。Base Transport Header(BTH)即報(bào)文傳輸頭,RDMA Extended Transport Header (RETH) 即報(bào)文擴(kuò)展傳輸頭。ImmDt即Immediate Data。
2.1Base Transport Header(BTH)
-
在BTH中,OpCode 即操作碼表示了報(bào)文的類型,其含義如如Table 38 所示。紅框?yàn)镽C RDMA WRITE支持的操作碼。
-
PSN:Packet Sequence Number,即包序列號,用于實(shí)現(xiàn) WRITE 報(bào)文保序、去重等功能。
-
A:Acknowledge,數(shù)值為1要求接收端回復(fù)ACK。
-
Partition Key (分區(qū)鍵,簡稱 P_Key ):用于構(gòu)建虛擬通信域和限制通信范圍。
-
只有配置了相同有效 Partition Key的Queue Pair(QP,RDMA 通信的通道載體 ),才能相互通信。這樣就把 RDMA 通信限定在特定分區(qū)內(nèi),避免不同業(yè)務(wù)、不同安全級別的流量相互干擾。例如,屬于分區(qū) A(對應(yīng) P_Key1 )的 QP,無法直接和分區(qū) B(對應(yīng) P_Key2 )的 QP 通信,保障了業(yè)務(wù)間的隔離性。
-
在 InfiniBand(IB)網(wǎng)絡(luò)環(huán)境(RDMA 常用底層網(wǎng)絡(luò)架構(gòu)之一 )中,可借助 Partition Key 將整個(gè) RDMA 網(wǎng)絡(luò)劃分成多個(gè)邏輯分區(qū) 。比如數(shù)據(jù)中心里,不同業(yè)務(wù)部門、不同應(yīng)用的 RDMA 流量,可通過 P_Key 歸屬到不同分區(qū),像高性能計(jì)算業(yè)務(wù)一個(gè)分區(qū)、人工智能訓(xùn)練業(yè)務(wù)另一個(gè)分區(qū)。
-
構(gòu)建虛擬通信域
-
限制通信范圍
Destination QP:目的隊(duì)列對,指明 WRITE 數(shù)據(jù)要發(fā)往的遠(yuǎn)端隊(duì)列對(QP )。
2.2 RDMA Extended Transport Header (RETH)
-
Virtual Address :
-
在 RDMA WRITE 操作里,RETH(RDMA Extended Transport Header )中的虛擬地址(Virtual Address )是接收側(cè)應(yīng)用程序的虛擬地址,用于明確 “遠(yuǎn)端內(nèi)存寫入的目標(biāo)位置
-
發(fā)送端通過Virtual Address ,明確 “數(shù)據(jù)要寫往接收端的哪個(gè)內(nèi)存區(qū)域”;
-
接收端通過Virtual Address ,配合 R_Key 實(shí)現(xiàn) “權(quán)限校驗(yàn) + 地址轉(zhuǎn)換 + 直接內(nèi)存寫入”
-
R_Key:
-
R_Key(Remote Key )是接收端通過內(nèi)存注冊(MR,Memory Region )生成,并傳遞給發(fā)送端的 “遠(yuǎn)端內(nèi)存訪問權(quán)限令牌”
3.RDMA WRITE傳輸前的準(zhǔn)備工作
RDMA WRITE 操作是直接訪問遠(yuǎn)端內(nèi)存,因此需要提前完成準(zhǔn)備操作,才能發(fā)送RDMA WRITE 報(bào)文。
-
創(chuàng)建 QP:兩端分別創(chuàng)建 RC 類型 QP,分配資源。
-
地址交換:通過帶外通道(Socket/TCP 等 )交換 GID、QPN。
-
QP 狀態(tài)切換:依次將 QP 從 RESET → INIT → RTR(接收端 )→ RTS(發(fā)送端 )。
-
內(nèi)存注冊:兩端注冊內(nèi)存,接收端將 R_Key + VA 發(fā)給發(fā)送端。
4.RDMA WRITE處理流程
-
請求端APP以WQE的形式下發(fā)RDMA WRITE任務(wù)。
-
請求端硬件從SQ中取出WQE,解析信息。
-
請求端硬件根據(jù)WQE中的虛擬地址,轉(zhuǎn)換得到物理地址,通過PCIe端口向本地內(nèi)存讀數(shù)據(jù)
-
請求端硬件讀到內(nèi)存中的待發(fā)送數(shù)據(jù),組裝數(shù)據(jù)包。
-
請求端硬件將數(shù)據(jù)包通過物理鏈路發(fā)送給響應(yīng)端硬件。
-
響應(yīng)端硬件收到數(shù)據(jù)包,完成數(shù)據(jù)解析
-
響應(yīng)端硬件解析目的虛擬地址,并轉(zhuǎn)換成本地物理地址,解析數(shù)據(jù),并將數(shù)據(jù)放置到指定內(nèi)存區(qū)域。
-
響應(yīng)端回復(fù)ACK報(bào)文給請求端。
-
回復(fù)ACK之時(shí),RDMA網(wǎng)卡只能保證數(shù)據(jù)包中的Payload已經(jīng)被”暫存“了下來,但不能保證一定已經(jīng)把數(shù)據(jù)放到目的內(nèi)存里面了
-
請求端硬件收到RDMA write 對應(yīng)的ACK后
10.請求端硬件生成CQE,放置到CQ中
11.請求端APP取得任務(wù)完成信息。
NOTE: 如果是with immdt,響應(yīng)端必須生成CQE





