RDMA(Remote Direct Memory
Access)全名是\"远程直接数据存取\", RDMA 让计算机可以直接存取其它计算机的内存, 而不需要经过处理器耗时的传输,如图 1.2 所示。
RDMA是一种使一台计算机可以直接将数据通过网络传送到另一台计算机内存中的特性,
将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任
何影响,这项技术通过消除外部存储器复制和文本交换操作,因而能腾出总线空间和 CPU周期用于改进应用系统性能,从而减少对带宽和处理器开销的需要,显著
降低了时延。
[color="#ffffff"]中国网管论坛 bbs.bitsCN
图 1.2 RDMA 数据流传输示意图
RDMA 对以太网来说还是\"新生事物\",但以不同形式存在已有十多年时间,它是
Infiniband 技术的基础。产业标准 API(应用程序接口)使
RDMA 从技术走向实现成为可能。其中包括用于低时延消息处理、成就高性能计算的
MPI(消息通过接口),以及 DAPL(直接接入供应库)。后者包括两部
分:KDAPL 和 UDAPL,分别用于内核和用户(应用程序)。Linux 支持 KDAPL,其它操作 系统将来也有可能支持。RDMA 在高性能计算环境广为
采纳,在商务应用领域很少,但如今大多应用程序都能直接支持操作系统,透过操作系
统(如 NFS)间接利用 RDMA 技术的优势是完全可能的。
2 RDMA 工作原理
RDMA 是一种网卡技术,采用该技术可以使一台计算机直接将信息放入另一台计算
机的内存中。通过最小化处理过程的开销和带宽的需求降低时延。RDMA 通过在网卡上
将可靠传输 协议
固化于硬件,以及支持零复制网络技术和内核内存旁路技术这两种途径来达到这一目标。
RDMA 模型如图 2.1 所示。
[color="#ffffff"]中国网管联盟 bitsCN
[color="#ffffff"]中国网管论坛 bbs.bitsCN
图 2.1 RDMA 模型演变
零复制网络技术使 NIC 可以直接与应用内存相互传输数据,从而消除了在应用内存
与内核内存之间复制数据的需要。
内核内存旁路技术使应用程序无需执行内核内存调用就可向网卡发送命令。在不需
要任何内核内存参与的条件下,RDMA 请求从用户空间发送到本地 NIC 并通过网络发送
给远程 NIC,这就减少了在处理网络传输流时内核内存空间与用户空间之间环境切换的
次数。 [color="#ffffff"]网管联盟 bitsCN@com
当一个应用程序执行 RDMA 读/写请求时,系统并不执行数据复制动作,这就减少
了处理网络通信时在内核空间和用户空间上下文切换的次数。在不需
要任何内核内存参与的条件下,RDMA 请求从运行在用户空间中的应用中发送到本地
NIC(网卡),然后经过网络传送到远程 NIC。请求完成既可以完全在用户空间中处理(通
过轮询用户级完成排列),或者在应用一直睡眠到请求完成时的情况
下通过内核内存处理。
RDMA 操作使应用可以从一个远程应用的内存中读数据或向这个内存写数据。
RDMA 操作用于读写操作的远程虚拟内存地址包含在 RDMA 消息中传
送,远程应用程序要做的只是在其本地网卡中注册相应的内存缓冲区。远程节点的 CPU
在整个 RDMA 操作中并不提供服务,因此没有带来任何负载。通过类型值
(键值)的使用,一个应用程序能够在远程应用程序对它进行随机访问的情况下保护它的内存。
发布 RDMA 操作的应用程序必须为它试图访问的远程内存指定正确的类型值,远程
应用程序在本地网卡中注册内存时获得这个类型值。发布 RDMA 的
应用程序也必须确定远程内存地址和该内存区域的类型值。远程应用程序会将相关信息
通知给发布 RDMA 的应用程序,这些信息包括起始虚拟地址、内存大小和该
内存区域的类型值。在发布 RDMA 的应用程序能够对该内存区域进行 RDMA 操作之前,
远程应用程序应将这些信息通过发送操作传送给发布 RDMA 的应用程
序。
3 RDMA 操作类型 [color="#ffffff"]网管 u 家 u.bitscn@com
具备 RNIC(RDMA-aware network interface
controller)网卡的设备,不论是目标设备还是源设备的主机处理器都不会涉及到数据传
输操作,RNIC 网卡负责产生 RDMA 数据包和接收输入的
RDMA 数据包,从而消除传统操作中多余的内存复制操作。
RDMA
协议
提供以下 4 种数据传输操作,除了 RDMA读操作不会产生 RDMA 消息,其他操作都会产
生一条 RDMA 消息。
RDMA Send 操作;
Send operation;
Send with invalidate operation;
Send with solicited event;
Send with solicited event and invalidate;
RDMA Write操作;
RDMA Read 操作;
Terminate操作。
4 RDMA over TCP
以太网凭借其低投入、后向兼容、易升级、低运营成本优势在目前网络互连领域内
占据统治地位,目前主流以太网速率是 100 Mb/s 和 1000
Mb/s,下一代以太网速率将会升级到 10 Gb/s。将 RDMA 特性增加到以太网中,将会降
低主机处理器利用率,增加以太网升级到 10
Gb/s 的优点,消除由于升级到 10
Gb/s 而引入巨大开销的弊端,允许数据中心在不影响整体性能的前提下拓展机构,为未
来扩展需求提供足够的灵活性。
RDMA over TCP
协议
将数据直接在两个系统的应用内存之间进行交互,对操作系统内核几乎没有影响,并且
不需要临时复制到系统内存的操作,数据流如图 4.1 所示。 网管网 www.bitscn
图 4.1 RDMA over TCP (Ethernet)数据流示意图
RDMA over TCP
协议
能够工作在标准的基于 TCP/IP
协议
的网络,如目前在各个数据中心广泛使用的以太网。注意:RDMA over TCP 并没有指定
物理层信息,能够工作在任何使用 TCP/IP
协议
的网络上层。RDMA over TCP 允许很多传输类型来共享相同的物理连接,如网络、I/O、
文件系统、块存储和处理器之间的消息通讯。
图 4.2 RDMA over TCP (Ethernet)
协议
栈
图 4.2 是 RDMA over TCP (Ethernet)的 协议
栈,最上面三层构成 iWARP
协议
族,用来保证高速网络的互操作性。
RDMA 层
协议
负责根据 RDMA 写操作、RDMA 读操作转换成 RDMA 消息,并将 RDMA 消息传向Direct
Data Placement (DDP)层。DDP层
协议
负
责将过长的 RDMA 消息分段封装成 DDP 数据包继续向下转发到 Marker-based,
Protocol-data-unit-Aligned
(MPA)层。MPA 层在 DDP数据段的固定间隔位置增加一个后向标志、长度以及 CRC 校验
数据,构成 MPA 数据段。TCP层负责对 TCP数据段进行调
度,确保发包能够顺利到达目标位置。IP 层则在数据包中增加必要的网络路由数据信
息。
DDP层的 PDU 段的长度是固定的, DDP层含有一个成帧机制来分段和组合数据包,
将过长的 RDMA 消息分段封装为 DDP消息,处理过程如图 4.3 所示。
网管网 www_bitscn_com
图 4.3 DDP层拆分 RDMA 消息示意图
DDP数据段是 DDP
协议
数据传输的最小数据单元,包含 DDP
协议
头和 ULP载荷。DDP
协议
头
包含 ULP数据的最终目的地址的位置和相关控制信息。 DDP层将 ULP数据分段的原因之一就是 TCP载荷的最大长度限制。DDP的数据传输模式分为 2
种:tagged buffer 方式和 untagged buffer 方式。tagged
buffer 方式一般应用于大数据量传输,例如磁盘 I/O、大数据结构等;而 untagged
buffer 方式一般应用于小的控制信息传输,例如:控制消息、I/O状态信息等。
MPA 层在 DDP层传递下来的 DDP消息中,MPA 层通过增加 MPA
协议
头、标志数据以及CRC校验数据构成FPDU(framed PDU )数据段,处理过程如图4.4所示。
MPA 层便于对端网络适配器设备能够快速定位 DDP
协议
头数据,根据 DDP
协议
头内设置的控制信息将数据直接置入相应的应用内存区域。MPA 层具备错序校正能力,
通过使能 DDP,MPA 避免内存复制的开销,减少处理乱序数据包和丢失数据包时对内存
的需求。MPA 将 FPDU 数据段传送给 TCP层处理。
图 4.4 MPA 层拆分 DDP消息示意图
TCP 层将 FPDU 数据段拆放置在 TCP 数据段中,确保每个 TCP 数据段中都包含 1 个单独