RDMA技术浅析

  • 概述
  • 产生背景
  • 标准组织
  • 技术优势
  • 零复制
  • 内核旁路
  • CPU压力卸载
  • 基于消息的事务
  • “多对多”通信支持


概述

RDMA(Remote Direct Memory Access)也即远程直接内存访问,是一种相比传统TCP/IP技术更加精简的网络技术,可以实现数据直接从一个通信节点的内存传输到另外一个通信节点中,且无需通信双方的操作系统介入。

产生背景

传统网络大多使用TCP/IP协议栈处理网络数据,网络数据在传递过程中会经过操作系统以及中间件和驱动的等,具体如图1所示,这种处理方式需要占用大量的系统资源以及设备的内存总线带宽资源。因数据在应用内存、系统内存、处理器缓存和网络控制器缓存之间会进行多次复制和移动,进而会导致大量的CPU资源被占用。此外,在网络上数据处理的生命周期中,有多个阶段的处理速率有着严重的不匹配,比如网络带宽、处理器运行速度和内存带宽之间,故而让网络延迟效应更加严重。

RDMA技术最早出现在IB(Infiniband)网络中,这种网络主要用来承载HPC(高性能计算)集群节点之间的互联。是一种可以直接访问其他通信节点内存,同时完全卸载CPU的网络处理压力的一种技术,具体来说就是RDMA将数据直接从一个系统快速移动到远程系统的存储器中,但是不会对操作系统造成任何影响,具体的数据处理流程参考图2,所以此项技术可以简单理解为利用特定的硬件和网络技术,让网卡直接和通信对等体的内存对话,从而实现高带宽、低延迟以及低资源消耗率的效果。

rdma技术使用python拓谱 rdma技术详解_网络


rdma技术使用python拓谱 rdma技术详解_rdma技术使用python拓谱_02

标准组织

2001 年 10 月,Adaptec、Broadcom、Cisco、Dell、EMC、HP、IBM、Intel、Microsoft 和 NetApp 等10个公司宣布成立"远程直接内存访问(RDMA)联盟"。RDMA 联盟是个独立的开放组织并负责制定实施能提供TCP/IP RDMA 技术的产品以及所需的体系结构规范。

该联盟将负责为整个 RDMA 解决方案制定规范,包括 RDMA、DDP(直接数据放置)和 TCP/IP 分帧协议。RDMA 联盟可以理解为是 Internet 工程任务组(IETF)的补充。其目的是推动Internet体系结构的发展,并使Internet的运作更加顺畅。

作为RDMA联盟的成员公司和以及个人其实也都是 IETF 的积极参与者。此外,IETF还认识到了RDMA在可行网络方案中的重要性,并计划在以后几个月里成立"Internet 协议套件 RDMA"工作组。

TCP/IP RDMA 体系结构规范的 1.0 版本于 2002 年 10 月由 RDMA 联盟成员发布, TCP/IP RDMA 的最终规范将由 RDMA 联盟的业界合作伙伴及相应的业界标准组织派出的代表共同协商探讨确定。

技术优势

零复制

所谓零复制指的就是网卡可以直接与应用内存相互传输数据,从而避免在应用内存与内核之间复制和转移数据。因此,网络延迟会显著减小。

内核旁路

应用程序无需执行内核内存调用就可向网卡发送命令以及业务数据。在不需要任何内核内存参与的条件下,RDMA请求从用户空间发送到本地网卡并通过物理网络发送给远程通信节点的网卡,从而减少在处理网络业务流时,内核内存空间与用户空间之间环境切换的次数,进而减少对系统资源的消耗。

CPU压力卸载

应用程序可以直接访问远程通信设备的内存,同时不占用远程机器中的任何CPU资源。远程存储器将在无需任何干预的远程进程(或处理器)的情况下被读取。所以远程CPU中的缓存将不会被访问的内存内容填满。达到对CPU的压力卸载。

基于消息的事务

在RDMA技术体系下数据被作为离散消息处理,而不是作为数据流,这消除了应用将业务流分成不同事务的需要。在一定程度上也节约了用户空间之内的资源损耗。

“多对多”通信支持

RDMA支持读取多个内存缓冲区并将其作为一个流将其写入多个内存缓冲区。在具体的远程内存读写中,RDMA用于读写操作的远程虚拟内存地址将包含在RDMA控制消息中传送,远程应用程序要做的仅是在本地网卡中注册相应的内存缓冲区地址。这个过程作为远程节点的CPU除了在连接建立、注册调用等进程处理之外,在后续的整个RDMA业务数据传输过程中并不提供任何服务,所以并没有给CPU带来任何负载。