写点什么

揭秘!CIPU 最新秘密武器–弹性 RDMA 的技术解析与实践

  • 2023-08-18
    北京
  • 本文字数:7075 字

    阅读完需:约 23 分钟

揭秘!CIPU最新秘密武器–弹性RDMA的技术解析与实践


2023 年 8 月 2 日,阿里云弹性计算团队与智东西公开课联合出品的系列课程【阿里云弹性计算技术公开课】第五节正式播出,阿里云资深技术专家徐成带来了主题为《CIPU 最新秘密武器——弹性 RDMA 的技术解析与实践》的课程分享,本期课程在阿里云官网、智东西官网、钉钉视频号、阿里云微信视频号、阿里云开发者微信视频号、阿里云创新中心直播平台 &视频号等多平台同步播出。


弹性 RDMA(Elastic Remote Direct Memory  Access,简称 eRDMA),是阿里云自研的云上弹性 RDMA 网络,底层链路复用 VPC 网络,采用全栈自研的拥塞控制 CC(Congestion  Control  )算法,兼具传统 RDMA 网络高吞吐、低延迟特性,同时支持秒级的大规模 RDMA 组网。基于弹性 RDMA,开发者可以将 HPC 应用软件部署在云上,获取成本更低、弹性更好的高性能应用集群;也可以将 VPC 网络替换成弹性 RDMA 网络,加速应用性能。


https://cloud.video.taobao.com/play/u/null/p/1/e/6/t/1/423269197274.mp4?SBizCode=xiaoer

阿里云资深技术专家 徐成 | CIPU 最新秘密武器——弹性 RDMA 的技术解析与实践 直播回放


本篇文章根据徐成的课程整理而成,供读者阅览:



一、RDMA 的背景知识与上云挑战


1、内核态 TCP 在数据中心应用中逐渐遇到瓶颈


内核态 TCP/IP 协议栈广泛应用于数据中心的网络中,但随着分布式应用、大数据、AI 训练的逐步崛起,应用对于数据中心算力的需求越来越高,而计算节点之间都是通过网络互联的,网络逐渐成为分布式应用性能提升的瓶颈点。



内核态 TCP/IP 协议栈制约了网络性能,主要有两个原因:


· 内核态 TCP/IP 协议栈在数据传输过程中会涉及多次数据拷贝。有研究显示在某些场景下,数据拷贝可以占到整体 CPU 开销的 50%以上。为了更高性能,数据拷贝应该是被避免的。


· 内核态 TCP/IP 的协议处理需要消耗大量的 CPU。随着通信流量的增加,用于网络通信的 CPU 资源会越来越多,相应可以用于计算任务的 CPU 资源就会减少。此外,用户态/内核态的上下文切换、TCP 的流语义也会对应用的性能带来一些负面影响。


为了解决内核态 TCP/IP 遇到这些问题,DPDK、TOE、RDMA 等技术也都被应用于实践,其中最为广泛应用的还是 RDMA 技术。


2、RDMA 是什么


RDMA(Remote Direct Memory Access)技术全称远程直接内存访问,是一种高性能的网络通信技术,将数据直接从一台计算机的内存传输到另外一台计算机的内存中,而无需双方的操作系统内核参与。具有高吞吐、低延迟和低 CPU 开销的特点。



和 TCP/IP 相比,RDMA 具有如下的优点/特点:


· 零拷贝(Zero-copy)应用程序可以直接执行数据传输:数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要像 TCP/IP 一样,数据会被复制到网络层。


· 内核旁路(Kernel bypass)应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换。


· 不需要 CPU 干预(No CPU involvement) 有两层含义:


| 协议卸载。协议会被卸载到网卡硬件上处理。

| RDMA 单边操作无需远端 CPU 参与。


· 消息语义(Message based transactions)传输数据基于消息语义。TCP/IP 基于流语义进行数据传输,而应用大多通信的需求通常基于消息,应用需要进行流语义到消息语义的转换。RDMA 消除了应用程序将流切割为消息/事务的需求。


3、RDMA 网络协议类型



RDMA 在底层的实现上有很多种方式,主流的包括 Infiniband、RoCE、iWarp。


· Infiniband 是一种专门为 RDMA 设计的网络协议,对网络设备有特殊的要求,需要专用的硬件组成专用 IB 网络,具有极低的静态时延。但是组网成本很高,同时架构封闭存在厂商锁定的风险。


· RoCE 是将 IB 协议承载到以太网上,RoCEv1 将 IB 的链路层替换成以太链路层,RoCEv2 还将 IB 的网络层替换成 UDP/IP。RoCE 协议同样依赖于无损的网络环境,无损的依赖就意味着网络中不能出现丢包或乱序的情况。一旦出现,都会对性能造成严重的影响,通常需要使用交换机的 PFC 功能来实现无损网络。


· iWarp 协议利用 TCP 充当 RDMA 协议的传输层,无需交换机额外配置,能够容忍复杂的网络环境。


4、云计算的普及



刚才介绍了 RDMA 技术的背景内容,接下来再简要的回顾一下云计算相关的背景知识。


IaaS 是基础设施即服务,是云计算技术的组成部分。随着云计算技术的发展,越来越多的客户倾向于使用云 IaaS 服务,而非自建机房。相对于自建机房,云 IaaS 服务具有以下几个优点:


· 高可用。相对于自建机房,客户不需要考虑硬件故障,通常云服务厂商提供内置的冗余和容错功能。当物理机宕机,客户的实例自动迁移恢复。


· 弹性。计算资源可以根据实际的需求,分秒级扩容应对计算需求的增加,同时在不需要时缩减计算资源。


· 节约成本。计算资源的按需使用和按需付费,使得 IaaS 的支出高度可预测,可以轻松控制和制定相应预算。


· 易于部署。云服务器一般即开即用,而自建机房通常需要“人肉”部署运维,比如环境搭建、网络部署、操作系统安装等等。


上图右侧是阿里云 ECS 的架构图。ECS 就是云服务器,它通过 EBS 或者本地盘连接存储,通过 VPC 网络连接到网络。


这张图我们主要关注一下 VPC 专用网络,大家都知道云是一个多租户的环境,一个物理服务器同一时间可能有多个租户在使用,每一个用户都有一个自己独享的虚拟网络,不同用户之间的虚拟网络互不影响。


目前主流的虚拟网络是通过隧道实现的。一个 VPC 内的云服务器之间的数据传输都会加上一个隧道封装,它们带有一个唯一的隧道标识号,然后再通过物理网络进行传输。不同 VPC 内的实例由于隧道号的不同,会处于两个不同的路由平面上,因此不同 VPC 内的云服务器无法通信,这就天然的形成了一个多租户的隔离。


5、云上环境使用 RDMA 的挑战



随着上云业务的不断丰富,内核 TCP/IP 逐渐不能满足云数据中心对网络通信性能的要求,公有云厂商也逐渐开始在云上部署 RDMA 网络。


最直观的云上 RDMA 部署方式,是针对 RDMA 网络单独组一张网,从实践来讲,会存在不少的问题:


· 部署成本高。单独的一套组网,意味着需要部署和现有 VPC 网络完全独立的一套网络(网卡、交换机),最终会均摊到终端用户的使用成本上。


· 部署规模受限。如 RoCEv2 需要无损以太网的支持,要使能交换机的 PFC 功能,通常部署的集群规模不会很大,有资料显示 RoCEv2 集群的规模不超过上千台。


· 运维复杂。无损网络需要对交换机、网络做相应的配置,此外 PFC 风暴/PFC 死锁导致的潜在问题,都会使整个数据中心的运维工作量增大。


· 降低云服务器的可用性。这样的部署模式下,很难做到热迁移。热迁移是云服务器高可用保证的一个重要手段。


基于这些原因,提供这样的单独组网的云 RDMA 服务,一般都是通过单独的集群,小规模组网,在特定的实例上支持的。


二、eRDMA 的关键技术解析


1. 云上 RDMA 的另一种部署选择(Overlay RDMA)



前面提到云服务器之间已经有一个 VPC 虚拟网络互联了,直接利用 VPC 网络承载 RDMA 流量,是可以带来显著收益的。比如无需再重复建设一些相同的网络基础设施;用户界面可以看到单独的一张网,但要利用 VPC 来承载 RDMA 功能还需要解决一系列问题。


· 实现 Lossy RDMA。因为 VPC 网络不是无损的网络。网络中间的节点可能会由于拥塞导致丢包,端侧也可能因为虚拟机限速而产生丢包。VPC 内的 RDMA 一定要支持有损的网络环境,这样在丢包的时候才不会影响应用性能。


· 性能。基于 VPC 的 RDMA 是 overlay 的,它需要多一层隧道封装处理,因此对于底层 RDMA 处理的性能要求会更高一些。


· 数据中心网络 Hash 不均衡。数据中心中网络的拓扑在遭遇大象流的时候,很容易由于 Hash 冲突导致不能充分利用网络带宽,从而造成中间交换机的拥塞。特别是在 AI 分布式训练的场景下,高吞吐 RDMA 可以产生这样的流量,进而影响端到端的性能。


· 规模部署。VPC 内的节点规模远比传统的 RDMA 集群规模更强大,在这样的大规模组网环境内使能 RDMA 加速功能,就面临着更多额外的挑战。


· 安全隔离。云环境中一个关键的特点是多租户,不同的虚拟网络属于不同的用户,同时共享相同的物理网络环境。在这样的多租户环境下,增加的 RDMA 功能不能损害 VPC 的安全隔离和私密性。


· 和现有硬件/设施融合。现有的云基础设施中已经包含了为 VPC 提供功能的硬件,和现有的硬件充分复用融合有助于降低 RDMA 的支持成本。


· 支持热升级和热迁移。它们是在云环境下为用户提供高可用的重要手段。集成了 RDMA 功能之后不能降低 ECS 的可用性,所以 RDMA 也需要支持热升级和热迁移。


目前,我们基于 CIPU 架构实现了一个普惠的 RDMA 加速功能。


2、弹性 RDMA 


我们把阿里云 VPC 内的 RDMA 加速功能叫 Elastic RDMA,简称 eRDMA。它是一款基于云上 overlay VPC 网络、RDMA 生态完全兼容、超大规模网络部署的 ECS 普惠 RDMA 网络服务。从 ECS 第八代实例开始,在全地域和可用区,ECS VM、弹性裸金属、ECI、异构计算等所有算力,都提供了支持。



在性能方面,目前可以做到双向 200Gbps 的带宽、8μs 时延、30M PPS 的能力。在底层,集成了 LUNA TCP 高性能协议来解决性能的问题;用自研的 HPCC 解决拥塞管理的问题;用多路径支持打散大象流来解决 Hash 冲突或者不均衡的问题。



下面将详细介绍一下弹性 RDMA 的关键特点。


第一个特点,eRDMA 基于云上 overlay VPC 网络。阿里云的 ECS 服务器是通过 VirtIO-Net 的设备来接入 VPC 虚拟网络,VirtIO-Net 的设备是由 CIPU 芯片虚拟化出来的,网卡的后端功能都集成在 CIPU 当中。


为了不改变用户原本的 VPC 组网,换句话说就是不增加额外的 VPC 网络或私网 IP,所以弹性 RDMA 在设计的时候,新增的 RDMA Pcle 设备只提供了 RDMA 相关的功能。


传统形态的 RDMA 网卡既包含 RDMA 功能,也包含以太功能。反映到操作系统内部,我们看到的设备关系就如上图左侧所示,而 eRDMA 实现的时候采用的上图右侧的实现方式。以太网卡的功能依然由以往已经存在的 VirtIO-Net 的 PCIe 设备继续提供,eRDMA 作为以太网卡的附属功能,单独由另外一个 PCIe 设备提供,设备之间的关联关系是由上层驱动来完成的。


这样做的好处就是 eRDMA 完全复用了现有的 VPC 网络,可以在不改变业务组网的情况下,在原本的 VPC 网络配置下直接激活 eRDMA 的功能,体验到 eRDMA 的网络优势。



第二个特点,eRDMA 完整兼容现有 RDMA 生态。overlay 的 VPC 属于有损网络,依赖于无损网络标准的 RDMA 协议,业界现有的基于 overlay VPC 的 RDMA 都会对这个标准协议做一定的修改,甚至改变了接口的 RDMA 语义。


绝大多数应用都是基于 RC 语义,它是类似于 TCP,提供了一个可靠且保序的一个点对点的数据传输通道。改变语义接口,就意味着现有的应用都需要做相应的适配和修改,才能正常工作,对客户的使用体验并不友好。弹性 RDMA 依然对应用提供了 RC 语义,同时我们也支持全部的 RDMA 操作,eRDMA 规格也满足绝大多数应用需求,也支持内核态和用户态的 verbs 接口,绝大多数现有的应用都无需改动,就可以平滑的运行于 eRDMA 上。


第三个特点,eRDMA 支持大规模部署,主要体现在以下三个方面。


· eRDMA 内部实现了自研的 CC 拥塞控制算法,可以容忍 VPC 网络内部的传输质量变化(延迟、丢包等)。在有损的网络环境中依然拥有优秀的性能表现。


· 规模的变大也意味着 RDMA 资源的膨胀,传统网卡都会依赖于 memory free 的架构。芯片上只有少量的 Cache,在 Cache 存放不下资源的情况下,需要倒换到主机内存。CIPU 充足的片上资源就可以使得在 RDMA 资源规模膨胀之后,不会出现网卡 Cache 倒换的问题。


· 基于 VPC 网络也意味着 VPC 能够连通的节点,eRDMA 同样能够连通,不会受到物理环境的阻碍,可以达到和 TCP 同等的部署规模。


此外,包含 eRDMA 功能的云服务器,完全没有额外费用支出,也没有因为支持 RDMA 功能,而丧失云服务器的优点,比如:


· 高可用,支持热迁移、热升级。

  • · 热迁移,物理机宕机不影响用户的实例运行,可以很快迁移到其他可用的物理机之上,避免了单点故障导致的可用性丧失。


  • · 热升级,在不影响用户 ECS 实例的情况下,修复后端可能存在问题或者对后端进行迭代升级。



· 配置简单、部署灵活。eRDMA 不仅复用了 VPC 网络的基础设施,也复用了 VPC 的安全组等配置,无需单独为 RDMA 网络做更多额外的配置。此外,可以在使用 ECS 的过程中,动态添加设备,部署十分灵活。


三、eRDMA 的应用场景与实践


1、应用使用 RDMA 的典型场景


首先回顾一下 RDMA 的典型应用场景。RDMA 作为通信协议,第一个场景是数据点对点传输。由于 RDMA 的协议特点,使用 RDMA 进行数据传输时,可以根据数据量大小灵活选择通信模式,取得通信效率和内存占用的平衡。



举一个简单的例子,因为 RDMA 支持零拷贝,所以它可以降低通信过程中 CPU 的负载,但零拷贝需要提前分配内存,如果管理不好,就会造成系统内存资源的浪费。


同时使用零拷贝,也会引入一些额外的处理逻辑,比如需要管理零拷贝的缓冲,零拷贝的缓冲区复用。对于大数据量的传输,减少拷贝会有明显的收益,而小数据量使用零拷贝,收益可能就不是那么明显。所以在常见的 RDMA 通讯库里,对于小的消息会采用 Send+Copy 的方式进行传输,对于大的消息会采用协商+内存分配+单边操作的方式进行通信,从而达到对系统资源的使用和通信效率的平衡。


第二个场景是 RDMA 可以和 GPU 配合,利用 PCIe 的 P2P 特性,实现 GPU Direct RDMA 功能加速分布式 AI 训练。在 AI 分布式应用方面,如果没有 GDR,多个节点之间 GPU 和 GPU 之间的网络通信,就需要把 GPU 显存中的内容拷贝到 DDR 里,再通过 RDMA 发送出去。


接收方向是一个相反的过程,数据需要先 DMA 到内存,再拷贝到 GPU 显存。有了 GDR 之后,就可以允许 RDMA 网卡直接读显 GPU 显存进行数据传输,无需 CPU 再参与数据搬移,极大的提高了分布式 AI 训练的性能。


第三个场景是 RDMA 可以把远端的内存拉近。因为离 CPU 越近的存储单元,CPU 访问的延迟越低。最快的是 CPU 寄存器,然后是 CPU 的 L1 Cache、L2 Cache、L3 Cache,再到磁盘。RDMA 典型的延迟大概在几μs 到十几μs 之间,延迟要比磁盘低。所以可以在一些场景里,通过 RDMA 的单边操作,将远端的服务器内存拉近,充当本地节点的层次化存储,进而提升整体的性能。


第四个场景是利用 RDMA 的原子操作实现一些特殊功能,比如分布式锁的应用。


2、基于 eRDMA 的生态应用


在 eRDMA 的实际生态应用中,它不仅支持传统的 eRDMA 现有生态,比如 AI、HPC、大数据场景,这些场景下现有的 RDMA 生态已经发展的比较完善了。RDMA 可以使用现有的通讯库,比如 Jverbs、NCCL、Libfabric 等等,和相应的应用对接。此外,通用计算领域大多数都是使用 TCP socket 的应用,比如 Redis 数据库。如果想要使用 RDMA 功能,就必须要对相应的应用进行改造。



这个领域,学术界的成果比较多,但实际落地的很少,RDMA 也没有在这些领域得到广泛的商业化应用。如果这些领域要应用 RDMA,还要考虑 failover 的场景,比如 server 支持 RDMA,clinaer 没有支持 RDMA,这种情况下要能够回滚到 TCP。


基于 eRDMA 我们可以使用已经达到了商业成熟的标准,比如 NetACC、SMC-R 两种通讯库当中的任意一种,在不需要应用修改的情况下,无感的加速应用。同时这些通讯库也都考虑到 failover 场景,可以在真实的生产环境中使用。


3、eRDMA 加速应用,构建性能竞争力



在典型的应用场景里,弹性 RDMA 相对于 TCP 能取得比较明显的收益,比如在 AI 场景里,NCCL 可以提升 30%左右;在 Redis 场景里可以提升 130%,在 Spark 大数据场景里可以提升 30%;在 HPC 场景可以提升 20%。


总的来说,使用 RDMA 通信可以带来性能提升的业务特征有以下两类:


网络敏感型,即静态时延和长尾时延都有较大需求的应用。网络通信的延迟不仅包括端侧的时延,也包括网络传输的时延。使用 eRDMA 的时候,服务器之间的网络通信经过的交换机越少越好,这样可以有效的降低网络传输的时延。在阿里云里可以结合部署级的策略,使实例之间的物理距离最近。降低网络部分的通信耗时,进而达到性能的最优。


网络负载型,即网络在应用中 CPU 占比的开销比较大。RDMA 的协议卸载和零拷贝就可以对这类应用有比较明显的性能提升(AI 分布式训练),再结合多路径的优化,可以更充分的利用网络的带宽达到通信性能的最优。


4、最佳实践:以 netacc 加速 Redis 应用



接下来分享一个最佳实践。通过一个简单的方式体验一下 eRDMA 对应用的加速效果,这次的实践是以以 netacc 加速 Redis 应用为例。


我们需要首先购买 ECS 服务器。eRDMA 首先在 ECS 的第 8 代实例上支持,所以实例规格选择 8 代实例的 y 系列(倚天 CPU)、i 系列(intel SPR CPU)或者 a/ae 系列(AMD Genoa CPU)均可,本次演示选择 g8ae 机型的 4xlarge 规格,数量 2 台, 主要为了测跨节点间的网络通信。


为了更方便地使用 eRDMA,我们可以在选择操作系统时,勾选安装 eRDMA 驱动。这样当实例启动后,脚本会自动部署 eRDMA 相关的驱动,无需手动安装。



在网络和安全组配置中,我们选择好 VPC 和交换机之后,配置主网卡的 Tab 签中勾选弹性 RDMA 接口。后续其他的购买操作和不使能 eRDMA 时的一致。



实例创建完毕后,会自动启动。启动完成后,可以通过 ssh/vnc/Workbench 等方式登陆。登陆系统后,可以通过 ibv_devinfo 命令检查驱动是否安装完毕。


然后我们部署 redis 软件,只需要执行 yum install –y redis 即可。



默认情况下,在我们勾选 eRDMA 驱动的自动部署之后,NetACC 也会一并安装到系统内。然后我们接下来就直接运行 Redis 的基准测试。这次测试没有对 TCP 和 eRDMA 做相应的调优,直接测试开箱之后的结果。


我们简单测试了 100 clients,4 threads,循环 500 万次的 set 操作。第一次操作的是 TCP 的结果,可以看到最后程序打印的是一个 25 万左右的 rps。



第二次测试使用的 NetACC 信息的加速。这个时候需要在原始命令的开头加一个 netacc_run 的命令。测试结果是使用 NetACC 的加速效果,可以看到最后打印的结果是 62 万。这次测试的结果是 eRDMA+NetACC 的性能是 TCP 的 2.46 倍。


结合这次实践,可以看到在阿里云上使能加速的过程还是比较流畅的。在 HPC 或者 AI 场景下使用 eRDMA 也不会有其他额外的独有配置,以上就是本次课程的全部内容。


同时想要了解更多精彩直播/观看课程回放的同学,可以扫描下方海报中的二维码/点击回看,均可观看课程。



发布于: 刚刚阅读数: 4
用户头像

澎湃算力,无处不在。 2018-08-24 加入

阿里云弹性计算团队,关注虚拟化、通用计算、异构计算以及云上HPC和云上运维CloudOps。

评论

发布
暂无评论
揭秘!CIPU最新秘密武器–弹性RDMA的技术解析与实践_阿里云弹性计算_InfoQ写作社区