1.什么是RDMA
RDMA( Remote Direct Memory Access )即Remote + DMA,意为远程直接地址访问。所谓“Remote”,本端节点可以访问“远端”节点的内存。所谓“Direct”,指的是可以像访问本地内存一样,绕过传统以太网复杂的TCP/IP网络协议栈读写远端内存,而这个过程对端是不感知的,而且这个读写过程的大部分工作是由硬件而不是软件完成的,即不需要内核参与。
RDMA (Remote Direct Memroy Access ):利用 Kernel Bypass(内核旁路) 和 Zero Copy(零拷贝)技术提供了低延迟的特性,同时减少了CPU占用,减少了内存带宽瓶颈,提供了很高的带宽利用率。RDMA提供了基于 IO 的一种通道,这种通道允许一个用户空间的应用程序通过RDMA设备对远程的虚拟内存进行直接的读写。消除了传统网络通信带给计算任务的瓶颈,实现了更快和更轻量级的网络通信。
1.1 DMA
传统内存访问需要通过CPU进行数据copy来移动数据,通过CPU将内存中的Buffer1移动到Buffer2中。
DMA(直接内存访问)是一种能力,允许在计算机主板上的设备通过DMA直接把数据发送到目标内存中去,数据搬运不需要CPU的参与。
DMA模式:可以同DMA Engine之间通过硬件将数据从Buffer1移动到Buffer2,而不需要操作系统CPU的参与,大大降低了CPU Copy的开销。
1.2 RDMA
两端(本端和远端)的CPU几乎不用参与数据传输过程(只参与控制面)。本端的网卡直接从内存的用户空间DMA拷贝数据到内部存储空间,然后硬件RNIC(即支持RDMA技术的网卡)进行数据组装(主要时添加tcp、ip等报文头和校验码)后,通过物理链路发送到对端硬件RNIC即支持RDMA技术的网卡),对端的RDMA网卡收到数据后,剥离各层报文头和校验码,通过DMA Engine将数据直接拷贝到用户空间内存中。
2.RDMA的特点
2.1 特点一:zero-copy 零拷贝
能够读写远程内存,能够直接访问远程缓冲区,无需在不同软件层之间复制数据
2.2 特点二:kernel bypass 内核旁路
跳过内核,可在相同的代码上下文(即用户空间或内核)中收/发数据,节省了上下文切换时间
2.3 特点三:cpu-loadoff cpu卸载
无 CPU 参与,可使用专用硬件RNIC收/发数据前对数据进行组装或者解压,而不需要 CPU 干预。可降低远程端的 CPU 使用率,因为不需要它执行任何主动操作
2.4 特点四:message based transactions 基于消息的事务
可在不同的连接上同时执行多个事务,而无需等待任何事务完成
2.5 特点五:scatter/gather entries support 分散/聚集条目
可在单个操作中传输多个缓冲区,而无需将它们合并到单个缓冲区中
3.实现
3.1 要求
NIC 供应商将 RDMA 实现为软件、固件和硬件的组合 ,必须通过分配给支持 NDK 的微型端口适配器的 IPv4 和 IPv6 地址支持网络直接连接。
固件和硬件需求:提供 NDK/RDMA 功能的网络适配器,这种类型的适配器也称为已启用 RDMA 的 NIC (RNIC) ,即支持RDMA的网卡,如intel、navida等都提供特定的网卡。
软件需求:支持 NDK 的微型端口驱动程序,可实现 NDKPI 接口。不同的操作系统需要不同的软件需求,如RDMA 的 Windows 实现称为网络直通 (network direct,简称ND) ,内核部分称为网络直接内核 (NDK) ;RDMA在linux上【RDMA】intel 英特尔RDMA 驱动和ibverslib 库安装|流控PFC_rdma驱动-优快云博客
3.2 实现方法
目前RDMA有三种不同的硬件实现,它们都可以使用同一套API来使用,但它们有着不同的物理层和链路层:
InfiniBand(IB): 基于 InfiniBand 架构的 RDMA 技术,需要专用的 IB 网卡和 IB 交换机。从性能上,很明显Infiniband网络最好,但网卡和交换机是价格也很高。
RoCE:即RDMA over Ethernet(RoCE), 基于以太网的 RDMA 技术,也是由 IBTA 提出。RoCE支持在标准以太网基础设施上使用RDMA技术,但是需要交换机支持无损以太网传输,只不过网卡必须是支持RoCE的特殊的NIC。
iWARP:Internet Wide Area RDMA Protocal,基于 TCP/IP 协议的 RDMA 技术(在现有TCP/IP协议栈基础上实现RDMA技术,在TCP协议上增加一层DDP),由 IETF 标 准定义。iWARP 支持在标准以太网基础设施上使用 RDMA 技术,而不需要交换机支持无损以太网传输,但服务器需要使用支持iWARP 的网卡。与此同时,受 TCP 影响,性能稍差。
4 说明
RDMA 、InfiniBand、IBoE、RoCE、iWARP、IB卡、IB驱动的关系
4.1 说明一
RDMA 是一种技术(远程直接内存访问技术),有三种协议可以实现这种技术。
4.2 说明二
实现这种技术你可以选择用 Infiniband 协议、也可以使用其他协议:roce、iwarp
支持Infiniband 协议 或 roce、iwarp 等RDMA协议的网卡,就叫RDMA网卡,当你在服务器上安装RDMA网卡之后,你还得安装RDMA驱动,才能使用RDMA网卡 。
在Infiniband/RoCE规范中,将RDMA网卡称为HCA,全称为Host Channel Adapter,即主机通道适配器;而在iWARP协议族中,将RDMA网卡称为RNIC,全称为RDMA enabled Network Interface Controller,即支持RDMA的网络接口控制器。
支持Infiniband 协议的网卡又称IB网卡,当你在服务器上安装了IB卡之后,你还得安装 IB驱动,才能使用 infiniband 。
4.3 说明三
如果你使用 Infiniband 协议,这个协议作为一个新一代网络协议。它必须依靠专门的硬件才能实现。(专用INC(网卡)—— IB卡+专用交换机===>专用网络)。
如果你使用roce、iwarp,需要专用网卡,但不需要专用网络(RDMA会转成以太网协议,继续用以太网传输)