【碎碎念】- 什么是RDMA

549 阅读4分钟

image.png

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

前言

RDMA是DMA的演进或者是一种实现,DMA技术中,外部设备如网卡如果能够绕过CPU而直接访问系统的内存,而RDMA技术则是Remote Direct Memory Access的简称,全称是远程直接内存访问,相较于DMA技术,Remote不仅可以访问本地主机的内存,还可以访问一台远程主机上的用户系统。该技术是为了解决网络传输中服务端数据处理的延迟产生的。在对方主机CPU不直接参与的情况下远程读写异地内存,无内核干预和内存拷贝的发生。

TCP/IP结构下存在的问题

  • 两个应用之间通讯,数据发送方要将数据从用户空间拷贝到内核空间
  • 然后在内核中添加数据头部,进行封装,通过一系列数据封装操作,包括传输层的TCP\UDP头部,网络层的IP头部、数据链路层的以太网头部,以及互联网中ARP,ICMP等多个协议的加持下,数据能够从内核传输到NIC网卡的缓冲区中,分片发送到互联网中。
  • 在消息接收方,收到远程主机发送过来的数据包后,首先会从网卡的缓冲区拷贝到用户内核空间。
  • 然后根据根据网络协议进行数据包解封装,解析后的数据被拷贝到应用进程中,这就是一般TCP/IP的通信工作流程。

image.png

瓶颈

同CPU与内存之间的数据瓶颈一样,CPU通过cache进行数据缓冲,而目前网速越来越快,在高速的网络环境下网络IO相关的主机处理数据的速度成为制约机器与传输带宽的瓶颈

  • 造成这个问题的原因有2个,其中需要在内核中频繁的进行协议的封装与解封装操作,造成很大的数据移动复制的开销,这是由于处理数据包的过程中需要占用大量的服务器资源和内存总线带宽,数据在内存、处理器缓存和网络控制器缓存中间来回的进行复制和移动,给服务器CPU和内存造成了沉重的负担,尤其是网络带宽、处理器速度和内存带宽三者严重不匹配的情况下。
  • 网络通信协议的解封装在内核完成操作,这种方式很难适应新的环境与新的协议。

image.png

RDMA的优势

RDMA的原理是利用栈旁路和零拷贝技术提供低延迟特点,减少了CPU占用,提供了更高的带宽利用率,RDMA提供了基于IO的通道,这种通道允许一个应用程序通过RDMA设备对远程的虚拟内存进行直接读写。

RDMA的网络协议

  • infiniband:支持RDMA的新一代网络协议,由于这是一种新的网络技术,因此需要使用RDMA的专用的网卡和交换机
  • RDMA OVER Converged Ethernet:基于现有以太网实现的RDMA,底层网络包头依旧是普通的以太网包头,上层网络包头则是infiniband包头,因此需要有支持RoCE网卡,就可以在标准以太网基础上实现RDMA
  • Internet Wide Area RDMA Protocol(iWRP)直接将RDMA实现在TCP上,这允许在标准以太网的基础架构上使用RDMA。

image.png

RDMA的特点

  • CPU bypass
    • 无需CPU干预,应用程序可以直接访问远端的主机内存
  • Kenel bypass
    • 应用程序直接在用户态情况下进行数据传输,不需要再内核态和用户态之间进行上下文切换
  • Zero Copy
    • 避免CPU将数据从一个存储拷贝到另一块存储。而在TCP/IP协议下,数据通信需要进行频繁的拷贝操作。每个应用程序都能够直接访问集群中的设备的虚拟内存,应用程序能够直接执行数据传输。

对比:

image.png