什么是DMA

直接内存访问

IO设备为普通网卡时

有DMA设备时,相当于做cpu所作工作,对于外界来说内存和IO设备可以直接通信

什么是RDMA

a

传统网络做的相当于,将A内存中的数据搬运到B中去,其中网卡处理、中断处理、报文封装和解析都需要CPU去做

为什么会比起DMA多一段?

因为数据要经过内核协议栈的处理,所以cpu需要将内存种数据拷贝到内核协议栈,然后经过tcp/ip协议栈处理为数据包,随后才能通过DMA copy给我们的网卡,然后才在网卡上进行成帧操作

网卡经过传统网络发送至对端网卡,进行反向接收:

  1. 将数据DMA copy给内核空间缓冲区,cpu进行内核协议栈的处理
  2. cpu将处理后的数据拷贝到用户空间中,完成一次通信

核心问题

即使有了DMA可以进行网卡和内存的直接通信,协议栈的处理仍然需要内核态的参与,对cpu有很强依赖性

使用RDMA的网络通信

CPU基本不参与数据传输过程(只参与控制面),本端网卡直接从内存用户空间DMA copy到内部的存储空间,然后通过硬件进行协议栈的各层组装,通过物理链路发送至对方网卡,进行反向收包。

RDMA的优势

RDMA主要用于HPC和大型数据中心当中,设备相对于普通以太网网卡要昂贵不少(例如Mellanox的PCIe网卡市价再4000元以上,目前大型互联网企业在使用

0拷贝

不需要再用户空间和内核空间中来回复制数据

再传统socket通信流程中CPU需要多次把数据再内存中来回拷贝,通过RDMA技术,我们可以直接访问远端已经注册的内存区域

内核bypass

指的时IO操作可以绕过内核,指在用户态就可以把数据准备好并通知硬件准备发送和接收

协议

infiniband、RoCE、iWARP