其他分享
首页 > 其他分享> > 初识RDMA技术——RDMA概念,特点,协议,通信流程

初识RDMA技术——RDMA概念,特点,协议,通信流程

作者:互联网

1. RDMA概念

DMA技术中,外部设备(PCIe设备)能够绕过CPU直接访问主机的系统主存;
RDMA(Remote Direct Memory Access)在概念上是相对于DMA而言的。指外部设备能够绕过CPU,不仅可以访问本地主机的主存,它还可以访问另一台远端主机上用户态的系统主存

2. RMDA与Socket


2.1 传统的TCP/IP通信

TCP/IP/Ethernet 是一种面向字节流的传输方式,信息以字节的形式在套接字应用程序之间传递。
在这里插入图片描述

  1. 数据发送方要将数据从用户空间Buffer复制到内核空间的Socket Buffer中。
  2. 然后在内核空间中添加数据报头,进行数据封装。通过一系列多层网络协议的数据包处理工作,这些协议包括传输控制协议(TCP)、用户数据报协议(UDP)、互联网协议(IP)、以及互联网控制消息协议(ICMP)等。经历如此多个步骤,数据才能被Push到NIC网卡中的Buffer进行网络传输。
  3. 在消息接收方,从远程主机发送来的数据包,要先将其从NIC Buffer拷贝至Socket Buffer
  4. 然后经过一系列的多层网络协议对数据包进行解析,解析后的数据被复制到相应的用户空间应用程序的Buffer中。此时,再进行系统上下文切换,用户应用程序才被调用。以上就是传统TCP/IP通信的工作流程。

2.2 TCP/IP存在的问题

传统TCP/IP通信存在的主要问题就是I/O瓶颈问题。在高速网络环境下与网络I/O相关的主机处理的高开销(数据移动操作和复制操作)限制了机器之间的传输带宽。

具体来说,传统的TCP/IP网络通信是通过内核发送消息。通过内核来传输消息这种机制会导致性能低灵活性差

3.RDMA的原理

RDMA技术的设计主要有以下几个原理/特点:

3.1 CPU Offload(CPU Bypass)

无需CPU干预,应用程序可以访问远程主机内存而不消耗远程主机中的任何CPU(这里面可能有歧义,应该还会通知CPU的)。远程主机内存能够被读取而不需要远程主机上的进程(或CPU)参与。远程主机的CPU的缓存(cache)不会被访问的内存内容所填充。

3.2 Kernel Bypass

内核旁路指的是,应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换。

3.3 Zero Copy

零拷贝主要的任务就是避免CPU将数据从一块存储拷贝到另外一块存储,在TCP/IP通信中,数据在主机之间的传输需要频繁进行拷贝操作(UserSpace Buffer、Socket Buffer、NIC Buffer),这些操作无疑增加了传输延迟。而RDMA具有零拷贝的特点。RDMA技术非常重要的一点是,每个应用程序都能直接访问集群中的设备的虚拟内存,这意味着应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下,数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。

3.4 异步接口

在RDMA中,提供的所有接口都是异步的通信接口,这样在编程的时候,可以更加便利的实现计算通信的分离。

4.RDMA通信协议

目前,有三种支持RDMA的通信技术:

这三种技术都可以使用同一套API来使用,但它们有着不同的物理层和链路层。
在这里插入图片描述

4.1 InfiniBand

InfiniBand(IB)是一种服务器和存储器的互联技术,它具有高速、低延迟、低CPU负载、高效率和可扩展的特性。InfiniBand的关键特性之一是它天然地支持远程直接内存访问(RDMA)。InfiniBand能够让服务器与服务器之间、服务器与存储设备之间的数据传输不需要主机CPU的参与。
InfiniBand使用I/O通道进行数据传输,每个I/O通道提供虚拟的NIC或HCA语义。InfiniBand提供了多种技术方案,每个端口的速度可以有10GB/s、40GB/s、56GB/s、100GB/s,截止目前已经达到了200GB/s。InfiniBand使用同轴电缆和光纤进行连接。

4.2 RoCE

RDMA首先从InfiniBand规范和产品里引入工业界,但是目前在企业界部署着大量基于以太网的产品,因此IBTA规范组织又定义了一套字符规范,使得RDMA不仅可以在infiniBand网络上运行,同时也可以在以太网上运行。
RoCE是基于以太网(Ethernet)的RDMA技术标准,它也是由IBTA组织指定的。RoCE为以太网提供了RDMA语义,并不需要复杂低效的TCP传输(IWARP需要)。
RoCE是现在最有效的以太网低延迟方案。它消耗很少的CPU负载,在数据中心桥接以太网中利用优先流控制(PFC)来达到网络的无损连接。
RoCE 有两个版本,RoCE v1是一种链路层协议,允许在同一个广播域下的任意两台主机直接访问。RoCE v2是一种Internet层协议,即可以实现路由功能。虽然RoCE协议这些好处都是基于融合以太网的特性,但是RoCE协议也可以使用在传统以太网网络或者非融合以太网络中。

4.3 iWARP

iWARP也是一个允许在TCP上执行RDMA的网络协议。IB和RoCE中存在的功能在iWARP中不受支持。它支持在标准以太网基础设施(交换机)上使用RDMA

5.RDMA编程概述

5.1 传输操作

RDMA有两种基本操作,包括Memory verbsMessaging verbs

5.2传输模式

按照连接和可靠两个标准,可以划分出下图四种不同的传输模式:
在这里插入图片描述

5.3相关概念

在RDMA通信的过程中,有诸多需要理解的概念,例如QP队列对、内存注册等。下面我们来着重介绍一下RDMA通信涉及到了操作和概念。

5.4典型实例

一个典型的应用程序结构如下:

  1. 获取设备列表:首先必须检查得到本机可用的IB设备列表。列表中的每个设备都包含一个名字和GUID。
  2. 打开要请求的设备:遍历设备列表,通过设备的GUID或者名字选择并打开它。
  3. 查询设备的工作能力:设备的工作能力能使用户了解已打开设备支持的特性和能力。
  4. 分配保护域以及您的资源:保护域(PD)允许用户限制哪些组件只能相互交互。这个组件可以是AH、QP、MR、MW、和SRQ。
  5. 注册一个内存区域:VPI仅适用于已注册的内存。进程的虚拟空间中任何有效的内存缓冲区都可以进行注册。在注册过程中,用户设置内存权限并接收本地和远程秘钥(lkey,rkey),稍后将使用这些秘钥来引用此内存缓冲区。
  6. 创建完成队列:一个CQ包含完成的工作请求(WR)。每个WR将生成放置在CQ中的完成队列实体CQE。CQE将制定WR是否成功完成。
  7. 创建队列对(QP):创建QP还将创建关联的发送队列和接收队列 。
  8. 提出QP:创建的QP仍无法使用,直到它转换为几个状态,最终进入Ready To Send(RTS)。者提供了QP用于 发送/接收数据所需的信息。
  9. 发布工作请求并poll完成:使用创建的QP进行通信。
  10. 清理:按照创建前述对象的相反顺序销毁对象:删除QP,删除CQ,取消注册MR,接触分配PD,关闭设备。

6.RDMA通信过程

为了执行 RDMA 操作,首选需要建立与远程主机的连接和适当的认证。实现这些的机制是队列对(QP) 。与标准的 IP 协议栈类似,一个 QP 大概等同于一个接字(socket)。 QP 需要在连接两端进行初始化。 连接管理器(CM)用来在 QP 建立之前进行 QP 信息的交换。一旦一个 QP 建立起来, verbs API 就可以用来执行 RDMA 读/写和原子操作。与套接字的读/写类似的连续收/发操作也能执行。RDMA的操作过程大致如下:

在RDMA操作中,Read/Write是单边操作,秩序本地端明确信息的源和目的地址,远端应用不必感知此次通信,数据的读或写都通过RDMA在RNIC与应用Buffer之间完成,再由远端RNIC封装成消息返回到本地端。Send/Receive是双边操作,即必须要远端的应用感知参与才能完成收发,在实际中,Send/Receive多用于连接控制类报文,而数据报文是通过Read/Write来完成的。

6.1单向通信-读Read

在这里插入图片描述

6.2 单向通信-写Write

在这里插入图片描述

6.3双向通信-Send\Recv

在这里插入图片描述

声明致谢:本文所有插图来自Mellanox官方教程文档“RDMA_Basic-16.06.01.pdf”;部分内容参考“RDMA网络编程用户手册-官方材料(中文版)v1.7”

标签:QP,流程,初识,RDMA,内存,注册,操作,远程
来源: https://blog.csdn.net/u011458874/article/details/121602188