面对高性能计算、大数据分析和浪涌型IO高并发、低时延应用,现有TCP/IP软硬件架构和应用高CPU消耗的技术特征根本不能满足应用的需求。这要有体现在处理延时过大,数十微秒;多次内存拷贝、中断处理,上下文切换、复杂的TCP/IP协议处理、网络延时过大、存储转发模式和丢包导致额外延时。接下来我们继续讨论RDMA技术、原理和优势,看完文章你就会找到为什么RDMA可以更好的解决这一系列问题。

RDMA是一种远端内存直接访问技术,详细介绍请参看文章。RDMA最早专属于Infiniband架构,随着在网络融合大趋势下出现的RoCE和iWARP,这使高速、超低延时、极低CPU使用率的RDMA得以部署在目前使用最广泛的以太网上。

RDMAC(RDMA Consortium)和IBTA(InfiniBand Trade Association)主导了RDMA发展,RDMAC是IETF的一个补充并主要定义的是iWRAP和iSER,IBTA是infiniband的全部标准制定者,并补充了RoCE v1 v2的标准化。IBTA解释了RDMA传输过程中应具备的特性行为,而传输相关的Verbs接口和数据结构原型是由另一个组织OFA(Open Fabric Alliance)来完成。

相比传统DMA的内部总线IO,RDMA通过网络在两个端点的应用软件之间实现Buffer的直接传递;相比比传统的网络传输,RDMA又无需操作系统和协议栈的介入。RDMA可以轻易实现端点间的超低延时、超高吞吐量传输,而且基本不需要CPU、OS等资源介入,也不必再为网络数据的处理和搬移耗费过多其他资源。

InfiniBand通过以下技术保证网络转发的低时延(亚微秒级),采用Cut-Through转发模式,减少转发时延;基于Credit的流控机制,保证无丢包;硬件卸载;Buffer尽可能小,减少报文被缓冲的时延 。

iWARP(RDMA over TCP/IP) 利用成熟的IP网络;继承RDMA的优点;TCP/IP硬件实现成本高,但如果采用传统IP网络丢包对性能影响大。

RoCE性能与IB网络相当;DCB特性保证无丢包;需要以太网支持DCB特性;以太交换机时延比IB交换机时延要稍高一些。

RoCEv2针对RoCE进行了一些改进,如引入IP解决扩展性问题,可以跨二层组网;引入UDP解决ECMP负载分担等问题。

基于InfiniBand的RDMA是在2000年发布规范,属于原生RDMA;基于TCP/IP的RDMA称作iWARP,在 2007年形成标准,主要包括MPA/DDP/RDMAP三层子协议;基于Ethernet的RDMA叫做RoCE,在2010年发布协议,基于增强型以太网并将传输层换成IB传输层实现。

扩展RDMA API接口以兼容现有协议/应用,OFED(Open Fabrics Enterprise Distribution)协议栈由OpenFabric联盟发布,分为Linux和windows版本,可以无缝兼容已有应用。通过使已有应用与RDMA结合后,性能成倍提升。

应用和RNIC(RDMA-aware network interface controller)之间的传输接口层(Software Transport Interface)被称为Verbs。OFA(Open Fabric Alliance)提供了RDMA传输的一系列Verbs API。OFA开发了OFED(Open Fabric Enterprise Distribution)协议栈,支持多种RDMA传输层协议。

OFED向下除了提供RNIC(实现 RDMA 和LLP( Lower Layer Protocol))基本的队列消息服务外,向上还提供了ULP(Upper Layer Protocols),通过ULP上层应用不需直接和Verbs API对接,而是借助于ULP与应用对接,这样使得常见的应用不需要做修改就可以跑在RDMA传输层上。

在Infiniband/RDMA的模型中,核心是如何实现应用之间最简单、高效和直接的通信。RDMA提供了基于消息队列的点对点通信,每个应用都可以直接获取自己的消息,无需操作系统和协议栈的介入。

消息服务建立在通信双方本端和远端应用之间创建的Channel-IO连接之上。当应用需要通信时,就会创建一条Channel连接,每条Channel的首尾端点是两对Queue Pairs(QP),每对QP由Send Queue(SQ)和Receive Queue(RQ)构成,这些队列中管理着各种类型的消息。QP会被映射到应用的虚拟地址空间,使得应用直接通过它访问RNIC网卡。除了QP描述的两种基本队列之外,RDMA还提供一种队列Complete Queue(CQ),CQ用来知会用户WQ上的消息已经被处理完。

RDMA提供了一套软件传输接口,方便用户创建传输请求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在RNIC与应用Buffer之间完成,再由远端RNIC封装成消息返回到本端。在实际中,SEND/RECEIVE多用于连接控制类报文,而数据报文多是通过READ/WRITE来完成的。

对于双边操作为例,主机A向主机B(下面简称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,实际上对于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与传统网络传输的最大不同,只需提供直接访问远程的虚拟地址,无须远程应用的参与其中,这种方式适用于批量数据传输。

1.Infiniband的成功取决于两个因素,一是主机侧采用RDMA技术,可以把主机内数据处理的时延从几十微秒降低到几微秒,同时不占用CPU;二是InfiniBand网络的采用高带宽(40G/56G)、低时延(几百纳秒)和无丢包特性
    2.随着以太网的发展,也具备高带宽和无丢包能力,在时延方面也能接近InfiniBand交换机的性能,所以RDMA over Ethernet(RoCE)成为必然,且RoCE组网成本更低。未来RoCE、iWARP和Infiniband等基于RDMA技术产品都会得到长足的发展。

rdma-core

指开源RDMA用户态软件协议栈,包含用户态框架、各厂商用户态驱动、API帮助手册以及开发自测试工具等。rdma-core在github上维护https://github.com/linux-rdma/rdma-core,我们的用户态Verbs API实际上就是它实现的。

kernel RDMA subsystem
指开源的Linux内核中的RDMA子系统,包含RDMA内核框架及各厂商的驱动。RDMA子系统跟随Linux维护,是内核的的一部分。一方面提供内核态的Verbs API,一方面负责对接用户态的接口。

OFED

全称为OpenFabrics Enterprise Distribution,是一个开源软件包集合,其中包含内核框架和驱动、用户框架和驱动、以及各种中间件、测试工具和API文档。

开源OFED由OFA组织负责开发、发布和维护,它会定期从rdma-core和内核的RDMA子系统取软件版本,并对各商用OS发行版进行适配。除了协议栈和驱动外,还包含了perftest等测试工具。

源码仓:https://github.com/linux-rdma/

除了开源OFED之外,各厂商也会提供定制版本的OFED软件包,比如华为的HW_OFED和Mellanox的MLNX_OFED。这些定制版本基于开源OFED开发,由厂商自己测试和维护,会在开源软件包基础上提供私有的增强特性,并附上自己的配置、测试工具等。

以上三者是包含关系。无论是用户态还是内核态,整个RDMA社区非常活跃,框架几乎每天都在变动,都是平均每两个月一个版本。而OFED会定期从两个社区中取得代码,进行功能和兼容性测试后发布版本,时间跨度较大,以年为单位计

RDMA技术--华为精华相关推荐

  1. DMA RDMA 技术详解

    DMA 技术是一个 直接内存访问技术. 在传统的linux 内存读写操作都必须经过cpu,读写寻址都是有cpu 完成的, 现在有一中技术 让数据读写完全由网卡自己完成. 这样就必须有硬件支持,及系统必 ...

  2. RDMA技术详解——RDMA常见概念

    Fabric A local-area RDMA network is usually referred to as a fabric. 所谓Fabric,就是支持RDMA的局域网(LAN). CA( ...

  3. RDMA技术详解(一):RDMA概述

    1. DMA和RDMA概念 1.1 DMA DMA(直接内存访问)是一种能力,允许在计算机主板上的设备直接把数据发送到内存中去,数据搬运不需要CPU的参与. 传统内存访问需要通过CPU进行数据copy ...

  4. 用GPUDirect RDMA技术做的代码测试

    用GPUDirect RDMA技术做的代码测试 [复制链接]     sisiy 电梯直达 楼主 发表于 2015-7-13 21:06:28|只看该作者 要应用GPUDirect RDMA技术,首先 ...

  5. 一文带你初识RDMA技术——RDMA概念,特点,协议,通信流程

    文章目录 1.RDMA概念 2.RMDA与Socket 2.1传统的TCP/IP通信 2.2TCP/IP存在的问题 3.RDMA的特点 3.1CPU offload 3.2kernel bypass ...

  6. RDMA技术详解——原理和三种实现方式

    RDMA作为一种host-offload, host-bypass技术,使低延迟.高带宽的直接的内存到内存的数据通信成为了可能.目前支持RDMA的网络协议有: 1.InfiniBand(IB): 从一 ...

  7. 了解Infiniband和RDMA技术

    了解Infiniband和RDMA技术 InfiniBand涉及两个不同的事物. 第一个是用于InfiniBand网络的物理链路层协议. 第二个是称为InfiniBand Verbs API的高级编程 ...

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

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

  9. 【RDMA】RDMA技术详解(二):Send Receive操作

    原文:https://blog.csdn.net/qq_21125183/article/details/86525012 英文:https://zcopy.wordpress.com/2010/10 ...

最新文章

  1. 推荐使用的几款Java常用基础工具库
  2. 论文:贝叶斯优化算法和应用综述(2)--概率模型和采集函数的介绍以及综述列表
  3. android 半透明pop,Android实现AppCompatActivity全屏半透明
  4. oracle 打印SQL
  5. 笔记-高项案例题-2016年上-整体管理+风险管理
  6. Socket支持多用户并发访问的解决办法
  7. PowerDesigner中设置数据库类型,设置default value,Comment,自增属性,以及数据库设计中的需要考虑的示项,带有小数点的数据显示
  8. P2158,jzoj1709-仪仗队【欧拉函数,数论】
  9. 如何在本地管理和切换多个 github 账号?
  10. 公众号文章批量导出工具
  11. couchbase php,轻松搞定|将PHP和Couchbase应用部署为Docker
  12. 支付宝VS微信支付竞品分析
  13. 【ZeloEngine】反射系统填坑小结
  14. 输出两个数之间的水仙花数C++
  15. 如何在debian上安装google pingyin
  16. 【Jailhouse 文章】Certify the Uncertified Towards Assessment of Virtualization for Mixed-criticality...
  17. [ 2204阅读 ] 句子简化题 | 细节题 | 排除题 | 推理题 | 目的题 | 句子插入题 | 总结题
  18. Xftp的安装与使用
  19. python通过批量经纬度生成标记地图生成
  20. 土木工程转专业,上岸趣头条、今日头条后端开发,学习历程分享

热门文章

  1. 数据库之操作MySQL
  2. 1078 加油站加油
  3. 任意模数ntt_MTT:任意模数NTT
  4. 【mcuclub】模数转换ADC0832
  5. nginx安装部署和配置管理
  6. 2022年系统集成项目管理工程师考试知识点:区块链
  7. python爬取网易云评论最多的歌_python爬取网易云音乐评论
  8. 2022年的5G行业:“5G+”很火,5G网络迟迟未能普及
  9. 蒟蒻的五周总结(解释引用)《挑战》
  10. 很有意思的几个考验知识广度的问题