全部产品
Search
文档中心

云服务器 ECS:弹性RDMA(eRDMA)

更新时间:Nov 21, 2024

相对于传统的线下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相关的逻辑,以满足低延迟、高带宽和低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提供了兼容模式(compat mode)用于OOB场景下的应用,如Tensorflow、NCCL、BRPC等。

      重要

    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

    支持