在数据中心的高性能计算领域对低延迟和高带宽的需求非常迫切。1993年11月,HP的工程师在一项专利中首次提出RDMA(Remote Direct Memory Access,远程直接内存访问)。RDMA是一种高性能的网络互联技术,提供网络系统之间直接访问彼此主内存的方法,即计算机能够直接访问远端设备的内存,在内存层面进行数据传输,而不用中断处理器或操作系统,从而降低延迟,提高吞吐量,增强网络性能。
今天的Internet源自1969年美国国防部研发的ARPANET(Advanced Research Projects Agency Network,阿帕网)。作为首个分组交换网,ARPANET使用NCP(Network Control Program,网络控制协议)作为其网络协议。1973年温顿·瑟夫和罗伯特卡恩提出TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议),1983年TCP/IP成为ARPANET唯一指定协议。 TCP/IP网络具有极高的兼容性,是目前使用最广泛的协议,但数据在通信过程中会经历四次拷贝(如下图信封位置)。多次数据拷贝导致处理延迟增加,影响数据传输性能和效率。
Verbs是由IBTA(InfiniBand Trade Association,InfiniBand贸易协会)制定的一组规范,用于定义RDMA传输过程中应支持的特性和行为。Verbs API是对Verbs规范的具体实现,通过在操作系统内核和RDMA适配器之间建立起的一个接口层,它允许应用程序直接与适配器进行通信,绕过了操作系统协议栈的干预。Verbs API向用户提供丰富而灵活的函数调用,常见的Verbs API包括:内存注册、创建队列对、创建完成队列等。TCP/IP与RDMA对比如下图:
RDMA网络适配器(RDMA Network Adapter),是RDMA技术专用的硬件设备,与TCP/IP网络的网卡类似,用于接收或发送数据。与TCP/IP网卡不同的是,在RDMA通信中,数据包的封装和解封装由RDMA网络适配器直接完成,绕过了操作系统内核的干预。发送方的应用程序将数据写入适配器的内存缓冲区,然后适配器将数据包直接发送到目标节点的适配器中。接收方的应用程序可以直接从适配器的内存缓冲区中读取数据,避免了额外的数据复制和处理过程。如下图:
RDMA技术使用队列机制进行数据通信,RDMA队列是用于管理数据传输和完成事件的数据结构,用于在RDMA通信中进行发送和接收的操作。RDMA基本通信单位是QP(Queue Pairs,队列对)。每个QP都由一对WQ(Work Queue,工作队列)组成。其中,负责数据发送任务的WQ被称为SQ(Send Queue,发送队列),用于存储待发送的数据和发送操作的相关参数,发送队列中的每个请求都包含要发送数据的内存地址、长度等信息;负责数据接收任务的WQ被称为RQ(Receive Queue,接收队列),接收队列用于存储待接收的数据和接收操作的相关参数。通过使用队列机制,RDMA技术实现了异步的、无阻塞的数据通信。应用程序可以通过将多个发送请求添加到发送队列中,同时创建多个接收请求在接收队列中等待数据的到达,从而实现并行的数据传输。如下图:
CQ(Completion Queue,完成队列)是在RDMA通信中用于管理完成事件的队列数据结构。它用于存储与RDMA操作相关的完成事件信息,包括发送和接收操作的状态和结果。当硬件设备完成传输任务后,会向CQ中添加CQE(Completion Queue Element,完成队列元素)。CQE中包含了传输任务的执行结果和相关信息,应用程序可以从CQE中了解任务的执行情况。
MR(Memory Registration,内存注册)是将主机内存区域与RDMA适配器关联起来的过程。MR操作完成后,RDMA适配器才能访问注册内存的区域,实现数据的直接传输。MR会为指定的内存区域生成一些属性信息,主要包括:
RDMA是一种需要软件和硬件支持的技术,在实际应用中有三种主要的实现方式:InfiniBand、RoCE和iWARP。
InfiniBand简称IB,由IBTA制定并正式发表于2000年。InfiniBand是一组高性能、低延迟的网络通信标准,旨在满足高性能计算和数据中心的需求。InfiniBand采用全新的架构,无法直接兼容现有的以太网,使用InfiniBand实现RDMA技术时,需要部署专用的IB网络设备和IB网卡,这导致企业的部署成本增加。InfiniBand的协议模型如下图所示:
InfiniBand原生支持RDMA,具有高带宽和低延迟的特点,安全方面InfiniBand支持加密与身份验证等机制。InfiniBand是并行计算、模型训练、分布式存储等领域的重要技术。
RoCE(RDMA over Converged Ethernet,基于融合以太网的RDMA)由IBTA制定,共有两个版本——2010年发表的RoCE v1和2014年发表的RoCE v2。RoCE是一种将RDMA技术扩展到以太网上的协议,通过在以太网数据帧中封装IB协议的报文,实现了IB协议复用现有以太网的基础设施。 RoCE v1是RoCE协议的第一个版本,它将IB报文封装在以太网的数据帧中,由于以太网是一个二层网络,不具备三层路由功能,因此RoCE v1只能适用于距离较近、规模较小的网络环境中。RoCE v2是RoCE协议的第二个版本,相比较于v1版本,它将IB报文封装在UDP报文中,RoCE v2可以跨三层网络进行数据传输,因此RoCE v2具有更好的扩展性和适用范围。目前RoCE v2协议已全面取代RoCE v1,因此提到RoCE时,一般都是指RoCE v2。
iWARP(Internet Wide Area RDMA Protocol,互联网广域网RDMA协议)最初由RDMA Consortium组织设计,并最终由IETF(Internet Engineering Task Force,互联网工程任务组)标准化。与RoCE相似,iWARP也复用了现有以太网的基础设施;不同的是iWARP封装在TCP报文中。TCP默认支持乱序重组、流量控制、可靠传输等机制,因此iWARP可以运行在有损网络上,但由于TCP的工作机制引入额外的开销,使得iWARP的效率不如RoCE。iWARP由 RDMAP、DDP、MPA三层子协议组成。
InfiniBand、RoCE和iWARP是RDMA技术的主要实现方式,它们兼容Verbs API,使应用程序可以无视底层硬件和协议的差异,通过统一的接口进行实现数据通信。极好的兼容性提高了开发效率和应用程序的可移植性,推动了RDMA技术在多个领域的广泛应用。三种实现方式对比如下图:
在部署成本上,由于InfiniBand无法复用现有以太网,使得InfiniBand的部署成本较高。在网络环境上,由于RoCE运行在UDP之上,无法保证数据包的可靠传输,因此RoCE需要运行在无损网络环境中。在性能上,由于iWARP运行在TCP之上,受TCP工作机制的影响,iWARP的性能相对较低,CPU的开销相对较大。
Steven - 信也科技信息安全资深专家
往期精彩内容指路
↙↙↙更多干货分享欢迎订阅【拍码场】