本文转载自:软硬件融合
作者:Fungible
编者按:Fungible和NVIDIA都发布了DPU——一种新的处理器类型,DPU到底是什么?它有哪些功能?价值是什么?目前其实各家的看法都还不太一样。兼听则明,相互学习,共同提高。这篇文章,我们来一起学习一下Fungible对DPU的看法。
PS:Fungible 2019年定义了自己的DPU;NVIDIA在合并Mellanox之后于2020年6月推出DPU,然后在2020年10月大张旗鼓地宣传;Intel则刚刚(2021年6月)发布了自己的IPU处理器,来表达对“DPU”这件事情不同的看法。
本文参考文献(Fungible白皮书):
The Fungible DPU: A New Category of Microprocessor
https://www.fungible.com/wp-content/uploads/2020/08/WP0027.00.02020818-The-Fungible-DPU-A-New-Category-of-Microprocessor.pdf
Fungible DPU:一种新类别的微处理器
没有什么经历能像创造一个新的市场类别那样鼓舞人心、令人满足,尤其是当它涉及一项划时代的技术时。可编程数据处理单元(DPU)作为数据中心设计中缺失的关键元素正在迅速获得认可,它被称为继CPU和GPU之后数据中心中的“第三大处理器”。因此,现在是时候列出驱动这一新的微处理器类别需求的原因,定义它的关键属性,并描述它将在数据中心扮演的角色。我们将从Fungible DPU的角度来描述这一点,我们相信这是解决数据中心面临的问题的第一个全新的、基于基本原理的设计。
1 我们讨论的问题
开发一项新的更好技术,必须从“为什么”开始,而不是“是什么”。为什么现有的解决方案不充分?为什么需要一种全新的方法?我们首先来回答这些基本问题,重点介绍一些行业趋势,这些趋势已经持续了一段时间,今天呈现了一个不断深化的“横向扩展”数据中心基础设施危机:
- 云原生横向扩展应用程序的普遍使用推动了数据中心内、数据中心之间以及数据中心与最终用户之间的网络流量的指数级增长。
- 需要在数据中心内存储、处理和移动的数据量呈指数级增长。
- 网络威胁的频率和复杂性不断增加,导致管理动态和静态数据安全的成本不断增加。
- 现代工作负载的多样性带来了服务器变体数量的不可持续增长,威胁到作为横向扩展架构基础的简单性和敏捷性。
这些趋势已经出现一段时间了,但由此产生的问题首先出现在超大规模数据中心。早期解决这些问题的尝试是基于使用FPGA、PCIe交换机和智能芯片的增量式的单点解决方案。FPGA用于加速特定功能,PCIe交换机用于互连,SmartNIC用于将计算从通用x86内核卸载到更便宜的通用ARM内核。我们将探讨为什么这些早期的解决方案未能全面解决这些问题。
2 现状
现代的原生云应用程序是作为分布在网络连接的服务器上的微服务编写的。因此,这些应用程序对网络资源有很大的需求,特别是在通用处理器上以软件实现的部分。许多现代应用程序还需要处理大量数据,这些数据无法在单个服务器中处理,因此需要“分片”或跨多个服务器分布。这些应用程序趋势提高了一个日益重要计算类别的计算强度,我们称之为以数据为中心的计算。这些计算具有以下特征:
- 计算被分为时间不相交的“微线程”来修改状态。
- 微线程可以短至100条“标准”微处理器指令。
- 属于许多计算上下文的微线程需要并发处理。
- 数据带宽与算术带宽之比为中高。
与数据中心中的所有其他计算相比,以数据为中心的计算的比例一直在稳步增长。一个有根据的猜测是,如今,在横向扩展数据中心中,超过25%的能量都花在了这样的计算上,而且随着横向扩展架构的普遍采用,这个比例预计只会增加。
在前15年的横向扩展架构(2000-2015)中,以数据为中心的计算几乎完全由通用CPU执行。由于发现了这种方法的低效率,超大规模的公司采用了智能芯片、PCIe交换机和FPGA的单点解决方案的拼接。这种拼凑的方法并没有全面地解决日益增长的问题,但它们确实导致了超大规模数据中心日益增长的复杂性。为了进一步说明为什么需要一种新的微处理器,研究一下为什么这些零敲碎打的方法是如何失败了,是件有指导意义的事情。
首先,我们注意到现代CPU体系结构(x86、ARM)在过去四十年中一直在不断优化,只为了做好一件事:尽可能快地执行终端用户应用程序。这就要求他们用现有的技术提供最快的单线程性能。不幸的是,这种关注也使得它们在以数据为中心的计算时效率低下。
多年来,CMOS技术的原始性能改进,加上CPU在大型机时代发明的高性能特性的采用,掩盖了低效执行的问题。随着这些“摩尔定律”的改进速度放缓,执行以数据为中心的计算的解决方案在别处变得越来越明显。延缓这一认识的原因是,通用可编程性是如此灵活和强大的工具,以至于有充分的动机用这一解决方案解决所有问题。
解决这个问题的一种方法是,在现有的网络数据路径之外,加入通用CPU内核和一些硬连线的加速器,从而使网卡向“智能”方向发展。不幸的是,这些SmartNIC只不过是以松散耦合的方式将新的加速器和CPU内核集成到现有的硬连线数据路径中。虽然SmartNIC确实有效地卸载了硬连线部分的计算,但松散耦合实现的是一个脆弱的设计:只要要执行的计算可以由硬连线的数据路径处理,性能就足够了;在需要灵活性和CPU核心的情况下,性能会急剧下降。智能芯片只不过是将现成的计算单元集成到一块硅片上的一次尝试。他们没有认识到,以数据为中心的计算是一个关键而重要的类别,它需要硅和软件的架构创新来正确地解决这个问题。软件提供了灵活性和敏捷性,而硅提供了速度。遗憾的是,SmartNIC只提供其中一种,而不是两种都提供。值得注意的是,SmartNIC最初确实允许超标量的的x86内核和ARM内核之间的价格差异中套利,但随着竞争态势的形成,这种机会已经迅速减少。
已经使用的另一种方法是利用FPGA从通用CPU中卸载特定功能,甚至“软化”智能芯片的硬连线部分。虽然FPGA代表了一种合理的方式,为原型和验证硬件设计提供了灵活性和速度的组合,但当涉及到广泛的部署时,它们有严重的缺陷。事实上,FPGA技术既不提供完全可编程解决方案的灵活性,也不提供硬连线解决方案的性能,这就是为什么它通常被用于原型或在可接受部分妥协的领域。FPGA需要硬件设计专业知识来表达计算意图(用Verilog编写和关键时序路径的详细知识来满足性能目标),这使得开发时间比编写软件要长得多。在性能方面,FPGA比优化的硬件设计,至少落后一个数量级,因为它们用于灵活性的主要技术是连接低层硬件构建块的可编程互连。
第三种方法是将存储和计算资源直接连接到x86 CPU的PCIe引脚或通过PCIe交换机。存储资源通常是SSD,计算引擎是GPU或TPU,用于增强图形、分析和机器学习应用程序中使用的向量浮点能力。这种超融合方法有多个缺点。首先,计算元素和存储元素之间的数据移动需要经过x86 CPU,这是低效的。第二,计算和存储资源被困在x86 CPU之后,无法被其他超融合CPU使用。第三个问题是,许多应用程序需要的存储空间无法容纳在单个服务器中。因此,这种超融合的方法逐渐失宠,被一种解构的方法所取代,这种方法将计算和存储资源放置在不同类型的服务器中,并作为网络上的服务提供。
虽然解构方法通过数据中心中节点间的资源池来提高效率,但它会直接遇到数据中心网络对解构问题的低效率支持。尽管多年来我们努力调优TCP/IP协议栈,并为核心的基本网络问题提供补丁解决方案,但高效的解构仍然是不可能的:它受到缺乏真正的数据中心高速结构的约束。Fungible DPU通过在其内部嵌入一种名为TrueFabric的基于标准的可扩展技术,一次性的解决了这个问题。
Fungible DPU的目标是提供一个全面的解决方案,通过使用一个基于基础的,更加简洁的设计。需要指出的是,Fungible DPU的两个功能:以数据为中心的计算的高效执行,以及通过Truefabric对资源的高效解构是高度协同的,单个硅片中实现以获得最大效益。
3 解决方案
Fungible成立于2015年,其使命是为所有扩展数据中心带来性能、经济、可靠性和安全性方面的革命。为了做到这一点,我们需要发明一个基本的新基础设施构建块——Fungible数据处理单元及其相关软件。我们特意选择了“数据处理单元”这个术语,以强调这种新元素以可编程的方式处理数据,而不是仅仅传递数据。
我们需要指出的是,Fungible DPU的目的是补充而不是取代CPU,后者仍然是通用应用程序处理的主要引擎。它也不会取代其他特定于应用程序的处理器,比如GPU和TPU。
在应用服务器内部,Fungible DPU位于应用处理器和网络之间,扮演着从应用处理器卸载以数据为中心的计算和实现TrueFabric端点的双重角色。在存储服务器中,可替换DPU位于存储设备和网络之间,实现存储系统的目标端功能和实现TrueFabric的端点。在这些角色中,Fungible DPU支持跨整个数据中心的计算和存储资源的高效解聚合,我们将这个概念称为超解聚合。下图说明了这一点:
因此,Fungible DPU允许运营商仅使用少量服务器(少量应用服务器和少量存储服务器)来构建通用且强大的数据中心。因为Fungible DPU解构和可组合能力,使用户能够构建一个“裸金属数据中心”,根据特定的工作负载需求在几分钟内通过装配提供计算和存储资源,独立于物理上位于数据中心的特定位置。这个强大的范例是数据中心基础设施的根本,也是显著提高经济效益的关键。Fungible DPU不仅为实现这一重要目标提供了手段,而且还提供了高性能、高可靠性和强安全性。
4 数据中心第三个处理器
GPU在成为服务器的第二个处理器之前,经历了十多年的阻力。这一次,业界更快地认识到DPU是服务器内部必需的第三个处理器。然而,为了赢得与CPU和GPU同等的地位,DPU必须同样具有可编程性和灵活性,并且在执行其目标计算集时足够高效。
x86 CPU由于其灵活性、丰富的开发生态以及可预测的性能改进,一直保持着超越应用程序处理的核心地位。
另一方面,GPU在整合可编程性以充分利用其SIMD架构之前,并没有超越其作为高性能图形处理引擎的本源,从整合可编程性之后,GPU就巩固了其作为计算(如大量使用向量浮点运算的机器学习)的重要地位。
当处理以数据为中心的计算时,Fungible DPU提供了比CPU更大的收益,具有类似的可编程性和灵活性。虽然DPU的开发生态还处于初期阶段,但Fungible DPU提供了一种直观的编程模型,该模型自然适合于以数据为中心的处理,极大地简化了采用该模型的过程。此外,Fungible DPU嵌入了Truefabric,这是促进高效的节点到节点交互——扩展数据中心的基础。
下一页的图表总结了三种类型处理器的特征:
5 Fungible DPU关键属性
在最高级别上,Fungible DPU是一个SOC,它包括一个运行标准Linux操作系统的完全可编程的控制平面,一个运行在名为FunOS的裸机“运行到完成”操作系统上的完全可编程的数据路径,以及TrueFabric的完全实现。这些组件旨在提供以下关键属性:
- 可以运行标准Linux应用程序的可编程控制平面。
- Fungible DPU的控制平面必须以最小的工作量支持标准Linux应用程序。该控制平面还必须与嵌入式数据平面有效地交互,并灵活地与编排系统交互。
- 一种可编程的数据平面,它涵盖了所有以数据为中心的计算。
- 为了承担执行所有数据中心计算的责任,DPU的数据平面必须使用高级语言进行编程。它的编程模型必须允许以数据为中心的计算能够自然而直观地表达出来。它的程序必须易于设计、开发和维护。Fungible DPU完全满足这些要求。相比之下,将数据路径灵活性限制在底层硬件配置语言的体系结构将永远不能覆盖以数据为中心的计算的全部范围。
- 不损害数据路径性能以支持现代本地云工作负载。
- 现代数据中心的工作负载非常多样化。因此,DPU必须支持各种以数据为中心的计算,同时不影响性能。这些计算包括网络、存储、安全和虚拟化等基础设施服务,以及用于将一系列转换应用于动态数据的原语。可替换DPU能够高性能地执行以数据为中心的全谱计算。
- DPU必须擅长有状态和无状态计算。具体来说,对高度多路复用包流的有状态处理是承担以数据为中心的整体处理的必要前提。这种功能很难硬塞到使用通过P4或类似语言配置的硬件块流水线的方式,而且在硬连线的方式中根本不可能实现。实现任意新的有状态计算(其中许多不同的计算需要并发执行)的能力是大多数体系结构所不具备的。Fungible DPU擅长这些类型的计算,因为它从一开始就考虑了这个目标。
- 节点之间的高性能数据交换规模超过三个数量级。
- 横向扩展数据中心网络的一个基本需求是能够支持多个数量级的可伸缩性、充分的任意到任意横截面带宽、低可预测延迟、公平性、避免拥塞、容错、端到端软件定义的安全性,同时支持行业标准。令人惊讶的是,尽管付出了几十年的努力,依然没有解决这个问题的办法。
- Fungible DPU实现了TrueFabric,一种新的网络技术,完全支持上述所有属性。DPU作为数据中心网络边缘的接入点,使其处于实现所需功能的独特位置。事实上,Fungible DPU将以太网网络上的标准IP转换成真正的Fabric,其作用类似于大型扩展计算机的背板。
6 Fungible DPU架构
对于大多数信息技术来说,在性能和灵活性之间存在不可避免的权衡。增加灵活性需要在性能上做出妥协,反之亦然。下图显示了在单个计算设备环境下的这种权衡,设备实现的技术保持不变。频谱的一端是高性能,但相对不灵活的ASIC实现。另一端是一个非常灵活的通用CPU,它可以执行任何计算,但性能不如ASIC实现。在这两个极端之间是FPGA实现。
该图还表明,在给定的技术中,将权衡曲线向上或向右移动是可能的,但只有当人们愿意以某种方式限制要执行的计算集合时。在这么长的一段时间里,通用CPU已经投入了大量的努力,很难想象如果没有这些限制,会有多大的改进。通过限制计算集将曲线向上或向右移动的一个显著例子是GPU。虽然GPU一开始是作为硬连线图形流水线,但它们逐渐演变成可编程引擎,而不牺牲显著的性能。
Fungible DPU是将权衡曲线向上或向右移动的另一个例子,但在这里,要执行的计算的限制不是像GPU那样是矢量浮点运算,而是以数据为中心的计算。
我们进一步断言,随着摩尔定律曲线的越来越平坦;我们希望看到利用这些思路的少量的新引擎被开发。这些引擎要想在商业上取得成功,只有当它们所专门用于的计算足够重要和普及的时候。
7 目标
Fungible DPU的一个基本设计要求是支持行业标准接口、协议、操作系统驱动程序和系统API,以便能够轻松地插入现有的数据中心基础设施。
下表总结了该体系结构的主要目标:
8 原则
Fungible DPU架构从一个空白开始,基于基本原则构建一个解决方案。尽管体系结构表面上有不同的目标,即允许完全的软件可编程性和交付高性能,但Fungible的方法具有不受旧有硬件或软件的限制的优势。这种新的视角对于实现这些已有供应商认为无法实现的目标至关重要。
Fungible DPU具有垂直集成的体系结构,这自然要求严格的软硬件协同设计,以及对关键用例(如网络、安全和存储数据路径处理)的深入理解。事实上,Fungible的解决方案受益于这些领域中无数突破性的创新,结合了新颖独特的架构特征,以及数百项独特的硬件和软件发明。如下文所述,这不是一条容易的道路,但必须解决整个问题。虽然本文无法详细介绍Fungible DPU中的创新,但我们列出了我们方法的几个亮点。
9 亮点
Fungible DPU核心是建立在工业标准通用多线程处理器,结合全标准以太网和PCIe接口。硬件的平衡包括定制设计的硬件组件,每个组件都提供了灵活性和性能的正确组合。这些包括:
- 专业、高性能的片上Fabric
- 定制的内存系统
- 一套完整的灵活数据加速器
- 可编程网络硬件流水线
- 可编程PCIe硬件流水线
数据处理机制转换为数千个单独的处理器和加速器线程——线程集合由一个全局芯片上的工作调度器协调。为了充分利用这些硬件功能,Fungible DPU的软件发挥了至关重要的作用,其创新与硬件一样独特和强大。硬件和软件从一开始就是共同设计的。
Fungible DPU的数据平面运行在自定义设计的以数据为中心的操作系统FunOS之上,FunOS支持直观和高效的“从运行到完成”编程。就像它所运行的硬件一样,FunOS是一个专为运行以数据为中心的计算而设计的干净设计,以闭包和延续为模型,其中所有处理都是完全异步和无锁的。该模型优雅地将硬件和软件步骤抽象为可互换的调用延续,可以无缝地编织到可弹性扩展的流中。
硬件-软件组合能够自然地混合数十个同时运行数百个不同实例的不同计算。Fungible开发了充分利用该架构的高效网络、安全和存储堆栈。
Fungible之所以决定开发内部IP,是因为我们清楚地认识到,简单地将一个现成组件组装成一个SoC将无法实现我们的预期目标。SmartNIC是这种方法的最明显的例子,它们在灵活性和性能方面都无法与Fungible DPU相比。只有将相同的基本原则应用到每一个组件(包括硬件和软件)的设计中,我们才能构建一个统一的、内聚的解决方案,以达到我们的性能和灵活性目标。这种从基础构建系统的方法需要时间和精力,不适合谨慎的人——但它是Fungible DPU提供的更强大功能的基础。
10 差异化
下图比较了Fungible DPU和SmartNIC、CPU的关系。图中显示了灵活的以数据为中心的加速器是如何紧密地嵌入和耦合在Fungible DPU结构中,而同样这些功能是如何松散地连接在SmartNIC中。同时也显示了SmartNIC中快速固定ASIC路径和弱异常路径的分离。这种鲜明的对比是Fungible DPU能够为所有以数据为中心的计算保持高性能的原因之一。
在Fungible DPU中提供真正的可编程性是很容易理解的。正如文中所指出的,一些解决方案为了快速提供少量可编程性而付出了很大的代价。然而,大多数解决方案只是口头上对可编程性表示支持——要么包括一些松散地附加在硬件接口上的CPU核心,要么声称可以使用硬件配置语言来实现以数据为中心的计算所需的复杂处理流水线。
“RDMA流水线 嵌入式内核”和“P4管道 嵌入式内核”产品就是这些方法的典型。基于P4的方法可能比硬连线的RDMA实现更灵活,但两者都有独立的数据路径,基本上与可编程核心解耦。因此,这两种方法都不能提供真正的可编程性,也不能支持具有可接受性能的以数据为中心的流的有状态处理。
令人遗憾的是,服务器网络性能已经被降低到一个狭窄的综合微基准测试,它关注的是典型案例,比如64字节包的性能,以及当两个设备被直接连接时的低延迟要求。虽然这一趋势最近开始减弱,但供应商仍然公开这些人为指标。在实际应用中,真实的数据中心应用性能在很大程度上与此类指标无关。这是因为真正的问题只出现在中型到大型的规模,而目前没有有效的解决方案。Fungible DPU的创新架构结合TrueFabric提供了第一个高性能的、基于开放标准的解决方案,承诺可扩展到最大的超级规模部署。
RoCE标准化后整整十年过去了。尽管人们不断尝试解决网络拥塞问题,并发表了大量研究报告,但即使是在中等的规模上,这个问题仍然没有得到有效解决。今天,缺乏适当的Fabric解决方案仍然限制了RDMA部署的可伸缩性。这种失败有两个原因,第一个与实现选择有关,第二个是根本原因。RoCE实现是硬编码的,主要是为了在人工背靠背设置中演示低延迟数。因此,这些实现不能随着会话数量的增加而很好地扩展,事实上,随着会话数量增多,延迟和抖动就会显著增加。第二个原因是,RoCE与其他使用逐跳拥塞控制的技术一样,在大规模网络中容易出现队列头部阻塞和死锁。相比之下,Fungible的解决方案在可编程的DPU内将RDMA层置于Trufabric之上——在会话数量和节点数量上都提供了大规模。
11 结论
推动我们创造Fungible DPU的趋势没有减弱的迹象。相反,它们正在加速。Fungible DPU能够很好地解决以数据为中心的时代的需求,因为它解决了由这些趋势产生的两个基本问题:以数据为中心的计算的低效执行和节点之间交互信息的低效交换。这将显著提高横向扩展数据中心的性能和经济效益。此外,它还从根本上改进了它们的可靠性、可伸缩性和安全性。
Fungible DPU今天出现了,它将占据CPU和GPU旁边的第三个插槽,并准备重新定义数据中心基础设施的未来。