远程直接内存访问RDMA(即Remote Direct Memory Access)是一种直接内存访问技术,它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入,本文旨在技术引导。
RDMA技术最早出现在Infiniband网络,用于HPC高性能计算集群的互联。传统的基于Socket套接字(TCP/IP协议栈)的网络通信,需要经过操作系统软件协议栈,数据在系统DRAM、处理器Cache和网卡Buffer之间来回拷贝搬移,因此占用了大量的CPU计算资源和内存总线带宽,也加大了网络延时。举例来说,40Gbps的TCP/IP流能耗尽主流服务器的所有CPU资源;RDMA则解决了传统TCP/IP通信的技术痛点。例如,在40Gbps场景下,CPU占用率从100%下降到5%,网络延时从ms级降低到10us以下。
RDMA是一种新的内存访问技术,RDMA让计算机可以直接存取其他计算机的内存,而不需要经过处理器耗时的处理。RDMA将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响。RDMA技术的原理及其与TCP/IP架构的对比如下图所示。
Infiniband,支持RDMA的新一代网络协议。 由于这是一种新的网络技术,因此需要支持该技术的NIC和交换机。
RoCE,一个允许在以太网上执行RDMA的网络协议。 其较低的网络标头是以太网标头,其较高的网络标头(包括数据)是InfiniBand标头。 这支持在标准以太网基础设施(交换机)上使用RDMA. 只有网卡应该是特殊的,支持RoCE.
iWARP,一个允许在TCP上执行RDMA的网络协议。 IB和RoCE中存在的功能在iWARP中不受支持。 这支持在标准以太网基础设施(交换机)上使用RDMA. 只有网卡应该是特殊的,并且支持iWARP(如果使用CPU卸载),否则所有iWARP堆栈都可以在软件中实现,并且丧失了大部分RDMA性能优势。
RDMA应用和RNIC(RDMA-aware Network Interface Controller)之间的传输接口层(Software Transport Interface)被称为Verbs或RDMA API,RDMA API (Verbs)主要有两种Verbs:
内存Verbs(Memory Verbs),也叫One-SidedRDMA.包括RDMA Reads, RDMA Writes, RDMA Atomic.这种模式下的RDMA访问完全不需要远端机的任何确认。
消息Verbs(Messaging Verbs),也叫Two-SidedRDMA.包括RDMA Send, RDMA Receive.这种模式下的RDMA访问需要远端机CPU的参与。
RDMA over TCP(iWARP)协议能够工作在标准的基于TCP/IP协议的网络,如目前在各个数据中心广泛使用的以太网。iWARP并没有指定物理层信息,所以能够工作在任何使用TCP/IP协议的网络上层。iWARP允许很多传输类型来共享相同的物理连接,如网络、I/O、文件系统、块存储和处理器之间的消息通讯。
从RDMA over TCP的协议栈来看,最上面三层构成iWARP协议族,用来保证高速网络的互操作性。
然而,RDMA over Converged Ethernet (RoCE)是一种网络协议,允许应用通过以太网实现远程内存访问。目前RoCE有两个协议版本。
RoCE v1是一种链路层协议,允许在同一个广播域下的任意两台主机直接访问。
RoCE v2是一种Internet层协议,即可以实现路由功能。虽然RoCE协议这些好处都是基于融合以太网的特性,但是RoCE协议也可以使用在传统以太网网络或者非融合以太网络中。
目前,虽然IB、以太网RoCE、以太网iWARP这三种RDMA技术使用统一的API,但它们有着不同的物理层和链路层。在以太网解决方案中,RoCE相对于iWARP来说有着明显的优势,这些优势体现在延时、吞吐率和 CPU负载。RoCE被很多主流的方案所支持,并且被包含在Windows服务软件中。
RDMA技术基于传统网络的概念,但与IP网络又有些不同。最关键的不同是RDMA提供了一种消息服务, 利用这种服务,应用程序可以直接访问远程计算机上的虚拟内存。消息服务可以用来进行网络中进程间通信(IPC)、远程服务器通信和在一些上层协议的协助下与存储设备进行数据传递。上层应用协议ULPs(Upper Layer Protocols)有很多,例如iSCSI的RDMA扩展(iSER)、SCSI RDMA协议(SRP)等,主流的SMB、Samba 、Lustre、ZFS等也支持RDMA.
RoCE和InfiniBand,一个定义了如何在以太网上运行RDMA,而另一个则定义了如何在IB网络中运行RDMA.RoCE期望能够将IB的应用(主要是基于集群的应用)迁移到融合以太网中,而在其他应用中,IB网络仍将能够提供比RoCE更高的带宽和更低的时延。RoCE和IB协议的技术区别:
拥塞控制:RoCE所依赖的无丢包网络基于以太网流控或PFC(Priority Flow Control)来实现。RoCEv2 则是定义了拥塞控制协议,使用ECN做标记和CNP帧来做确认。而IB则是使用基于信用的算法来保证HCA-HCA之间的无丢包通信。
时延:当前IB交换机普遍要比以太交换机拥有更低的时延,以太网交换机一般的Port-to-Port时延在230ns,相比IB交换机在同样端口数的情况下100ns的时延,以太交换机还是要高出不少。
配置:配置一个DCB以太网络要远比配置一个IB网络要复杂的多,同理,运维也要复杂的多。
RoCE和iWARP,一个是基于无连接协议UDP,一个是基于面向连接的协议(如TCP)。RoCEv1只能局限在一个二层广播域内,而RoCEv2和iWARP都能够支持三层路由。相比RoCE,在大型组网的情况下,iWARP的大量TCP连接会占用大量的额内存资源,对系统规格要求更高。另外,RoCE支持组播,而iWARP还没有相关的标准定义。
Intel收购了Qlogic的InfiniBand业务的Intel又另辟新径,推出了一整套叫做"True Scale Fabric"的高性能计算架构的解决方案(包括IB和Omni-Path),独立提出了一套Omni-Path Host Fabric Interface接口和对应的交换机产品。提供Verbs和PSM(性能扩展消息库)两个编程接口,PSM是专门面向 MPI 通信设计的接口。
Intel在CPU上集成了Omni-Path相关功能,这也意味着Omni-Path通信效率上更加高效,但会让自己的网络依赖于CPU,至少在处理器上开放性还是做的比较有局限性。
通过收购Cray互联部门,Intel在 Omni-Path引入了1.5层的概念。它被称作链接传输层(Link Transport Layer),基于Cray的Aries基础互联技术优化底层数据通信,提供可靠的2层数据包交付、流控和单连璐控制。这也算是对收购Cray的Aries技术的充分利用。