当前位置:首页 > > 处芯积律
  1. 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 报文。

  1. 创建 QP:两端分别创建 RC 类型 QP,分配资源。

  2. 地址交换:通过带外通道(Socket/TCP 等 )交换 GID、QPN。

  3. QP 状态切换:依次将 QP 从 RESETINITRTR(接收端 )→ RTS(发送端 )。

  4. 内存注册:两端注册内存,接收端将 R_Key + VA 发给发送端。

4.RDMA WRITE处理流程

  1. 请求端APP以WQE的形式下发RDMA WRITE任务。

  2. 请求端硬件从SQ中取出WQE,解析信息。

  3. 请求端硬件根据WQE中的虚拟地址,转换得到物理地址,通过PCIe端口向本地内存读数据

  4. 请求端硬件读到内存中的待发送数据,组装数据包。

  5. 请求端硬件将数据包通过物理链路发送给响应端硬件。

  6. 响应端硬件收到数据包,完成数据解析

  7. 响应端硬件解析目的虚拟地址,并转换成本地物理地址,解析数据,并将数据放置到指定内存区域。

  8. 响应端回复ACK报文给请求端。

    1. 回复ACK之时,RDMA网卡只能保证数据包中的Payload已经被”暂存“了下来,但不能保证一定已经把数据放到目的内存里面了

  9. 请求端硬件收到RDMA write 对应的ACK后

    10.请求端硬件生成CQE,放置到CQ中

    11.请求端APP取得任务完成信息。

NOTE: 如果是with immdt,响应端必须生成CQE


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭