RDMA 核心原理:RoCE v2 与传输操作详解
一、RDMA原理操作RDMA 传输符合 RoCE v2 协议RDMA over Converged Ethernet (RoCE) 是一种网络协议它利用远程直接内存访问 (RDMA) 功能来显着加速托管在服务器集群和存储阵列上的应用程序之间的通信。RoCE 结合了IBTARDMA 语义允许设备在应用程序级别执行直接内存到内存传输而无需主机 CPU 。与基于软件的协议相比传输处理和内存转换和放置均由硬件执行从而显着降低延迟、提高吞吐量和提高性能。RoCE 数据包是常规的以太网帧它携带由IEEE 分配的以太型值这表示下一个报头是 RoCE GRH 。在模块中RDMA 协议物理上通过 25G 以太网协议处理模块进行传输能支持 25Gbps速率的 RDMA 传输能力。RoCEv1 协议被定义为带有以太网头部的 IB 帧。 它使用以太网类型 0x8915并且可以选择启用或者关闭 VLAN 标签。常规的以太网MTU 也适用于 RoCE帧。RoCEv2 协议的直接扩展使得流量能在 3 层 IP 环境下运行。将 RoCE 中的GRH 头部替换成 IP 头部使用 UDP 类型和专用的目的 UDP 端口(4791) 。UDP源端口域用来携带一个模糊的流标识符使得网络设备能够实现包的转发优化(例如 ECMP) 同时对于协议头部的格式保持无关性。2. RDMA 传输协议支持 RC 、UD 传输模式RDMA 协议规定支持的连接类型有四种分别是 RC UC UD RD 如下图所示当前 RDMA 卸载模块在 QP 维护处理中会和对端设备的 QP 进行绑定实现的是典型的 RC 传输模式。这样在 RDMA 传输时本身是一种可靠的提供面向消息的可靠传输方式。通过模式配置也可以扩展支持 UD 传输模式。3. RDMA 传输协议支持 Verbs 接口传统上的 RDMA 技术设计内核封装多层网络协议并且涉及内核数据传输。 RDMA 通过专有的 RDMA 网卡 RNIC 绕过内核直接从用户空间访问 RDMA enabled NIC 网卡。RDMA 提供一个专有的 Verbs Interface 而不是传统的 TCP/IP Socket Interface 。要使用RDMA 首先要建立从 RDMA 到应用程序内存的数据路径 可以通过 RDMA 专有的 Verbs Interface接口来建立这些数据路径一旦数据路径建立后就可以直接访问用户空间 buffer。操作系统下 RDMA 软件调用分为控制面接口调用和数据面接口调用。控制面接口调用主要走内核态驱动完成 MR 注册/反注册QP 创建/销毁建链/断链等配置功能支持内存 Verbs 和消息 Verbs传输。数据面接口调用主要完成数据收发操作写操作读操作采用 kernel bypass技术用户态直接操作硬件提高性能。二、RDMA 传输协议支持 Write、Read 、Send 和 Recv 操作接口功能设计1.RDMA READ 操作RDMA READ 是单边操作只需要本端明确信息的源和目的地址远端应用不必感知此次通信数据的读都通过 RDMA 在 RNIC 与应用 Buffer 之间完成再由远端 RNIC 封装成消息返回到本端。对于单边操作以存储网络环境下的存储为例数据的流程如下首先 A 、B 建立连接QP 已经创建并且初始化。数据被存档在 B 的 buffer地址 VB 注意 VB 应该提前注册到 B 的RNIC (并且它是一个 Memory Region) 并拿到返回的 local key 相当于 RDMA操作这块 buffer 的权限。B 把数据地址 VB key 封装到专用的报文传送到 A 这相当于 B 把数据 buffer 的操作权交给了 A 。同时 B 在它的 WQ 中注册进一个 WR 以用于接收数据传输的 A 返回的状态。A 在收到 B 的送过来的数据 VB 和 R_key 后RNIC 会把它们连同自身存储地址 VA 到封装 RDMA READ 请求将这个消息请求发送给 B 这个过程A 、B 两端不需要任何软件参与就可以将 B 的数据存储到 A 的 VA 虚拟地址。A 在存储完成后会向B 返回整个数据传输的状态信息。单边操作传输方式是 RDMA 与传统网络传输的最大不同只需提供直接访问远程的虚拟地址无须远程应用的参与其中这种方式适用于批量数据传输。RDMA WRITE 操作对于 RDMA WRITE 操作以存储网络环境下的存储为例数据的流程如下首先 A 、B 建立连接QP 已经创建并且初始化。数据 remote 目标存储 buffer地址 VB 注意 VB 应该提前注册到 B 的 RNIC(并且它是一个 Memory Region) 并拿到返回的 local key 相当于 RDMA操作这块 buffer 的权限。B 把数据地址 VB key 封装到专用的报文传送到 A 这相当于 B 把数据 buffer 的操作权交给了 A 。同时 B 在它的 WQ 中注册进一个 WR 以用于接收数据传输的 A 返回的状态。A 在收到 B 的送过来的数据 VB 和 R_key 后RNIC 会把它们连同自身发送地址 VA 到封装 RDMA WRITE 请求这个过程 A 、B 两端不需要任何软件参与就可以将 A 的数据发送到 B 的 VB 虚拟地址。A 在发送数据完成后会向B 返回整个数据传输的状态信息。RDMA SEND/RECEIVE 操作RDMA 中 SEND/RECEIVE 是双边操作即必须要远端的应用感知参与才能完成收发。在实际中SEND/RECEIVE 多用于连接控制类报文而数据报文多是通过 READ/WRITE 来完成的。对于双边操作为例主机 A 向主机 B(下面简称 A 、B)发送数据的流程如下首先A 和 B 都要创建并初始化好各自的 QP CQA 和 B 分别向自己的 WQ 中注册 WQE 对于 A WQSQ WQE 描述指向一个等到被发送的数据对于 B WQRQ WQE 描述指向一块用于存储数据的 Buffer。A 的 RNIC 异步调度轮到 A 的 WQE 解析到这是一个 SEND 消息从Buffer 中直接向B 发出数据。数据流到达 B 的 RNIC 后B 的 WQE 被消耗并把数据直接存储到 WQE 指向的存储位置。AB 通信完成后A 的 CQ 中会产生一个完成消息 CQE 表示发送完成。与此同时B 的 CQ 中也会产生一个完成消息表示接收完成。每个 WQ 中 WQE的处理完成都会产生一个 CQE。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2501004.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!