相对于传统的线下RDMA的应用场景,阿里云普惠的弹性RDMA网络可以用在更加丰富的场景,例如缓存数据库(Redis)、大数据(Spark)、HPC(WRF)、AI训练等。基于弹性RDMA,您既可以将HPC应用软件部署在云上,以获取成本更低、弹性更好的高性能应用集群;也可以将VPC网络替换成弹性RDMA网络,以加速您其他应用的性能。
什么是弹性RDMA
弹性RDMA(Elastic Remote Direct Memory Access,简称eRDMA)是阿里云自研的云上弹性RDMA网络,底层链路复用VPC网络,采用全栈自研的拥塞控制CC(Congestion Control)算法,享有传统RDMA网络高吞吐、低延迟特性的同时,可支持秒级的大规模RDMA组网。可兼容传统HPC应用、AI应用以及传统TCP/IP应用。
为什么需要弹性RDMA
传统的TCP/IP一直是业界主流的网络通信协议,众多应用都是基于TCP/IP构建的,但随着数据中心相关业务的蓬勃发展,应用对网络的性能需求(如延迟、吞吐量)越来越高,受限于TCP/IP的局限性(如拷贝开销大、协议栈处理厚、CC算法复杂、上下文切换频繁等),TCP/IP的网络通信性能已经成为应用性能提升的瓶颈。
RDMA解决了这些痛点问题。相对于TCP/IP,RDMA实现了零拷贝、内核旁路等特性,避免了拷贝、频繁的上下文切换等开销,相较于TCP/IP的通信,达到了低延迟、高吞吐量以及低CPU占用。但是昂贵的价格以及运维成本让很多应用者望而却步,RDMA的受众相对较少。
阿里云的eRDMA从设计之初就是要做云上普惠的能力,既要满足客户对RDMA低延时的需求,又要降低大众化场景的适配门槛,让更多的应用可以上云体验到更好的性能。
弹性RDMA的功能优势
- 高性能 - RDMA绕过内核协议栈,将数据直接从用户态程序转移到HCA中进行网络传输,极大地降低了CPU负载和延迟。eRDMA具有传统RDMA网卡的优点,同时将传统的RDMA技术应用到VPC网络下。超低的延迟让用户在云网络中体验到RDMA带来的优越性能。 说明- HCA(Host Channel Adapter)是一种通常以网络接口卡(NIC)形态出现的硬件设备,用于连接服务器与网络,并提供对RDMA技术的支持。 
- 普惠 - 无偿启用eRDMA。您只需在购买实例时,勾选eRDMA选项,即可实现eRDMA网络的开启,无需再额外付费。 
- 规模部署 - 传统的RDMA依赖于网络的无损特性,规模部署成本高、规模部署困难。而eRDMA在实现中采用了自研的拥塞控制CC算法,容忍VPC网络中的传输质量变化(延迟、丢包等),在有损的网络环境中依然拥有良好的性能表现。 
- 弹性扩展 - 不同于传统的RDMA网卡需要单独一个硬件网卡,eRDMA是基于神龙架构的一款原生带有云属性的RDMA HCA卡,可以在使用ECS的过程中动态添加设备,支持热迁移,部署十分灵活。 
- 共享VPC网络 - eRDMA依附于弹性网卡(ENI),网络可完全复用,可以在不改变业务组网的情况下,在原来的网络下激活RDMA功能,体验到RDMA的优势。 
如何实现弹性RDMA通信
- ECS实例启用eRDMA:阿里云提供了灵活方便的配置选项,方便您快速为ECS配置eRDMA,实现VPC网络下激活RDMA功能,建立RDMA连接进行通信。您需要选择支持eRDMA能力的实例规格,安装eRDMA驱动,并且挂载弹性RDMA网卡(ERI)。详细信息,请参见ECS实例启用eRDMA。 
- 应用快速适配eRDMA:如果您希望在应用程序中实现和配置RDMA相关的逻辑,以满足低延迟、高带宽和低CPU占用等场景,您可以通过NetACC、SMC等方式对应用进行适配。详细信息,请参见应用适配概述。 
弹性RDMA的基础能力和规格
在RDMA网络通信中,QP(Queue Pair)、CQ(Completion Queue)、MR(Memory Region)和verbs Opcode是几个核心的组件,它们在RDMA通信中扮演着重要的角色,共同确保了RDMA网络通信的高效性和低延迟性。
当您在应用中使用eRDMA时,需要确保应用满足产品的能力规格约束,否则可能会导致您的应用无法正常工作。
队列对(QP)
QP(Queue Pair)是RDMA中的基本通信实体,由一个发送队列(Send Queue,SQ)和一个接收队列(Receive Queue,RQ)组成。QP负责管理发送和接收的数据。
- 作用:QP允许应用程序发送和接收数据,它是RDMA通信的核心。QP的状态机管理着连接的状态,从初始化到终止。 
- eRDMA QP的基本规格: - 规格名称 - 规格 - 说明 - 建链方式 - RDMA_CM - RDMA_CM用于管理RDMA连接的建立、维护和关闭,简化了RDMA连接的管理过程,使应用程序可以更方便地使用RDMA功能。常用于MPI、SMC-R、PolarDB SCC等场景下。详细信息,请参见Linux rdma_cm。 重要- 目前支持eRDMA的CPU实例规格,默认eRDMA内核驱动安装模式为 - Standard,此模式下仅支持RDMA_CM建链。
- eRDMA提供了兼容模式(compat mode)用于OOB场景下的应用,如TensorFlow、NCCL、BRPC等。 重要- 目前支持eRDMA的GPU实例规格,默认eRDMA内核驱动安装模式为 - Compat,即兼容模式,支持RDMA_CM和OOB建链方式。
- 您可以通过命令行方式,实现RDMA_CM和OOB建链方式的兼容。详细信息,请参见修改eRDMA与bRPC的建链模式以实现兼容。 
- 兼容模式下,会额外占用30608~30623范围内的16个TCP端口。 
 
 - QP类型 - RC - RC类型的QP提供可靠的连接服务。它支持send操作、RDMA write操作、RDMA read操作和atomic操作。 - SRQ(Shared Receive Queue) - 不支持 - 无。 - 最大QP数目max_qp_num - 和实例规格族有关,最大支持131,071 - 指的是一个RDMA设备或网络接口上可以创建的最大队列对(QP)数量。 
- 它决定了RDMA网络可以支持的最大并发连接数,从而影响网络的扩展性和并发处理能力。 
 - 最大的发送WR深度max_send_wr - 8,192 - 表示一个QP发送队列的最大工作请求(Work Request)数量。 
- 它决定了QP可以同时发起的发送操作的数量,影响QP的发送性能和吞吐量。 
 - 最大的接收WR深度max_recv_wr - 32,768 - 表示一个QP接收队列的最大工作请求数量。 
- 它决定了QP可以同时处理的接收操作的数量,影响QP的接收性能和吞吐量。 
 - 最大的发送SGE数目max_send_sge 说明- Sge是指散射-聚集元素(Scatter-Gather Element)。 - 6 - 单个send wr支持的离散地址数目。 
- 它决定了QP在一次发送操作中可以处理的最大内存片段数量,影响数据传输的效率和灵活性。 
 - 最大的接收SGE数目max_recv_sge - 1 - 单个recv wr支持的离散地址数目。 
- 它决定了QP在一次接收操作中可以处理的最大内存片段数量,影响数据接收的效率和灵活性。 
 
完成队列(CQ)
CQ(Completion Queue)用于通知应用程序工作请求(Work Request,WR)的完成情况。当RDMA操作(如发送或接收)完成时,相关的完成信息会被放入CQ。
- 作用:CQ是RDMA中异步操作完成通知的关键,它帮助应用程序管理异步事件和错误处理。它提供了一种机制,让应用程序能够知道哪些操作已经完成,这对于异步操作的管理至关重要。 
- eRDMA CQ的基本规格: - 规格名称 - 规格 - 说明 - CQ(Completion Queue)数目 - 依据实例规格,最大CQ数为QP数的两倍 - 无 - CQ的完成向量数目vector_num - 依据实例规格(CPU和QP数有关),最大不超过31 - 每个vector会对应一个硬件中断。实际使用中,每个CPU配置至多一个vector就可以满足通信需求。 
- 每个vector会关联一个eRDMA内部的CEQ(Completion Event Queue)队列。 
 - 最大CEQ深度 - 4096 - 0.2.34版本的CEQ深度为256。 
- 如果使用event模式,建议每个vector绑定的CQ队列数不超过4096,否则可能出现CEQ队列溢出的风险。 
 - 最大CQ队列深度 - 1,048,576 - 无。 
RDMA内存管理
MR(Memory Region)和MW(Memory Window)是RDMA中用于内存管理的两个重要概念。
- MR(Memory Region):代表一块可以被RDMA访问的内存区域。通过注册MR,应用程序可以让RDMA硬件直接访问这块内存区域。 - 作用:MR使得RDMA能够直接在远程主机的内存上执行操作,如读写操作,这是RDMA零拷贝特性的基础。 
- eRDMA MR的基本规格: - 规格名 - 规格 - MR数目 - 依据实例规格,最大MR数为QP数的两倍 - Max MR size - 依据底层硬件,最小支持2 GB、最大支持64 GB 
 
- MW(Memory Window):阿里云目前不支持MW。 
verbs接口
verbs是RDMA编程的基础,它定义了一组接口,用于控制RDMA设备的行为。Opcode是这些接口中用于指定具体操作类型的代码。
- 作用:Opcode定义了RDMA操作的类型,如发送(SEND)、接收(RECEIVE)、读取(READ)、写入(WRITE)等,它们告诉RDMA硬件需要执行的具体动作,允许应用程序直接与RDMA硬件交互,实现高效的数据传输。 
- Opcode支持情况: - Opcode - 支持情况 - RDMA Write - 支持 - RDMA Write with Immediate - 支持 - RDMA Read - 支持 - Send - 支持 - Send with Invalidate - 支持 - Send with Immediate - 支持 - Send with Solicited Event - 支持 - Local Invalidate - 支持 - Atomic Operation - 支持