1.DMA
DMA全称为Direct Memory Access,即直接内存访问。意思是外设对内存的读写过程可以不用CPU参与而直接进行。
在DMA模式下,大大降低了CPU COPY的开销。
![img](https://i-blog.csdnimg.cn/blog_migrate/42e79c58a8811b83c1dada770206a2e0.jpeg)
假设I/O设备需要访问内存获取数据:
-
没有DMA:
-
CPU将内存缓存区的数据复制一份到自己内部的寄存器中。
-
CPU再将自己内部寄存器中复制的数据复制到I/O设备存储空间中。
-
-
有DMA:
- DMA控制器将内存缓存区的数据复制一份到自己内部的寄存器中。
- DMA控制器再将自己内部寄存器中复制的数据复制到I/O设备存储空间中。
在DMA模式下,除了一些必要的控制命令外,整个数据复制过程都是由DMA控制器完成的。
CPU的最主要工作是计算,而不是进行数据复制,这种工作属于白白浪费了它的计算能力。
DMA控制器一般是和I/O设备在一起的,例如一块网卡中既有负责数据收发的模块,也有DMA模块。
2.什么是RDMA
offload:指的是将一个本来有软件实现的功能放到硬件上来实现,这样就可以将本来在操作系统上进行的一些数据包处理(如分片、重组等)放到网卡硬件上去做,降低系统CPU消耗的同时,提高处理性能。
RDMA( Remote Direct Memory Access )意为远程直接地址访问,通过RDMA,本端节点可以“直接”访问远端节点的内存。所谓直接,指的是可以像访问本地内存一样,绕过传统以太网复杂的TCP/IP网络协议栈读写远端内存,而这个过程对端是不感知的,而且这个读写过程的大部分工作是由硬件而不是软件完成的。
过程如下图:
传统模式下:
“节点A给节点B发消息”实际上做的是“把节点A内存中的一段数据,通过网络链路搬移到节点B的内存中”,而这一过程无论是发端还是收端,都需要CPU的指挥和控制,包括网卡的控制,中断的处理,报文的封装和解析等等。
流程如下:
- 发送端:
- CPU将内存用户空间中缓冲区的数据拷贝至内存内核空间中的缓冲区中(这期间数据会经过软件实现的TCP/IP协议栈,加上各层头部和校验码,比如TCP头,IP头等)
- 网卡通过DMA拷贝内核中的数据到网卡内部的缓冲区中,进行处理后通过物理链路发送给对端。
- 接收端(进行相反的过程)
- 通过DMA,从网卡的内部缓冲区将数据拷贝出来至内存的内核空间
- CPU会通过TCP/IP协议栈对其进行解析,将数据从内存空间取出来拷贝到用户空间中
可以发现,即使在DMA技术的帮助下,仍然对CPU有具有很强的依赖。
RDMA模式下:
流程如下:
-
发送端:
通过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的网络协议有:
- InfiniBand(IB): 从一开始就支持RDMA的新一代网络协议。由于这是一种新的网络技术,因此需要支持该技术的网卡和交换机。
- RDMA过融合以太网(RoCE): 即RDMA over Ethernet, 允许通过以太网执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡必须是支持RoCE的特殊的NIC。
- 互联网广域RDMA协议(iWARP): 即RDMA over TCP, 允许通过TCP执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡要求是支持iWARP(如果使用CPU offload的话)的NIC。否则,所有iWARP栈都可以在软件中实现,但是失去了大部分的RDMA性能优势。
参考
- RDMA技术详解(一):RDMA概述 - 围城的文章 - 知乎 https://zhuanlan.zhihu.com/p/55142557
- RDMA概述 - Savir的文章 - 知乎 https://zhuanlan.zhihu.com/p/138874738