最近DPU的热度居高不下,很多公司都加入了这一阵营,这也侧面印证了行业正在转向限制较少、基于服务器的存储和网络。但是,无论你是考虑使用SmartNIC、GPU还是DPU,有几个问题是需要明确的。
The Good:SmartNIC/DPU能够卸载CPU工作负载,减轻CPU负担
DPU,通常被称为数据处理单元(Data Processing Unit),通常以PCIe卡的形式出现,它可以将传统上在服务器 CPU 上运行的网络或存储服务卸载到卡上。为什么说这是好的?当你考虑像 Hyper-Converged Infrastructure 这样传统的基于服务器的行业解决方案时,在服务器 CPU 上运行你的存储或网络服务意味着你在消耗服务器 CPU、网络和内存资源。从打开系统电源的那一刻起,仅存储服务就可以消耗多达 30% 的服务器资源(取决于你启用了哪些数据服务)。另一个好处是,可以针对具体的任务量身定制专用硬件。
虽然一段时间以来,网卡一直在卸载网络服务(通常称为 TCP 卸载) ,但我们看到了一种趋势,卸载功能正向上移动,转移到更高级别、更复杂的网络功能,包括安全功能。传统上,大多数高级网络功能运行在防火墙设备或主服务器 CPU 上。这些方法要么不可伸缩,要么不可避免地消耗服务器资源,并伴有软件依赖。将高级网络功能转移到其他设备上,可以随每台服务器(相对于单个设备)一起扩展,并且不会对服务器 CPU(相对于软件)造成负担。在这种架构中,服务器操作系统消耗的是网卡的网络服务,不需要计算出网络流量管理的技术细节,并且它可以随着环境中的每个节点进行扩展。
The Bad:SmartNIC/DPU 是真正的网络或存储引擎,还是只是一个可编程加速器?
事实上,DPU大多具有可编程加速器芯片,用于将某些服务或功能从服务器CPU上卸载。这些服务或功能是什么取决于蚀刻在硅片上的软件。对于存储服务,如今 DPU 本身提供的功能并不多。这意味着使用DPU时,用户主要是获得加速方面的优势,但依旧会遇到与超融合基础设施或软件定义存储相同的限制,因为提供完整企业级数据服务的存储软件仍然运行在服务器上。
我们来进一步看看为什么这很重要。当你只将一些数据服务从服务器CPU上卸载到DPU上时,您考虑的设计原则(硬件特性,即网卡提供的内容、服务器上的软件提供的内容)与在服务器网卡上运行所有企业数据服务所采用的原则大不相同。后者可以确保CPU、网络或内存资源的消耗为零,并且不存在软件依赖或与服务器上运行的应用程序发生冲突。正确处理这一点很重要,因为如果你必须在服务器上运行软件来完成企业数据服务,你必须:
- 在每台服务器上添加(和维护)软件,并确保它与实际购买服务器的应用程序配合良好;
- 购买更多的服务器和软件以补偿内存和 CPU 上的资源开销(例如,20%的资源开销需要购买25%以上的服务器和软件许可)。
举个例子:
AWS Nitro 本质上是一个卸载引擎,它主要是在主机上运行所有内容,然后在网卡上加速。这仍然会给服务器带来负担,所以我们决定不构建另一个可编程存储卸载引擎,而只是构建一个存储引擎。一个真正的存储引擎并不是让 DPU 的消费者对芯片进行编程以卸载某些存储服务,而是将所有企业数据服务都内置于其中,包括复制、加密、压缩、重复数据删除等等。
另一个问题是,在构建卸载引擎时,无论是用于网络还是存储,DPU都不负责处理数据中心断电等故障时的持久化(persistence)问题。这就把一些最具挑战性的实现部分留给了软件(通常需要额外的专用硬件)。
The Ugly:管理问题
如前所述,在服务器中使用网卡有助于减少该服务器上的资源消耗,但也有助于扩展。与此同时,需要管理的设备数量也会急剧增加。简单地说,如果没有针对所有这些设备的简单管理解决方案,那么完全脱离 DPU 运行网络和企业数据服务将毫无意义。
从这个角度来看,大多数 DPU 供应商只提供位于企业层的带外(out-of-band)管理解决方案,这意味着你管理解决方案的能力仅限于该单一层,无论是机架还是数据中心级。但是,如果你有数千台服务器呢?再或者有多个数据中心?且是位于全球不同地点的数据中心?如果在数据中心的每个服务器上都有数据平面或DPU,管理就会变得非常复杂。
综上所述,在我们考虑使用SmartNIC或者DPU的时候,不仅要看到它的优势,背后存在的问题也同样要纳入其中。
原文链接:https://nebulon.com/blog/smartnics-dpus-spus-good-bad-ugly/