一、DPU的前世今生
DPU这个词是2016年由美国的初创公司Fungible提出,但DPU这个词在国内流行起来主要是因为Nvdia发布了自己的DPU,但NV可以说在收购Mellanox之前基本和这一技术形态毫无关系。在DPU之前业界更多的叫法是SMARTNIC,智能网卡或者是智能加速卡,最早SMARTNIC是用在NFV里面一些对数据转发性能要求极高的核心VNF的数据面加速,比如用来做宽带接入的BRAS/BNC,4G核心网数据面的EPC,5G核心网数据面的UPF等,毕竟基于CPU的软转发比起传统的专用NP芯片转发在性能和稳定性上还是有劣势的,但SMARTNIC这一产品形态在NFV的世界里因为各种技术和非技术的原因一直没能发扬光大。
最早把SMARTNIC技术形态引入数据中心的应该是微软的Catapult项目,或者说最早引发数据中心网络变革的应该是微软的Catapult项目,但当时的技术形态和我们目前所说的DPU或者SMARTNIC技术形态完全不同,该项目设计的服务器集群基本上是定制化的服务器+定制化的基于FPGA的交换网,网络拓扑实现完全打破了通常的三层交换/路由的数据中心网络形态,而更类似于通信设备里面用于线卡互联的专用交换网(网状MESH全连通),服务器和服务器之间的链接全靠FPGA实现的全连通Fabric。该项目2010年成立,主要为了支撑当时的BingSearch业务,中间经过了2轮的演化,第二轮成果发表在2014年,按照微软自己的说法实现了超越普通CPU 40倍的性能,提高了50%的网络吞吐,降低了25%的网络时延,具体时间轴参照https://www.microsoft.com/en-us/research/project/project-catapult/ , 具体的项目细节可以参考“A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services”这篇论文。
微软随后基于Catapult项目成果启动了AccelNet项目,实现了基于数据中心的网络卸载加速等功能,这才是我们现在所说的微软的SmartNic项目,其在2015年底已经实现了超过百万片的部署,同时其架构支持Bing Search, AI等多种业务动态混布. 也就是说AccelNet的架构即支持网络卸载加速,还可以作为互联的计算模块矩阵实现各种业务应用算法加速。微软的AccelNet项目是目前头部公有云厂家中唯一一家公布了他的具体架构设计方案的SMARTNIC项目,其他的不管是AWS还是国内的阿里MOC,还是国内其他初创,基本都是沿用了AWS的黑盒玩法只说功能和好处,大家只能根据不同渠道的信息比对猜测,没有具体实现可参详,当然这也可以理解,毕竟是商业项目,人家也没有公布的义务。从AccelNet项目公布的论文看,其基于FPGA的加速卡放在服务器网卡和TOP交换机之间(第二版把网卡和加速卡整合到了一起),FPGA上的逻辑可以动态加载,针对不同的业务场景可以加载不同的逻辑,可以实现网络卸载加速,或者其他的纯应用业务算法等。其SmartNIC的实现逻辑核心是卸载GFT全局转发表实现基于SRIOV的VM流转发(这个和国内的基于virtio-net接口的转发是不同的),转发表可以根据首报文基于微软自研的VFP虚拟转发平台(自研的vSwitch,支持多控制器并发控制)动态生成,具体项目细节可以参考其2016以及2018年发表的论文。
说到DPU,无法不谈及AWS的Nitro卡,有人说按照AWS发布的时间线,其SMARTNIC的研发启动于2013年应该早于微软的Azure SmartNIC,但个人觉得这都是AWS的一面之词,毕竟Nitro在2017年11月份才发布,其历史演化周期只有他自己知道。对工业界和SMARTNIC技术生态来讲,微软的Catapult和AccelNet才是鼻祖,开创了数据中心网络创新的先河,其基于FGPA的动态网络模式到现在业界也难出其右,关键是只有他们公开发表了其设计方案和设计思路,后来者无不深受其义,当然这只是我个人一家之言,大家姑且听听罢了。AWS的Nitro尽管出现的晚,但由于定义了清晰的技术方向,出道之后基本上引领了DPU的技术趋势,像目前DPU的三个技术方向网络、存储、安全,大家都是抄AWS Nitro的,阿里最初本来是抄微软的,听说项目初期挖了不少微软的大牛,但从实际情况看最后还是倒向了AWS。而且AWS Nitro成功的把DPU从FGPA方向引向了ASIC,进而国内出现了一大批的DPU初创公司,大家都用ASIC量产来画饼给VC,这点上国内这些初创都需要感谢AWS。AWS Nitro的贡献是把SMARTNIC从网络卸载扩展到了存储和安全,进而把HYPERVIOR全卸载到了加速卡上,但AWS从来都没有明确他到底用了几张卡,从AWS官方的介绍看他有针对不同功能的NITRO卡,VPC,EBS,Instance Storage等,但这也留下了一个开放的问题,我们真的需要为每一个功能整一块独立的卡出来吗,毕竟在数据中心里面每个点都可能成为一个单点故障,新的架构设计必然面临着整体架构的调整和适配,而且这样的设计必然涉及到服务器内的插槽、供电和布局等,过多的定制基本就意味着服务器也需要定制了,加上每块卡上不同的IP,像OVS, NVMEOF, RDMA/ROCE, 加解密算法等, 这个对不差钱、不差用户的大厂可能是可行的,对中小厂这样玩就未必经济上担负得起了。
国内云大厂在SMARTNIC上投入较早的是阿里,大概在2016年前后,毕竟当时一统山河、风光无限,一副不差钱的模样,像SMARTNIC这种重构数据中心的高大上玩法阿里怎么可能不积极参与呢,于是狂挖各种海外大牛,一顿狼吞虎咽进而有了MOC有了神龙. MOC尽管是抄作业,但在设计上也有自己的创新,那就是MOC卡上引入了virtio的标准化接口,不管上面运行的是虚机、容器还是裸金属,统一采用virtio接口,这样的好处是统一了对外接口,容易实现不同服务之间的适配和迁移。坏处吗,就是virtio的缺点他全都有,而且这直接导致国内的网络卸载方案走向了更加复杂的OVS卸载,需要在加速卡上硬件实现virtio的DMA功能,而这种方案是狂耗硬件的内存资源的。从公开资料看,微软和AWS都没有走这条路子,而且在AWS的invent峰会上,有国内参会者问过AWS的Nitro方案的演讲嘉宾这个问题,可惜对方没有正面回答,后面像腾讯、京东、字节等细节透露的更少了,期待更多的细节出来。
二、DPU国内赛道热度?机会有多大?
最近两年国内DPU赛道大热,市场突然有了一堆新玩家,像中科驭数、芯启源、星云智联、云脉芯联、益思芯、云豹智能、大禹智芯、星融元、为是科技等等,不知名的水下玩家估计也有不少,大家给VC讲的故事都是先确定种子用户,然后量产ASIC芯片,去覆盖大厂之外的市场。但市场毕竟是有限的,根据IDC 2021年的调查报告,整个中国服务器的市场每年大概不到400万台,参考前几年风行的GPU/AI加速卡发展了好几年在2021年在全中国仍然只有不到80多万片左右的市场,假设DPU最终能够装配在1/4的服务器上也就是100万台上实现加速,假定每台服务器上装一片,每片假定销售收入1000美金,那么整个市场也只有10亿美金;每台服务器装两片,也就只有20亿美金的市场。我们按后者的20亿美金市场来算,这里面头部云大厂肯定会自研自己的DPU,那么20亿中至少一半的市场没有了,剩下10亿美金的市场,这么多玩家一起过来抢,即使按业界芯片大牛50%的毛利,那么整个市场年利润也只有5个亿,参考网上7nm一次流片3000万美金的成本加上巨大的软件研发成本,大家算算最后能有几家活得下来。当前的假定全是拍脑袋的,你也可以假定每台服务器上都能装两块,谁知道呢:). 这里只是提供一个计算逻辑,大家可以按照自己的判断来算市场容量。
三、DPU的潜在客户、产品定位和潜在挑战
DPU的潜在客户主要有两类,公有云和私有云厂家。公有云可以分成两部分,一部分是头部的大厂,另一部分是一些专业垂直领域的中小厂家。私有云部分相对比较复杂,一部分是自己建云的大国企,还有一部分是企业自建的小型的数据中心,还有一些是一些超融合的节点或者边缘节点等。
头部大厂最终都会有自己的DPU,所以DPU初创公司的潜在客户主要是中小云厂家和部分私有云用户。中小云厂家拥有足够的技术储备,但自研DPU可能没有经济可行性,大概率是使用第三方的方案配合自研的控制平面软件。私有云厂家可能没有足够的技术储备来自研DPU,更愿意使用第三方的完整方案。但DPU提供商面临的主要问题是DPU的需求各家都是不一样的,DPU厂家需要如何平衡其客户资源和需求来求取最大公约数,从而定义合适的产品规格和类型来保证不同的用户需求,同时要保证足够的出货量来覆盖DPU ASIC流片所需要的巨大成本。
DPU的技术趋势和产品定位按照现在AWS Nitro的标准定义,分网络、存储、安全三个方向。
网络方向除了一大堆原来在基于传统网卡实现的GSO,TSO,LSO,LRO,RSS等一大堆的网络卸载功能,以及virtio-net和OVS卸载的支持,还有用来实现VPC的一系列协议VXLAN, GENEVE, NVGRE等,再有就是RDMA/ROCE, QOS和LB等,主要看VPC具体如何实现,像国外Pensando等玩家还加入了BGP等路由协议,基本上把网络部分弄成一个片内路由器了。这里面最难的是如何支持可扩展性,数据中心网络演化非常快,不同的业务需要不同的VPC策略,如果让网络卸载功能支持不断演化的各种策略是一个非常复杂的技术问题,各家应该有大量的自研方案,这恐怕不是当前各DPU厂家宣称的几种卸载功能可以完美覆盖的。如何能用一个通用的框架去适配不同的VPC策略,对网络卸载的方案设计会是一个巨大的挑战。
存储方向主要是用来支持EBS或者本地存储,这里面涉及到virtio-blk的支持,以及对NVMEOF,ErasureCode, RAID等的支持。由于业界本来有能力支持NVMEOF存储方案的就少,既能支持DPU的网络卸载功能又能支持存储卸载的就更少了,于是就有不少玩家借助SPDK搞出来一个鸡肋的存储慢通道,借助DPU的片上CPU来通过SPDK实现存储的数据通道,这完全偏离了DPU的本来定位,为了卸载而卸载存储,完全不考虑整体存储的吞吐和时延性能。而且片上CPU受到整张卡功耗的限制,核数和主频都被限制在一个限定的范围,单靠片上的CPU来做存储转发,根本支持不了几块SSD存储盘. 考虑到片上CPU还需要实现复杂的DPU控制平面功能,比如OVS的控制面,VPC的控制面等,使用片上CPU实现存储数据面的转发显然是不现实的,必须要实现存储数据平面的硬通道。如果需要实现存储数据通道硬通道,那么就需要拥有NVMEOF,RDMA/ROCE等相应的硬件IP,而这些IP不是所有初创公司都有能力获得或者能够全部获得的,体现实力的时候到了。更复杂的是存储方案的控制平面如何设计,网络部分还有OVS的控制面可以参考,但存储方案就更加百花齐放了,如何定义存储方案和抽象控制平面也会是大的挑战。
初创公司面临的更大的问题是产品规格定义的问题,初创公司目前给自己划定的潜在用户主要是Tier2的中小公有云或者私有云厂家,考虑到研发成本问题,目前国内外的DPU提供商大都把网络、存储、安全功能放在一张卡上,考虑到VIRTIO-NET, VIRTIO-BLK, OVS,NVME,RDMA/ROCE, 加解密算法等IP对硬件资源的消耗,需要整体平衡网络、存储、安全各个部分的资源分配,来调配适当的规格划分,这个就不是一个纯技术的问题,需要有足够的数据中心运营经验和数据,因为这涉及到不同类型的数据中心应用对资源的消耗数据和性能监控数据,否则无法规划出一个合理的产品规格,来保证网络和存储能力以及安全能力的匹配以及最优资源利用率。这个是大部分初创公司都不具备的,其潜在客户们也未必有完整的规划和数据储备。即使部分初创公司的创始人来自大厂的DPU开发团队,但产品规格定义所需要的运营数据往往只有架构师层面才有可能接触到,这些初创公司创始人大概率是无法完整接触到的;即使能够接触到,也只能代表大厂自己,而且这些数据是在不停的演化的。如何获取对应的运营监控数据,平衡各家的产品需求来定义一个大部分用户能够接受的产品规格是初创公司将会面临的巨大挑战。
(最近因为工作的原因,对DPU做了一些调研,把初步的一些感想分享出来,希望和同行探讨!原计划想分享一些初创公司的调研情况的,但调研之后才发现水分太大,分享出来恐怕被人拍砖!)