背景

面对高性能计算、大数据分析和浪涌型IO高并发、低时延应用,现有TCP/IP软硬件架构和应用高CPU消耗的技术特征根本不能满足应用的需求。这要有体现在处理延时过大,数十微秒;多次内存拷贝、中断处理,上下文切换、复杂的TCP/IP协议处理、网络延时过大、存储转发模式和丢包导致额外延时;如今,服务器的网络带宽越来越高。当网络带宽迈过万兆这条线后,操作系统用于处理网络IO的开销就越来越难以忽视。在一些网络IO密集的业务中,操作系统本身成为了网络通信的瓶颈,这不仅会导致调用时延的增加(尤其是长尾),还会影响到服务的整体吞吐。相对于网络带宽的发展速度,CPU性能的发展停滞是导致上述问题的主要原因。因此,想从根本上解决CPU参与网络传输的低效问题,就要更多地借助专用芯片的能力,RDMA高性能网络势不可挡。

RDMA(Remote Direct Memory Access),可以简单理解为网卡完全绕过CPU实现两个服务器之间的内存数据交换。其作为一种硬件实现的网络传输技术,可以大幅提升网络传输效率,帮助网络IO密集的业务(比如分布式存储、分布式数据库等)获得更低的时延以及更高的吞吐。具体来说,RDMA技术的应用要借助支持RDMA功能的网卡以及相应的驱动程序。由下图所示,一旦应用程序分配好资源,其可以直接把要发送的数据所在的内存地址和长度信息交给网卡。网卡从内存中拉取数据,由硬件完成报文封装,然后发送给对应的接收端。接收端收到RDMA报文后,直接由硬件解封装,取出数据后,直接放在应用程序预先指定的内存位置。由于整个IO过程无需CPU参与,无需操作系统内核参与,没有系统调用,没有中断,也无需内存拷贝,因此RDMA网络传输可以做到极高的性能。在极限benchmark测试中,RDMA的时延可以做到1us级别,而吞吐甚至可以达到200G。

RDMA是一种远端内存直接访问技术

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

RDMA最早专属于Infiniband架构,随着在网络融合大趋势下出现的RoCE和iWARP.

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的模型中,核心是如何实现应用之间最简单、高效和直接的通信。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与传统网络传输的最大不同,只需提供直接访问远程的虚拟地址,无须远程应用的参与其中,这种方式适用于批量数据传输。

小结
Infiniband的成功取决于两个因素,一是主机侧采用RDMA技术,可以把主机内数据处理的时延从几十微秒降低到几微秒,同时不占用CPU;二是InfiniBand网络的采用高带宽(40G/56G)、低时延(几百纳秒)和无丢包特性.

项目参考

RDMA(远程直接数据存取)概述相关推荐

  1. RDA实现SQL CE与SQL Server间数据存取

    本文介绍如何利用 RDA(RemoteDataAccess远程数据存取)实现掌上电脑Pocket PC(简称PPC)上的SQL Server CE 2.0与桌面SQL Server 2000数据库间的 ...

  2. lisp 线性标注自动避让_《数据标注工程》第一章学习笔记及作业:数据标注概述...

    第一章:数据标注概述 一.数据标注的起源与发展 1.人工智能行业的发展 AI的概念:意指让机器具有像人一般的智能行为(1956年,达特茅斯会议,由约翰·麦卡锡提出) AI的发展:60多年来,浮浮沉沉. ...

  3. 数据存取演变史、数据库软件应用史、数据库的本质、分类、 MySQL数据库、系统服务制作、基本的SQL语句

    数据存取演变史 1.文本文件 文本文件有两个主要的缺点:第一个就是不能保证多用户存取的文件路径一致:第二个就是不能保证多用户存取的数据格式一致 2.软件开发目录规范 软件开发目录规范规定了数据文件的大 ...

  4. 互联网金融大数据架构概述与应用 - 大数据应用案例

    如果需转载,请注明:乐投网-互联网金融大数据架构概述与应用 IBM分析事业部 IBM分析事业部是在过去一两年间逐步成型的,成立后分成了若干个小部门,如AnalyticsPlatform.CLOUDDA ...

  5. 大数据技术概述复习(一)

    大数据技术概述复习(一) 本文整理复习自用,仅供参考 引用: 1<大数据技术原理与应用(第3版)> 2 https://blog.csdn.net/weixin_45207388/arti ...

  6. JVM---运行时数据区概述

    运行时数据区概述 运行时数据区,见下图,它是在类加载完成后的阶段. 当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 , 这几个阶段完成后,就会用到执 ...

  7. 转:AIX rcp跨主机远程拷贝数据

    AIX rcp跨主机远程拷贝数据 rcp用途:在本地主机和远程主机之间或者两个远程主机之间传输文件.详细用法可man rcp查看. 现在要把主机10.200.5.200的/tmp/work.sh(属主 ...

  8. Sql Server使用链接服务器远程取数据!

    由于最近开发的一个查询系统,基本是在其它服务器的,所以在本地服务器设计了中间,用来存从远程服务器取数据!     一种方法是通过,OPENDATASOURCE来远程读取数据! SELECT   * F ...

  9. 使用文本文件(.txt)进行数据存取的技巧总结

    转自:Matlab中文论坛: www.iLoveMatlab.cn 使用文本文件(.txt)进行数据存取的技巧总结(相当的经典) 使用文本文件(.txt)进行数据存取的技巧总结 由于本帖内容较多,部分 ...

  10. 风讯dotNETCMS源码分析—数据存取篇

    前几天突然对CMS感兴趣,就去下载了风讯dotNETCMS源码.当前版本是dotnetcms1.0 sp5免费版,风讯的官方主页上可以下载. 用Visual Studio 2008打开后,初步分析了它 ...

最新文章

  1. ASP.NET MVC5 Entity Framework CodeFirst(代码优先)
  2. android 6.0 sd卡读写权限,Android 6.0 读写SD卡权限问题
  3. 为什么HashMap要树化呢?
  4. 阿里云下mysql远程访问被拒绝_记一次MySQL数据库拒绝访问的解决过程
  5. 六安市事业单位计算机基础知识,最全的事业单位考试计算机基础知识试题[1] 2...
  6. 《移动App测试的22条军规》—App测试综合案例分析23.5节测试微信App的用户体验...
  7. 华为算法精英赛(题3:概率计算)
  8. 在线JS代码调试工具JSFiddle和JSBin、菜鸟在线编辑器
  9. Oracle | Oracle初级全程学习笔记
  10. CF855G Harry Vs Voldemort 题解
  11. 《风之旅人》游戏设计思想二
  12. 在linux上运行python脚本(安装pytorch踩坑记录,pyinstaller使用方式,构建docker镜像)
  13. 【5G】5G通信网络中资源分配和负载均衡算法的matlab仿真
  14. [Unity3D]面试题集锦
  15. python flask音频流/文件服务
  16. networkx设置labels大小和颜色
  17. 水墨淡雅风格感恩节教育主题班会PPT模板
  18. win10下的Ubuntu连接SecureCRT
  19. 山寨机,攒手机,3G时代手机发展网络多媒体化的趋势
  20. 苹果隐私新政正在重塑互联网巨头的权力格局

热门文章

  1. escape()方法和unescape()方法
  2. jQuery内置函数map和each的用法
  3. IDEA2018全局搜索中搜索jar包/lib
  4. 3D VR卡镜的使用方法
  5. X64上的IIS調用32位的DLL方法
  6. 新写的一个商品比较控件CompareGrid,没有做设计视图。有兴趣的联络我。公布源码。...
  7. C#选项卡TabControl控件隐藏指定选项卡的办法,任意不支持隐藏属性的实现办法详解
  8. SpringBoot与缓存使用及原理(下)
  9. vue更新路由router-view复用组件内容不刷新
  10. 解决响应式布局border带来的麻烦