RDMA协议-RDMA write 处理流程简介
扫描二维码
随时随地手机看文章
-
RDMA WRITE简介
本文仅仅涉及可靠传输的RDMA WRITE。
Reliable Connection(可靠连接,简称 RC )模式下的 RDMA WRITE 是一种可靠、高效的RDMA传输方式。
-
可靠:
-
RDMA WRITE 通过 PSN 序列号 + ACK/NAK 确认 + 自动重传,保障数据不丢、不重、不乱序,适合对数据完整性要求极高的场景(如分布式数据库同步、金融交易系统等)。
-
高效:
-
全程绕过 CPU / 操作系统:数据从发送端内存,经硬件(网卡)直接 “搬运” 到接收端内存,无传统网络传输的 “内核态 - 用户态” 拷贝开销,吞吐量和延迟优势显著。
RDMA WRITE操作,是本端主动写入远端内存的行为。在RDMA WRITE传输阶段,数据写入远端存储的过程不需要远端CPU参与,远端CPU也不感知何时有数据写入、数据在何时接收完毕。
2.Reliable Connection RDMA WRITE报文格式
RC RDMA WRITER包含DMA WRITE和RDMA WRITE with Immediate 这两种类型报文,格式如下所示。
RDMA WRITE报文格式包含BTH、RETH和Payld。RDMA WRITE with Immediate报文格式包含BTH、RETH、Immediate 和Payld。Base Transport Header(BTH)即报文传输头,RDMA Extended Transport Header (RETH) 即报文扩展传输头。ImmDt即Immediate Data。
2.1Base Transport Header(BTH)
-
在BTH中,OpCode 即操作码表示了报文的类型,其含义如如Table 38 所示。红框为RC RDMA WRITE支持的操作码。
-
PSN:Packet Sequence Number,即包序列号,用于实现 WRITE 报文保序、去重等功能。
-
A:Acknowledge,数值为1要求接收端回复ACK。
-
Partition Key (分区键,简称 P_Key ):用于构建虚拟通信域和限制通信范围。
-
只有配置了相同有效 Partition Key的Queue Pair(QP,RDMA 通信的通道载体 ),才能相互通信。这样就把 RDMA 通信限定在特定分区内,避免不同业务、不同安全级别的流量相互干扰。例如,属于分区 A(对应 P_Key1 )的 QP,无法直接和分区 B(对应 P_Key2 )的 QP 通信,保障了业务间的隔离性。
-
在 InfiniBand(IB)网络环境(RDMA 常用底层网络架构之一 )中,可借助 Partition Key 将整个 RDMA 网络划分成多个逻辑分区 。比如数据中心里,不同业务部门、不同应用的 RDMA 流量,可通过 P_Key 归属到不同分区,像高性能计算业务一个分区、人工智能训练业务另一个分区。
-
构建虚拟通信域
-
限制通信范围
Destination QP:目的队列对,指明 WRITE 数据要发往的远端队列对(QP )。
2.2 RDMA Extended Transport Header (RETH)
-
Virtual Address :
-
在 RDMA WRITE 操作里,RETH(RDMA Extended Transport Header )中的虚拟地址(Virtual Address )是接收侧应用程序的虚拟地址,用于明确 “远端内存写入的目标位置
-
发送端通过Virtual Address ,明确 “数据要写往接收端的哪个内存区域”;
-
接收端通过Virtual Address ,配合 R_Key 实现 “权限校验 + 地址转换 + 直接内存写入”
-
R_Key:
-
R_Key(Remote Key )是接收端通过内存注册(MR,Memory Region )生成,并传递给发送端的 “远端内存访问权限令牌”
3.RDMA WRITE传输前的准备工作
RDMA WRITE 操作是直接访问远端内存,因此需要提前完成准备操作,才能发送RDMA WRITE 报文。
-
创建 QP:两端分别创建 RC 类型 QP,分配资源。
-
地址交换:通过带外通道(Socket/TCP 等 )交换 GID、QPN。
-
QP 状态切换:依次将 QP 从 RESET → INIT → RTR(接收端 )→ RTS(发送端 )。
-
内存注册:两端注册内存,接收端将 R_Key + VA 发给发送端。
4.RDMA WRITE处理流程
-
请求端APP以WQE的形式下发RDMA WRITE任务。
-
请求端硬件从SQ中取出WQE,解析信息。
-
请求端硬件根据WQE中的虚拟地址,转换得到物理地址,通过PCIe端口向本地内存读数据
-
请求端硬件读到内存中的待发送数据,组装数据包。
-
请求端硬件将数据包通过物理链路发送给响应端硬件。
-
响应端硬件收到数据包,完成数据解析
-
响应端硬件解析目的虚拟地址,并转换成本地物理地址,解析数据,并将数据放置到指定内存区域。
-
响应端回复ACK报文给请求端。
-
回复ACK之时,RDMA网卡只能保证数据包中的Payload已经被”暂存“了下来,但不能保证一定已经把数据放到目的内存里面了
-
请求端硬件收到RDMA write 对应的ACK后
10.请求端硬件生成CQE,放置到CQ中
11.请求端APP取得任务完成信息。
NOTE: 如果是with immdt,响应端必须生成CQE





