编者注
DPU作为新生事物,亦有江湖。本文来自于Pensando公司技术产品总监Steve McQuerry,其将分系列介绍DPU性能测试和比较方法。前怼NVIDIA,后踢Fungible。咱也不敢说,咱也不敢问,这要是放到国内估计又要闹个沸沸扬扬吧!
最近,Fungible和NVIDIA都声称其DPU产品创造了存储IOPS性能的世界纪录。王婆卖瓜,各家公司的测试方法在媒体上引发关于DPU性能测试的有趣讨论。
注意:当有人指出针对性测试 "没有直接可比性 "时,最终迎接你的可能会是臭鸡蛋。(继续阅读,很快你就会懂的)。
当我们深入研究测试细节时,非常重要的是要苹果对苹果而不是苹果对桔子的对比。基准测试和世界纪录可能很有趣,但我们永远不应该忽视我们做性能测试的初心:掌握产品在真实场景中的表现。如果测试原则就是有缺陷的,那么我们能得到什么?就像在一分钟内能用额头磕破142个鸡蛋能有多大实际作用呢?
极端场景下的基准和世界纪录显示了一种专注和执著,也许值得肯定,但如果它不能真正转化为现实的生产力,只有数据有什么用呢?DPU的主要用例之一是将多个基础设施服务从通用CPU上卸载下来。在这种部署中,现在的基础设施服务,如网络、存储和安全不会单独运行,所以现实世界的性能不可能是逐个测量每个服务,只能是同时测量多个同时运行的服务。这就是工作负载在现实世界中的执行情况,最重要的是,只有当我们对平台存在多个服务竞争资源的情况进行建模时,我们才可能洞察到可能出现性能问题的地方。
DPU大体上可以被归为两类:海量内核,或者多核结合传统网卡上的硬件包处理器。(很多供应商采用ARM,但也有基于其他处理器的设计。参考阅读:细思恐极!DPU能否逃脱MIPS的魔咒)这两种解决方案都缺乏创新,只是旧酒装新瓶。Pensando没有使用传统技术来解决现代基础设施所面临的挑战,而是采取了一种更加创新的方法:我们在通用的Arm内核旁边构建一颗针对特定领域的处理器,用于I/O处理(参考阅读:智能网卡还在犹豫怎么做,抄作业都不会? )
你可能会问:这有什么区别?好吧,特定领域的处理器是从头开始研发的,允许整个I/O服务在I/O处理器内执行,而不是主要在通用内核中运行I/O服务,对数据路径中的某些功能进行硬件加速。
我们的平台从头开始设计,为SDN、安全、存储和遥测服务提供最佳的性能和灵活性,具有完全的可编程性。增加P4可编程硬件使得Pensando和客户能够开发出定制的软件定义服务和应用,并以硬件的性能运行,这就是我们所说的“片上软件”。

图1. 架构对比
图1是提供基本SDN服务所需组件的简化架构概述,包括Pensando在内的每个供应商都结合测试提供额外的硬件卸载。
本文中我们将研究通过DPU来卸载云环境中多种常用服务。为了对比可编程架构与固定架构的优势,让我们从基本的SDN用例开始。
一些供应商如NVIDIA,使用硬件加速(流量卸载)来降低SDN任务对CPU的消耗,通过API,SDN软件可以将流量条目放入ASIC的硬件表。由于数据包是在卡而不是在主机CPU上处理的,可以实现更高的吞吐量并降低延迟。其他方案如AWS Nitro,主要通过具有海量内核的卡来卸载大部分的数据包处理功能。
这两种架构都可以减少主机上用于基础设施服务处理的CPU周期,这些宝贵的资源可以用于业务功能。(它还有一个额外功效,就是将基础设施服务与租户的工作负载隔离开来,从而提高安全性)。
谷歌和Facebook等超大规模公司的研究已经证实,将基础设施服务转移到专用的处理器上可以产生显著的性能和效率优势,数据中心微服务所需的CPU开销量化为22%到80%。目前任何证明这一点的额外测试都只是在重复劳动,所以更有意义的对比应集中在何种特定架构可以做的更好,而不仅仅是看单点表现。考虑到这一点,让我们仔细看看基于SDN方式做对比时,硬件卸载DPU架构与Pensando片上软件架构的比较。
NVIDIA公司在HotChips 33上发布的BlueField-2的SDN基准数据(胶片11页)是基于一个相对较小的数据包长114字节(胶片获取见文末)。

像这样的测试可以提供有趣的结果,但它有用吗?(见我上面提到的鸡蛋)这取决于它与你的流量类型的对比。 它可能与某些应用程序接近,但它与现代云环境中各种流量类型有什么关系?
云环境中最常见的硬件卸载用例是网络服务。云中的每个租户都创建了自己的私有网络,但云基础设施必须透明并安全地服务于每个客户,实现相关功能需要建立一个SDN通路。
那么,一个更有用的测试是定义一套SDN流水线,然后在每个不同架构上实现相关功能,最后用不同包长的TCP流量去测试性能。首先要做的是定义一个简单的流水线。为此,让我们考虑建立一个安全的多租户环境需要什么。首先,我们需要一种封装方法来提供租户隔离。在这种情况下,我们选择VXLAN,当数据包被解析时,我们匹配VXLAN网络ID(VNID)以识别特定云实例或网络中的流量。接下来我们需要检查客户网络的安全条目,并提供连接跟踪(L4有状态防火墙服务)。然后我们需要对内部数据包目标IP地址进行查询,并相应地重写内部数据包目标MAC地址。最后,我们需要在VXLAN头中重新封装数据包,并转发到适当的接口。

图2. SDN流水线
为了对比Pensando架构与BlueField-2架构,我们建立了一个实验环境来测量两个裸机服务器之间这一简单通路的基本性能。该测试由Principled Technologies公司独立验证:包括配置在内的详细报告请见文末。
在这项测试中,我们比较了最新的商用产品,即Pensando DSC-200和NVIDIA的ConnectX-6 Dx,测试速率为100G。
尽管我们多次尝试,但仍无法从NVIDIA或其经销商渠道购买到BlueField-2 100G DPU。 不过我们有ConnectX-6 Dx卡,这正是英伟达在BlueField-2中用作数据包处理引擎的东东,所以我们的测试基于此展开。
在这一点上,如你看到的,这是另一个苹果和橘子的案例,但请忍耐一下。ConnectX-6 Dx ASIC与BlueField-2中使用的ASIC完全相同。此外,我们利用主机中的内核来取代BlueField-2中的内核,而且内核数是BlueField-2中的四倍,这也对NVIDIA是更有利的条件。在我们进一步讨论之前:如果有人能提供BlueField-2 100G,我们可以做一个精确的苹果对苹果的比较。
总结一下。我们正在进行的测试比较了Pensando DSC-200和NVIDIA BlueField-2数据包引擎的性能。由于没有BlueField-2 DPU,我们利用了主机系统的32个内核的处理功能(是BlueField-2 100G可用内核的四倍),这为那些没有被硬件卸载的数据包提供了更优的结果。
足够的细节,让我们回到测试中去吧!
对于Pensando DSC,SDN流水线被加载到网卡的固件中并在P4处理引擎上执行。对于NVIDIA ConnectX-6 Dx,SDN流水线是在目标服务器上通过OVS建立的。图3所示为基本设置,其中服务器1是发送方,服务器2是目标服务器。

图3. 测试框图
我们使用基于内核的工具(iperf3)来产生TCP流量,这近似于供应商环境中两个主机上运行的应用程序可能产生的流量类型。因此,这些结果并不测量或代表任何一个架构的极限,而是显示了每个架构在不同数据包大小时的表现,这些数据包大小与基于内核的应用程序的数据包大小相近。
我们发现,对于较小的数据包,CX-6 Dx架构对硬件卸载的流量加速表现良好。 然而,当数据包增大到256字节以上时,就与DSC-200就拉开了差距,DSC-200性能比NVIDIA ASIC高出1.5倍。
另一个值得注意的测量是针对未被卸载的流量。对于无法进行硬件加速的流量,DSC-200的性能比CX-6 Dx好13倍。这是由于架构的性质决定的:DSC通过硬件中的P4引擎来处理包括连接跟踪在内的所有带状态的防火墙服务。虽然CX-6 Dx支持连接跟踪功能的硬件卸载,但我们无法使其工作,尽管在测试时使用了最新的驱动程序和软件。这可能是由于SDN软件和硬件之间的依赖性。即使CX-6 Dx存在硬件能力,软件也必须能够对流量进行编程。当软件或硬件不能执行这些功能时,数据包处理就会落在CPU内核上,这与ASIC的性能不匹配,因此对性能有负面影响。

图4. 测试结果
这使我们回到了最初的观点,即架构的差异和片上软件的价值。上图直观地显示了工作负载被加速与通过海量核心处理时,不同架构之间的性能差异。Pensando的片上软件方法意味着可以增加对新协议和服务的支持,同时保持卓越的性能水准。其他方案会面临严峻的选择:要么忍受性能的降低,要么部署新的硬件(通常需要18-24个月的时间来开发,更不用说验证和部署了)。这可以从BlueField产品的演变中看出,它包括BlueField(CX-5)、BlueField-2(CX-6)和BlueField-3(CX-7)。
这就是架构之间的关键区别。CX-6 Dx(以及延伸的BlueField 2)架构依赖于硬件卸载,它建立在静态的ASIC、API、兼容的驱动程序,以及将流量卸载至ASIC的软件上。这种方法是一种折中的方式,最明显的就是:
如果这两个条件都不能满足,那么数据包的处理就只能在内核上,这将大大降低性能。
对于Pensando来说,该功能可以被放进P4数据包引擎中。对运行在ARM内核上的软件的依赖性最小,而且新的功能可以很容易地通过编程在芯片上实现。
在评估技术时,性能测试和基准测试提供了一个有价值的数据点,但重要的是要看清方法,并将其转化为真实的现实应用。在比较BlueField和Pensando DSC等DPU时,真正重要的是它们在不同流量规模下的性能,同时提供复杂的SDN通路、安全和存储服务。
Pensando的与众不同之处在于片上软件,它提供了一个可定制的硬件加速引擎。这使Pensando用户能够运行专门为其业务用例开发的数据包处理软件,就像在芯片中为其量身定制的一样。这种创新消除了传统模式所造成的功能开发延迟,即数据包处理功能内置于ASIC中,而且需要通过OVS等第三方软件来实现。对于那些不能由ASIC加速或卸载,需要CPU的服务Pensando方案也可以大大提高性能。
随着我们在Pensando继续构建解决方案,我们也将继续寻找有意义的方法,通过性能测试来证明我们平台的架构优势。接下来,正如许多云供应商所部署的那样,我们将研究在云环境中结合多种服务(SDN + 存储)。
通常情况下,性能测试往往是一个非常情绪化的话题,特别是当它被用作比较产品的手段时。