什么是DMA
直接内存访问

IO设备为普通网卡时

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

传统网络做的相当于,将A内存中的数据搬运到B中去,其中网卡处理、中断处理、报文封装和解析都需要CPU去做
为什么会比起DMA多一段?
因为数据要经过内核协议栈的处理,所以cpu需要将内存种数据拷贝到内核协议栈,然后经过tcp/ip协议栈处理为数据包,随后才能通过DMA copy给我们的网卡,然后才在网卡上进行成帧操作
网卡经过传统网络发送至对端网卡,进行反向接收:
- 将数据DMA copy给内核空间缓冲区,cpu进行内核协议栈的处理
- cpu将处理后的数据拷贝到用户空间中,完成一次通信
核心问题
即使有了DMA可以进行网卡和内存的直接通信,协议栈的处理仍然需要内核态的参与,对cpu有很强依赖性

使用RDMA的网络通信
CPU基本不参与数据传输过程(只参与控制面),本端网卡直接从内存用户空间DMA copy到内部的存储空间,然后通过硬件进行协议栈的各层组装,通过物理链路发送至对方网卡,进行反向收包。
RDMA的优势
RDMA主要用于HPC和大型数据中心当中,设备相对于普通以太网网卡要昂贵不少(例如Mellanox的PCIe网卡市价再4000元以上,目前大型互联网企业在使用
0拷贝
不需要再用户空间和内核空间中来回复制数据
再传统socket通信流程中CPU需要多次把数据再内存中来回拷贝,通过RDMA技术,我们可以直接访问远端已经注册的内存区域
内核bypass
指的时IO操作可以绕过内核,指在用户态就可以把数据准备好并通知硬件准备发送和接收
协议
infiniband、RoCE、iWARP
