RDMA学习笔记

1.DMA

DMA全称为Direct Memory Access,即直接内存访问。意思是外设对内存的读写过程可以不用CPU参与而直接进行

在DMA模式下,大大降低了CPU COPY的开销。

img

假设I/O设备需要访问内存获取数据:

img

  • 没有DMA:

    1. CPU将内存缓存区的数据复制一份到自己内部的寄存器中。

    2. CPU再将自己内部寄存器中复制的数据复制到I/O设备存储空间中。

    img

  • 有DMA:

    1. DMA控制器将内存缓存区的数据复制一份到自己内部的寄存器中。
    2. DMA控制器再将自己内部寄存器中复制的数据复制到I/O设备存储空间中。

在DMA模式下,除了一些必要的控制命令外,整个数据复制过程都是由DMA控制器完成的。

CPU的最主要工作是计算,而不是进行数据复制,这种工作属于白白浪费了它的计算能力。

DMA控制器一般是和I/O设备在一起的,例如一块网卡中既有负责数据收发的模块,也有DMA模块。

2.什么是RDMA

offload:指的是将一个本来有软件实现的功能放到硬件上来实现,这样就可以将本来在操作系统上进行的一些数据包处理(如分片、重组等)放到网卡硬件上去做,降低系统CPU消耗的同时,提高处理性能。

RDMA( Remote Direct Memory Access )意为远程直接地址访问,通过RDMA,本端节点可以“直接”访问远端节点的内存。所谓直接,指的是可以像访问本地内存一样,绕过传统以太网复杂的TCP/IP网络协议栈读写远端内存,而这个过程对端是不感知的,而且这个读写过程的大部分工作是由硬件而不是软件完成的。

过程如下图:

img

传统模式下:

“节点A给节点B发消息”实际上做的是“把节点A内存中的一段数据,通过网络链路搬移到节点B的内存中”,而这一过程无论是发端还是收端,都需要CPU的指挥和控制,包括网卡的控制,中断的处理,报文的封装和解析等等。

流程如下:

  • 发送端:
    1. CPU将内存用户空间中缓冲区的数据拷贝至内存内核空间中的缓冲区中(这期间数据会经过软件实现的TCP/IP协议栈,加上各层头部和校验码,比如TCP头,IP头等)
    2. 网卡通过DMA拷贝内核中的数据到网卡内部的缓冲区中,进行处理后通过物理链路发送给对端。
  • 接收端(进行相反的过程)
    1. 通过DMA,从网卡的内部缓冲区将数据拷贝出来至内存的内核空间
    2. CPU会通过TCP/IP协议栈对其进行解析,将数据从内存空间取出来拷贝到用户空间中

可以发现,即使在DMA技术的帮助下,仍然对CPU有具有很强的依赖。

RDMA模式下:

img

流程如下:

  • 发送端:

    ​ 通过DMA直接将内存中用户空间拷贝数据至RDMA网卡的内部存储空间中。

    ​ 然后硬件进行各层报文的组装(本来由CPU来做)后,通过物理链路发送到对端网卡。

  • 接收端

    ​ RDMA网卡收到数据后,剥离各层报文头和校验码,通过DMA将数据直接拷贝到用户空间内存中。

3.RDMA的优势

用途:RDMA主要应用在高性能计算(HPC)领域和大型数据中心当中,但设备相对普通以太网卡要昂贵不少(。由于使用场景和价格的原因,RDMA与普通开发者和消费者的距离较远,目前主要是一些大型互联网企业在部署和使用。

传统的TCP/IP技术在数据包处理过程中,要经过操作系统及其他软件层,需要占用大量的服务器资源和内存总线带宽,数据在系统内存、处理器缓存和网络控制器缓存之间来回进行复制移动,给服务器的CPU和内存造成了沉重负担。尤其是网络带宽、处理器速度与内存带宽三者的严重"不匹配性",更加剧了网络延迟效应。

RDMA是一种新的直接内存访问技术,RDMA让计算机可以直接存取其他计算机的内存,而不需要经过处理器的处理。RDMA将数据从一个系统快速移动到远程系统的内存中,而不对操作系统造成任何影响。

其优势来源与它的以下特点:

  • Zero-copy 零拷贝

    ​ 由于Linux等操作系统将内存划分为用户空间和内核空间,在传统的Socket通信流程中CPU需要多次把数据在内存中来回拷贝。而通过RDMA技术,在不涉及到网络软件栈的情况下,数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。

  • Kernel bypass 内核旁路

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

  • ~0 CPU involvement 几乎不需要CPU干预

    ​ 指的是可以在远端节点CPU不参与通信的情况下(当然要持有访问远端某段内存的“钥匙”才行)对内存进行读写,这实际上是把报文封装和解析放到硬件中做了。而传统的以太网通信,双方CPU都必须参与各层报文的解析,如果数据量大且交互频繁,对CPU来讲将是一笔不小的开销,而这些被占用的CPU计算资源本可以做一些更有价值的工作。

    ​ 通信领域两大出场率最高的性能指标就是“带宽”和“时延”。简单的说,所谓带宽指的是指单位时间内能够传输的数据量,而时延指的是数据从本端发出到被对端接收所耗费的时间。因为上述几个特点,相比于传统以太网,RDMA技术同时做到了更高带宽和更低时延,所以其在带宽敏感的场景——比如海量数据的交互,时延敏感——比如多个计算节点间的数据同步的场景下得以发挥其作用。

4.RDMA 三种不同的硬件实现

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

  1. InfiniBand(IB): 从一开始就支持RDMA的新一代网络协议。由于这是一种新的网络技术,因此需要支持该技术的网卡和交换机。
  2. RDMA过融合以太网(RoCE): 即RDMA over Ethernet, 允许通过以太网执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡必须是支持RoCE的特殊的NIC。
  3. 互联网广域RDMA协议(iWARP): 即RDMA over TCP, 允许通过TCP执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡要求是支持iWARP(如果使用CPU offload的话)的NIC。否则,所有iWARP栈都可以在软件中实现,但是失去了大部分的RDMA性能优势。

参考

  1. RDMA技术详解(一):RDMA概述 - 围城的文章 - 知乎 https://zhuanlan.zhihu.com/p/55142557
  2. RDMA概述 - Savir的文章 - 知乎 https://zhuanlan.zhihu.com/p/138874738
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值