RDMA 最早专属于 infiniband 架构。在网络融合的大趋势下出现的 RoCE ,使高速、超低延时、极低 cpu 使用率的 RDMA 得以部署在目前使用最广泛的以太网上。
对比传统 DMA 的内部总线 IO , RDMA 通过 网络 在两个端点的应用软件之间实现 buffer 的直接传递;而对比传统的网络传输, RDMA 又无需操作系统和协议栈的介入。 RDMA 可以轻易实现端点间的超低延时、超高吞吐量传输,而且基本不需要 CPU 、 OS 的资源参与,在高速网络环境下,不必再为网络数据的处理和搬移耗费过多资源。一言概之, RDMA 三大特性: CPU offload 、 kernel bypass 、 zero-copy 。
图 RDMA VS Traditional network
传统的网络架构以“ 网络为中心 ”,网络公用的软件部分被实现到 OS 的协议栈,所以 OS 在所有应用的网络请求时都必须参与其中,并且 socket 、 skbuff 、 ring buffer 的转换都伴随着数据报文的拷贝,容易产生性能瓶颈。
图 网络环境下的 CPU 负载消耗
在 Infiniband/RDMA 的模型中,核心 “以服务为中心” ,围绕一个基本问题: 如何实现应用之间最简单、高效和直接的通信 。 RDMA 提供了基于消息队列的点对点通信,每个应用都可以直接获取自己的消息,无需 OS 和协议栈的介入。
消息服务建立在通信双方本端和远端应用之间创建的 channel-IO 连接之上。当应用需要通信时,就会创建一条 Channel 连接,每条 Channel 的首尾端点是两对 Queue Pairs ( QP ),每对 QP 由 Send Queue ( SQ )和 Receive Queue ( RQ )构成,这些队列中管理着各种类型的消息。 QP 会被映射到应用的虚拟地址空间,使得应用直接通过它访问 RNIC 。除了 QP 描述的两种基本队列之外, RDMA 还提供一种队列 -Complete Queue ( CQ ), CQ 用来知会用户 WQ 上的消息已经被处理完。
RDMA 提供了一套 software transport interface ,方便用户创建传输请求 -Work Request ( WR ), WR 中描述了应用希望传输到 Channel 对端的消息内容。 WR 通知给 QP 中的某个队列 -Work Queue ( WQ )。在 WQ 中,用户的 WR 被转化为 Work Queue Ellement ( WQE )的格式,等待 RNIC 的异步调度解析,并从 WQE 指向的 buffer 中拿到真正的消息发送到 Channel 对端。
图 RDMA 的 send/receive 和 read/write 传输
RDMA 共有三种底层数据传输模式。 SEND/RECEIVE 是双边操作,即必须要远端的应用感知参与才能完成收发。 READ 和 WRITE 是单边操作,只需要本端明确信息的源和目的地址,远端应用不必感知此次通信,数据的读或存都通过远端的 DMA 在 RNIC 与应用 buffer 之间完成,再由远端 RNIC 封装成消息返回到本端。在实际中, SEND/RECEIVE 多用于连接控制类报文,而数据报文多是通过 READ/WRITE 来完成的。
对于双边操作为例, A 向 B 发送数据的流程如下:
双边操作与传统网络的底层 buffer pool类似,收发双方的参与过程并无差别,区别在零拷贝、 kernel bypass,实际上传统网络中一些高级的网络 SOC已经实现类似功能。对于 RDMA,这是一种复杂的消息传输模式,多用于传输短的控制消息。
对于单边操作,以存储网络环境下的存储为例( A 作为文件系统, B 作为存储介质):
单边操作传输方式是 RDMA与传统网络传输的最大不同,提供直接访问远程的虚拟地址,无须远程应用的参与,这种方式适用于批量数据传输。
RDMAC ( RDMA Consortium )和 IBTA ( InfiniBand Trade Association )主导了 RDMA ,RDMAC 是 IETF 的一个补充,它主要定义的是 iWRAP 和 iSER ,IBTA 是 infiniband 的全部标准制定者,并补充了 RoCE v1 v2 的标准化。 应用和 RNIC 之间的传输接口层( software transport interface )被称为 Verbs 。 IBTA 解释了 RDMA 传输过程中应具备的特性行为,而并没有规定 Verbs 的具体接口和数据结构原型。这部分工作由另一个组织 OFA ( Open Fabric Alliance )来完成, OFA 提供了 RDMA 传输的一系列 Verbs API 。 OFA 开发出了 OFED ( Open Fabric Enterprise Distribution )协议栈,支持多种 RDMA 传输层协议。
OFED_中除了提供向下与 RNIC基本的队列消息服务,向上还提供了 ULP( Upper Layer Protocols),通过 ULPs,上层应用不需要直接到 Verbs API对接,而是借助于 ULP与应用对接,常见的应用不需要做修改,就可以跑在 RDMA传输层上。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论