从天猫双11成交额2684亿看RDMA网络

话说2019天猫双11成交额2684亿!再次刷新世界纪录,订单创新峰值达到54.4万笔/秒,单日数据处理量达到970PB。

看这数据是不是觉得很厉害!970PB/天世界级流量洪峰!

嘿嘿,不用你觉得,阿里自己人也说“不是任何一朵云都能撑住这个流量。中国有两朵云,一朵是阿里云,一朵叫其他云。”

人家凭啥这么自信呢?阿里巴巴集团CTO张建锋介绍,即使是在最为繁忙的零点前后,消费者也没有感受到任何抖动,能够顺畅购物,是因为阿里云在以下四个方面做了核心突破:
第一, 在核心虚拟机系统上自研神龙架构,用自研的服务器做虚拟化,压力再大也是线性输出;
第二, 自研云原生数据库,Ocean Base和Polar DB两个数据库表现优越;
第三, 计算与存储分离,数据从远端存取,方便扩容;
第四, 采用RDMA网络,阿里是全球第一个大规模做RDMA网络的公司。

前三点就不谈了,不是本文的主角。今天我们只谈RDMA网络。
注:读者请注意本文不是阿里的软文

RDMA的诞生背景

传统的TCP/IP网络通信,数据需要通过用户空间发送到远程机器的用户空间。数据发送方需要将数据从用户应用空间Buffer复制到内核空间的Socket Buffer中。然后Kernel空间中添加数据包头,进行数据封装。通过一系列多层网络协议(TCP、UDP、IP等)的数据包处理工作,数据才被Push到NIC网卡中的Buffer进行网络传输。

消息接受方接受从远程机器发送的数据包后,要将数据包从NIC buffer中复制数据到Socket Buffer。然后经过一些列的多层网络协议进行数据包的解析工作。解析后的数据被复制到相应位置的用户应用空间Buffer。这个时候再进行系统上下文切换,用户应用程序才被调用。下图展示了传统的TCP/IP协议层的工作原理。

本图来源CSDN博客

本质上来说传统的TCP/IP网络通信是通过内核发送消息。而面对高性能计算、大数据分析和浪涌型IO高并发、低时延应用,现有TCP/IP软硬件架构和应用、高CPU消耗的技术特征根本不能满足应用的需求。多次内存拷贝、中断处理,上下文切换、复杂的TCP/IP协议处理、存储转发模式和丢包导致额外延时超长。

RDMA是个啥

鉴于传统网络架构的弊端和当今网络的发展现状,攻城狮无时不刻在感叹: 为什么发送数据要花这么长时间?为什么计算能力这么牛的服务器老是要长时间等待网络传输完成?有没有一种网络可以不经过CPU就能发送数据?

答案是有的。它就是RDMA (Remote Direct Memory Access)。在谈它之前,我们先认识一下DMA。 

DMA(Direct Memory Access)是主机内存和外部设备之间传输数据的一种方式,系统将内存做完虚拟地址和物理地址映射之后,就将数据传输的控制权交给了外部设备的DMA控制器,然后所有的数据传输操作都由外部设备来完成。这种方式可以节省CPU资源。

RDMA可以看成是远程的DMA技术,为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA允许用户态的应用程序直接读取或写入远程内存,而无内核干预和内存拷贝发生。起初,只应用在高性能计算领域,最近,由于在大规模分布式系统和数据中心中网络瓶颈越来越突出,RDMA逐渐走进人们的视野。

图片来源知乎

从上图的RDMA和传统TCP/IP网络对比中可以看出,RDMA的性能优势主要体现在以下几个方面:

  • Zero Copy:减少数据拷贝次数。由于没有将数据拷贝到内核态并处理数据包头部的过程,传输延迟会显著减小。
  • Kernel Bypass和Protocol Offload:不需要内核参与。数据通路中没有繁琐的处理报头逻辑,不仅会使延迟降低,而且也大大节省了CPU的资源。

RDMA网络分类

目前,大致有三类RDMA网络,分别是Infiniband、RoCE、iWARP。

1.Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输。InfiniBand技术 规格及标准规范于1999年开始起草,2000年正式发表,但发展速度不及Rapid I/O、PCI-X、PCI-E和FC。加上Ethernet从1Gbps进展至10Gbps,所以直到2005年之后,InfiniBand Architecture(IBA)才在集群式超级计算机上广泛应用。全球HPC高算系统TOP500大效能的超级计算机中有相当多套系统都使用上IBA。最早做InfiniBand的厂商是IBM和HP,现在主要是Mellanox。InfiniBand从L2到L4都需要自己的专有硬件,所以成本非常高!

2.RoCE 即RDMA over Converged Ethernet,它是一个允许在以太网上执行RDMA的网络协议。其较低的网络标头是以太网标头,其较高的网络标头(包括数据)是InfiniBand标头。这支持在标准以太网基础设施(交换机)上使用RDMA。有网友认为RoCE实际上是Mellanox鉴于IB过于昂贵而推出的一种低成本的产品,核心就是把IB的包架在通用Ethernet上发出去,因此对于RoCE,实际上它的二层包头已经是普通以太网的包头。

3.iWARP 是一个允许在TCP上执行RDMA的网络协议。IB和RoCE中存在的功能在iWARP中不受支持。iWARP直接将RDMA实现在了TCP上,优点是成本最低,只需要采购支持iWARP的NIC即可使用RDMA,缺点是性能不好,因为TCP本身协议栈过于重量级,即便是按照一般iWARP厂商的做法将TCP offload到硬件上实现,也很难追上IB和RoCE的性能。目前在做iWARP的主要是Intel和Chelsio两家,从现在的观察Chelsio略胜一筹,而Intel则有点想放弃iWARP转投RoCE之势。

需要说明的一点,其实不管是iWARP还是RoCE,实际上并不是自己重新发明了RDMA,而是利用了IB的上层接口修改了下层的实现。此外,三种实现方式使用的user-space api都是libibverbs,这原本就是给IB用的,相当于IB的socket。

RDMA应用场景

RDMA作为原生于Infiniband的技术,早期广泛用于高性能计算(High Performance Computing)机群。但是由于Infiniband和绝大多数互联网公司数据中心里面本来的Ethernet构架不匹配,而且实施起来成本也高,尤其是设备成本和运维成本,所以刚开始并不火。

RDMA最近在互联网圈火起来应得益于ROCE(RDMA over Converged Ethernet)的出现。但ROCE也不是哪里都好,因为它不是一个放之四海而皆准的通讯标准。ROCE虽然做到了兼容以太网,但是目前的RDMA还是不能直接兼容已有应用。而且RDMA缺少了类似于TCP的socket封装机制,很多事情变得复杂化了。比如你甚至需要考虑RDMA网卡缓存容量不够的问题。所以实现一个“通用的”RDMA扩展其实并不容易。

当然,如果弱化 “通用的”这个要求,那么实现起来还是相对容易的。像微软、AWS这些在数据中心追求高性能计算的Hyperscale公司在几年前就已经有了RDMA部署。一些不差钱的项目(如AI训练),以及真正对时延有极致要求的云巨头们也开始广泛使用。

RDMA+GPU

微软是目前在数据中心大规模部署RDMA的第一家HyperScale公司。微软在2015/6/7/8年的Sigcomm 有大量的论文来讲RDMA在数据中心的部署。随后AWS也不示弱部署了RDMA,它的做法和微软有很大的不同。微软为了Azure的云环境的低延时网络,从40G开始规模部署RDMA。微软为大规模部署RoCEv2所作的各种流控算法以及应用的优化对于整个业界都是非常有用的,但是他们主要停留在传统的网络上面。

AWS则不同。在2014年之前,低延时网络的大部分场景都是SDS,很多的存储startup公司,使用PCIE Flash和RDMA 网卡来构建自己的分布式存储系统,比较典型就是EMC收购的ScaleI/O。2014年之后,由于ALexnet的出色表现,RMDA和Nvidia有了深度合作,利用GPU Direct,在GPU集群中快速传递数据成了RDMA的另一个大众应用。

所谓GPUDirect RDMA,就是计算机1的GPU可以直接访问计算机2的GPU内存。而在没有这项技术之前,GPU需要先将数据从GPU内存搬移到系统内存,然后再利用RDMA传输到计算机2,计算机2的GPU还要做一次数据从系统内存到GPU内存的搬移动作。GPUDirect RDMA技术使得进一步减少了GPU通信的数据复制次数,通信延迟进一步降低。

NVIDIA 的GPUDirect由点对点和RDMA组件组成,兼容多种通信互联产品与API,包括NVIDIA NVLink™和NCCL以及OpenMPI和UCX。

由于GPUDirect RDMA的出现进一步降低了通信的延迟,在 re:Invent 2018 上,AWS发布了 Elastic Fabric Adapter (EFA),它是一种用于 Amazon EC2 实例的网络接口,让客户能够在 AWS 上大规模运行需要高级别实例间通信的 HPC 应用程序,例如计算流体动力学、天气建模和油藏模拟。借助EFA,消息传递接口(MPI)的高性能计算(HPC)应用程序和NVIDIA Collective Communications Library(NCCL)的机器学习(ML)应用程序可以扩展到数千个CPU或GPU。EFA定位很清楚,HPC和分布式机器学习的训练。传统的Nitro芯片在升级了25G的Serdes之后,利用libfabric的生态实现了部分的RDMA的功能,可以满足AWS上的HPC和ML的业务需求。这个和国内的大厂的想法类似。

从2016年开始,阿里巴巴就投入专项研究,以改造RDMA、提高传输性能。从网卡底层开始设计满足大规模应用的网络,并结合阿里自研交换机实现性能最大化,最终建成全球最大规模数据中心内的“高速网”,使得集群极大地突破了传输速度瓶颈,并将时延显著降低90%。以2019年天猫双11为例,基于RDMA网络技术的云存储和电商数据库服务器可以从容地应对峰值流量考验。

RDMA+AI

在最近火热的AI训练框架中RDMA也特别常见。百度、腾讯、京东、星云等公司都利用RDMA技术在Tensorflow、Paddle、Amber等平台上做了二次开发。

百度公司在2014年前后开始引入RDMA网络,先后部署了lnfinband集群和RoCEv1集群。2015年,百度分别在SZWG机房和YQ01机房大规模部署了RoCEv2集群,分别承载了深度学习,语音识别和自然语言处理等相关的机器学习任务。目前RDMA集群总体规模为600台左右,这是国内最大的一个RoCEv2网络。

其中语音识别训练和NLP机器翻译,使用OpenMPI作为基础库,40G RDMA通信性能相对于10GTCP网络提升了1个数量级。Paddle图像训练使用类Socket库,也有不错的性能收益。为了更加直观的理解,对于OpenMPI BenchMark,40GRDMA相对于10GTCP能够提速1-2个数量级。

由腾讯微信-香港科技大学人工智能联合实验室 (WHAT Lab) 研发的Amber,它是一种深度学习计算框架,并支持大规模分布式并行深度学习计算。其数据传输模块中的 RDMA 功能,由香港科技大学陈凯教授开发的 RoCE 提供技术支持,使得 Amber 能够充分使用硬件 RDMA 性能,实现低延迟、高吞吐量的模型传输。

京东人工智能研发团队在分布式的模型训练场景中,也使用了RDMA技术,针对模型文件的高性能传输,满足了分布式训练的需求。

京东IT资源服务部的硬件系统部在测试RDMA时也看到,在VM的服务中,在同样物理服务器的情况下,利用RDMA 来做数据传输,可以将几乎100%的CPU 资源都提供给计算。降低了CPU 在通讯中的占用率,用户就可以利用这些CPU 资源来做更多计算或提供其他的服务,这也相当于增加了VM的数量。

还有星云Clustar平台,利用RDMA网络解决了TensorFlow等训练框架在支持分布式训练方面的性能瓶颈。通过RDMA消除多GPU跨节点通信的网络瓶颈,显著降低了训练任务整个周期中的通信耗时占比,提高了GPU集群计算资源利用率和训练效率,也为集群横向扩展到更大规模时的线性加速比提供了保证。佘俊泉先生对此做了非常生动的描述:“应用就像是汽车,应用的软件优化可以提升发动机的性能,RDMA就是将原来的四车道变成了八车道,为应用性能的提升创造了更大的空间。”

RDMA设备与k8s集成

要在Kubernetes中使用rdma设备,首先是通过device plugin插件机制,让k8s能够识别和使用rdma设备。其次,rdma网卡基本上都支持SR-IOV技术,利用基于该技术的Kubernetes CNI插件,可以构建出完整的容器网络。

当前支持RDMA的网卡主要是intel与mellanox两个厂家,各自均提供有对应k8s device plugin与SR-IOV网络cni插件。

在很长一段时间,网络都不是数据中心性能的瓶颈,基于”大带宽”的网络设计可以满足业务应用需求。但近些年来,服务器技术的快速发展带动了数据中心计算、存储能力的飞速提高,而RoCE、NVME over Fabric等RDMA技术将数据中心的性能瓶颈转移到了网络侧。特别是对于HPC、分布式存储、GPU云、超融合架构这些基于RDMA的新型应用来说,网络时延已经成为制约性能的主要因素。因此,可以预见到,未来数据中心的设计目标会逐步从带宽驱动走向时延驱动,如何构建低时延、无损的大型以太网数据中心,并建立完整的缓存、时延监控机制,会是业界长期探索的目标。

1.https://cloud.tencent.com/developer/article/1037628
2.https://www.zhihu.com/question/59122163/answer/208899370
3.https://www.zhihu.com/question/59122163/answer/313377426
4.http://www.sohu.com/a/298161168_505795
5.http://dbctalk.org/forum.php?mod=viewthread&tid=85
6.https://www.jianshu.com/p/5763e2b03c26
7.https://blog.csdn.net/ljlfather/article/details/102926570
8.http://nvidia.zhidx.com/content-6-1636-1.html
9.https://aws.amazon.com/cn/hpc/efa/
10.https://blog.csdn.net/ljlfather/article/details/102926570
11.https://www.alibabacloud.com/blog/alibaba-cloud-polardb-100tb-capacity-%26-6x-performance-improvement_578294
12.https://www.infoq.cn/article/2017/08/RoCE-wechat-amber


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/23769.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于19-12-11
0