RDMA简介相关内容

RDMA(Remote Direct Memory Access)是一种高效网络通信技术,允许两台或多台计算机之间直接进行内存访问,减少CPU干预和数据复制。相比传统TCP/IP,RDMA具有零拷贝、内核旁路和低延迟等优势。它基于消息传输而非字节流,利用发送队列和接收队列实现异步传输。支持RDMA的网络协议包括InfiniBand、RoCE和iWARP。InfiniBand是最直接的支持者,而RoCE和iWARP则分别在以太网和TCP上实现RDMA。RDMA内存注册和数据操作是其关键概念,内存注册后,数据传输不受CPU和操作系统干预。

RDMA简介

DMA

简单的说一下DMA(Direct Memory Access),直接内存访问。

即通过DMA Enigne 能够将主板上的设备数据不通过CPU直接将数据搬运到内存当中。

DMA的工作信息,可以通过一个简单的图来进行表示:

在这里插入图片描述

两个buffer不通过CPU的搬运。而是通过DMA Engine 将数据进行搬运,并且在数据搬运结束之后通知CPU

RDMA

RDMA(Remote Direct Memory Access)即两台或者多台计算机进行通信的时候,从一台主机的内存直接访问到另一台主机(不通过常规的TCP/IP网络栈,也不用借助CPU的计算,只需要注册好双方的内存之后就可以进行内存的数据传输)。

下面还是一张RDMA的解释图:
在这里插入图片描述

NIC也就是RDMA的Engine,在实际硬件上面的体现也就是一种特殊的网卡,能够直接支持RDMA特有的网络协议(下面会进行介绍)进行传输的工作。

RDMA的相关优势点

比较原来网络传输采用的TCP/IP协议,RDMA有如下的相关优势:

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

优点:

**零拷贝(Zero-copy):**应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。

内核旁路(Kernel bypass): 数据传输直接在用户层来进行传输,无须进行进入内核态,也不用进行系统内存

不需要CPU干预(No CPU involvement): 一旦应用已经系统上注册了RDMA对应的内存。之后,再进行数据传输就不需要CPU进行干预。也就是不需要再想TCP/IP一样进行拥塞避免等操作。

消息基于事务(Message based transactions): 不像TCP/IP协议一样基于字节流进行传输,RDMA的协议是通过一个消息来进行传输,处理消息和存储消息的位置自然是各种消息队列。

支持分散/聚合条目(Scatter/gather entries support): RDMA原生态支持分散/聚合。也就是说,读取多个内存缓冲区然后作为一个流发出去或者接收一个流然后写入到多个内存缓冲区里去。

RDMA基于消息而不是基于字节流(异步传输)

RDMA在传输数据的时候,主要有这么几个队列起着作用:
发送队列(SQ) Send Queue

接收队列(RQ) Receive Queue

SQ和RQ都统称为任务队列(WQ)

还有一个队列,完成队列CQ中获取工作完成(WC)

具体的消息发送过程可以通过生产者-消费者模型来解释。用一张图来解释这个传输数据的过程:
在这里插入图片描述

  1. Host作为Consumer,生产出一个Work Request (WR)交给Work Queue(WQ)。
  2. RDMA去WQ中消耗WR。
  3. RDMA消耗完成后往CQ放入WC(任务完成消息)。
  4. Host从CQ接收WC的内容。

支持RDMA的网络协议

06-12
### RDMA技术及其相关实现 RDMA(Remote Direct Memory Access)是一种高效的网络通信技术,允许网络中的计算机直接访问远程计算机的内存,而无需经过远程计算机的CPU。这种技术显著减少了数据传输的延迟和CPU负载,特别适合于高性能计算和大数据系统[^1]。 在研究中,Kalia等人提出了FaSST系统,该系统利用RDMA的双面(Two-sided)数据报远程过程调用(RPCs),实现了快速、可扩展且简单的分布式事务处理[^1]。FaSST的设计核心在于通过RDMA减少网络开销,并提供低延迟的数据访问能力。 此外,有研究探讨了NUMA架构与RDMA分布式系统的相似性,并提出了一种基于RDMA的分布式共享内存实现方法[^2]。这种方法将远程内存视为NUMA节点的一部分,从而简化了算法设计。然而,这种方法并未深入分析内存局部性对性能的影响以及NUMA与RDMA之间的相互作用。 Infiniswap是另一种基于RDMA的创新技术,它通过在网络中映射并利用远程空闲内存,加速了内存密集型应用程序的运行[^3]。具体而言,当服务器内存不足时,Infiniswap会绕过远程CPU,直接利用网络接口卡(NIC)的RDMA功能访问远程系统的空闲内存,从而形成一个去中心化的内存网络。 以下是一个简单的代码示例,展示如何使用RDMA进行远程内存访问: ```python import rdma def rdma_read(remote_address, length): # 初始化RDMA连接 connection = rdma.connect() # 执行远程内存读取 data = connection.read(remote_address, length) # 关闭连接 connection.close() return data def rdma_write(remote_address, data): # 初始化RDMA连接 connection = rdma.connect() # 执行远程内存写入 connection.write(remote_address, data) # 关闭连接 connection.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值