什么是 RDMA
RDMA(Remote Direct Memory Access)指的是远程直接内存访问,这是一种通过网络在两个应用程序之间搬运缓冲区里的数据的方法。
-
Remote:数据通过网络与远程机器间进行数据传输。
-
Direct:没有内核的参与,有关发送传输的所有内容都卸载到网卡上。
-
Memory:在用户空间虚拟内存与网卡直接进行数据传输不涉及到系统内核,没有额外的数据移动和复制。
-
Access:send、receive、read、write、atomic 等操作。
RDMA 与传统的网络接口不同,因为它绕过了操作系统内核。这使得实现了 RDMA 的程序具有如下特点:
-
绝对的最低时延
-
最高的吞吐量
-
最小的 CPU 足迹 (也就是说,需要 CPU 参与的地方被最小化
RDMA 工作原理
传统的 TCP/IP 通信过程如下:
-
把收到的数据包缓存到系统上,数据包经过处理后,相应数据被分配到一个 TCP 连接。
-
接收系统再把主动提供的 TCP 数据同相应的应用程序联系起来,并将数据从系统缓冲区拷贝到目标存储地址。
由此可见在发送和接收数据的过程中,数据在源端应用层从上向下逐层拷贝封装,目的端从下向上拷贝和解封装,所以比较慢,而且需要 CPU 参与的次数很多。
RDMA 的工作过程如下:
-
当一个应用执行 RDMA 读或写请求时,不执行任何数据复制。在不需要任何内核内存参与的条件下,RDMA 请求从运行在用户空间中的应用中发送到本地网卡。
-
网卡读取缓冲的内容,并通过网络传送到远程网卡。
-
在网络上传输的 RDMA 信息包含目标机器虚拟内存地址和数据本身。请求完成可以完全在用户空间中处理(通过轮询用户空间的 RDMA 完成队列)。RDMA 操作使应用可以从一个远程应用的内存中读数据或向这个内存写数据。
支持 RDMA 的网络协议
RDMA 作为一种 host-offload,host-bypass 技术,使低延迟、高带宽的直接的内存到内存的数据通信成为了可能。目前支持 RDMA 的网络协议有:
-
InfiniBand(IB):从一开始就支持 RDMA 的新一代网络协议。由于这是一种新的网络技术,因此需要支持该技术的网卡和交换机。
-
RDMA 过融合以太网(RoCE):即 RDMA over Converged Ethernet,允许通过以太网执行 RDMA 的网络协议。这允许在标准以太网基础架构(交换机)上使用 RDMA,只不过网卡必须是支持 RoCE 的特殊的网卡。
-
互联网广域 RDMA 协议(iWARP):即 Internet Wide Area RDMA Protocol,其实也就是 RDMA over TCP,允许通过 TCP 执行 RDMA 的网络协议。这允许在标准以太网基础架构(交换机)上使用 RDMA,只不过网卡要求是支持 iWARP(如果使用 CPU offload 的话)的网卡。否则,所有 iWARP 栈都可以在软件中实现,但是失去了大部分的 RDMA 性能优势。