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发送数据的流程如下:

1. 首先,A和B都要创建并初始化好各自的QP,CQ

2. A和B分别向自己的WQ中注册WQE,对于A,WQ=SQ,WQE描述指向一个等到被发送的数据;对于B,WQ=RQ,WQE描述指向一块用于存储数据的buffer。

3. A的RNIC异步调度轮到A的WQE,解析到这是一个SEND消息,从buffer中直接向B发出数据。数据流到达B的RNIC后,B的WQE被消耗,并把数据直接存储到WQE指向的存储位置。

4. AB通信完成后,A的CQ中会产生一个完成消息CQE表示发送完成。与此同时,B的CQ中也会产生一个完成消息表示接收完成。每个WQ中WQE的处理完成都会产生一个CQE。

    双边操作与传统网络的底层buffer pool类似,收发双方的参与过程并无差别,区别在零拷贝、kernel bypass,实际上传统网络中一些高级的网络SOC已经实现类似功能。对于RDMA,这是一种复杂的消息传输模式,多用于传输短的控制消息。

对于单边操作,以存储网络环境下的存储为例(A作为文件系统,B作为存储介质):

1. 首先A、B建立连接,QP已经创建并且初始化。

2. 数据被存档在A的buffer地址VA,注意VA应该提前注册到A的RNIC,并拿到返回的local key,相当于RDMA操作这块buffer的权限。

3. A把数据地址VA,key封装到专用的报文传送到B,这相当于A把数据buffer的操作权交给了B。同时A在它的WQ中注册进一个WR,以用于接收数据传输的B返回的状态。

4. B在收到A的送过来的数据VA和R_key后,RNIC会把它们连同存储地址VB到封装RDMA READ,这个过程A、B两端不需要任何软件参与,就可以将A的数据存储到B的VB虚拟地址。

5. B在存储完成后,会向A返回整个数据传输的状态信息。

    单边操作传输方式是RDMA与传统网络传输的最大不同,提供直接访问远程的虚拟地址,无须远程应用的参与,这种方式适用于批量数据传输。

Verbs

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. vSphere 6.5 支援 RDMA (RoCE v1 及 RoCE v2)

2. RDMA的原理、传输与Verbs

3. 配置 INFINIBAND 和 RDMA 网络

转载于:https://www.cnblogs.com/echo1937/p/7017757.html

RDMA的原理、传输与Verbs相关推荐

  1. 详谈RDMA技术原理和三种实现方式

    ​导读:远程直接内存访问(即RDMA)是一种直接内存访问技术,它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入.RDMA最早在Infiniband传输网络上实现,后来业界厂家把 ...

  2. 网络原理 --- 传输层Ⅱ TCP协议中的确认应答,超时重传和连接管理

    文章目录 网络原理 传输层 TCP 协议 TCP的基本特性 1.确认应答 2.超时重传 3.连接管理 ❗❗①建立连接(三次握手) ②断开连接(四次挥手) 总结 网络原理 介绍TCP/IP协议中每一层里 ...

  3. 简述tcp协议三报文握手过程_华为原理 | 传输层协议amp;交换转发原理

    Interface GigabitEthernet0/0/0 ip address 12.1.1.2 255.255.255.0 arp-proxy enable \\华为接口下默认没有开启代理ARP ...

  4. RDMA Mellanox官方使用VPI verbs API的例子

    来源:Mellanox RDMA文档中的样例 编译库的需求:libibverbs 编译参数:GCC <文件名> -o service -libverbs 运行方式: 1. 有IB网络支持: ...

  5. 网络原理 | 传输层重点协议之TCP协议(TCP连接的三次握手与四次挥手、TCP的安全机制与效率机制)

    目录 TCP协议 安全机制 确认应答机制 超时重传机制 连接管理机制 三次握手 四次挥手 流量控制机制 ​编辑拥塞控制机制 效率机制 滑动窗口机制 延迟应答机制 捎带应答机制 TCP协议 · 传输层的 ...

  6. 计算机网络原理-传输层

    传输服务 传输层是整个协议层次结构的核心,传输层位于网络层和应用之间,在终端用户之间提供透明数据传输,向上层提供可靠的数据传输服务,如图所示.网络层是通信子网的最高层,但却无法保证通信子网或路由器提供 ...

  7. 10.6 Git 内部原理 - 传输协议

    传输协议 Git 可以通过两种主要的方式在版本库之间传输数据:"哑(dumb)"协议和"智能(smart)"协议. 本节将会带你快速浏览这两种协议的运作方式. ...

  8. 12. RDMA之Verbs

    转自:https://zhuanlan.zhihu.com/p/329198771 概述 Verbs直译过来是"动词"的意思,它在RDMA领域中有两种含义: 1) 由IB规范所描述 ...

  9. 【RDMA】12. RDMA之Verbs|OFED

    目录 verbs源码 相关名词解释 Verbs API是什么 设计Verbs API的原因 Verbs API所包含的内容 使用Verbs API编写RDMA应用程序 官方示例程序 参考文献 [RDM ...

  10. 【RDMA】RDMA编程 和相关资料

    目录 RDMA的学习环境搭建 RDMA与socket的类比 RDMA编程流程 RDMA编程2 RDMA学习路线总结 简介--什么是rdma 编程环境 推荐编程库 编程参考手册 相关资料和代码参考 rd ...

最新文章

  1. 从5个经典工作开始看语义SLAM
  2. AI 3.0》王飞跃教授推荐序——未来智能:人有人用,机有机用
  3. 深入剖析Redis系列(七) - Redis数据结构之列表
  4. IronRuby and ASP.NET MVC
  5. OpenCV使用Shi-Tomasi方法检测拐角的实例(附完整代码)
  6. new Date('2014/04/30') 和 new Date('2014-04-30') 的区别
  7. C语言基础知识之基本数据类型相关的总结
  8. ubuntu镜像添加jdk_docker基础镜像ubuntu添加jdk1.8
  9. Scrapy简单入门及实例讲解
  10. java虚拟机之内存模型
  11. 三方演化博弈复制动态方程matlab仿真(输入参数较多时)——matlab2016a版本
  12. 软件推荐,强力卸载软件geek uninstaller
  13. 从零开始学凸优化理论与KKT条件
  14. 亚里士多德对于知识的分类
  15. 1072 开学寄语 Python实现
  16. Kotlin中对象检查判断
  17. AM5728-Uboot SPL 代码走读
  18. MySQL索引(最左匹配查询规则)
  19. 配置maven的中央仓库mirro镜像
  20. 计算机应用方面中文学术论文写作详细总结

热门文章

  1. Quick-Cocos2d-x初学者游戏教程(五) --------------------- 辅助工具和跳转场景
  2. DataRow[] /数组转换datatable!
  3. Midletinfo-探索手机javaME系统信息的实用工具
  4. mysql中导出sql文件_MySQL中导入导出sql文件
  5. 家用计算机选购,家用电脑该如何选择?什么配置比较好?看完这篇文章你就懂了...
  6. 谈谈Linux的栈回溯与妙用
  7. CentOS 7下编译FreeSWITCH 1.6
  8. linux应用编程--思维导图
  9. 单词数 HDU - 2072 (字典树)
  10. K - 迷宫问题 POJ - 3984(广度搜索)