鄢贵海在中国计算机学会芯片大会上做 DPU 主题报告
在 DPU 概念诞生之初, 人们争论它「应如何定义」, 但后来发现, 只有定义, 还远不能说明 DPU 能做什么、有什么作用、如何与现有系统更好地协同。本文将讨论 DPU 发展中的四个关键问题:DPU 是什么?DPU 可以标准化吗?DPU 产业化面临哪些挑战? 以及是否有「中国方案」? 一些问题目前还很难给出确切的答案, 但抛砖引玉, 希望引起大家的关注。
一、DPU 是什么?
DPU 是新进发展起来的一种专用处理器, 但是对于 DPU 的释意却不如之前的一些处理器一样容易做到「不言自明」。比如 GPU, 大家听名称就知道是什么, 名称就是定义了。类似的还有数字信号处理器 DSP, 深度学习处理器 NPU 等。其实,CPU 也是一个释义并不清晰的概念, 对于「中央」是什么含义, 大概在 50 年前也没有太多争论。但是 CPU 需要干什么, 在系统中的角色是什么, 确实比较清楚的——这其实才是首要的问题。相较而言, 所谓的「定义」反而不是那么重要。简言之,DPU 的参考结构是什么、能处理什么类型的负载, 怎么集成到现有的计算体系中去才是 DPU 研发要解决的关键问题。
DPU 是面向基础设施层的数据处理单元。鉴于此,Intel 也把自己的 DPU 称之为「IPU」。那么所谓的基础设施层, 是有别于应用层而言的, 是为了给予应用提供物理或虚拟化资源, 甚至提供基础服务的逻辑层。其实这个概念很好理解, 从我们先有的计算系统的宏观逻辑层次来看, 本身就被人为的分为基础设施层 (IaaS), 平台层 (PaaS), 软件层 (SaaS), 最上层就是应用层。如果微观来看, 就会更清晰了。基础层主要包括与硬件资源交互、抽象硬件功能的组件, 包括的网络, 存储, 服务器等。从优化技术的侧重点来看, 越基础层的组件越倾向于以性能优先为导向, 存在更多的「机器依赖 (Machine-dependent)」, 越上层的优化越以生产效率为导向, 通过层层封装, 屏蔽底层差异, 对用户透明。
DPU 是面向基础设施层的数据处理单元
那么, 难道现有的数据中心的 CPU、GPU、以及路由器、交换机, 不能继续作为「面向基础设施层的数据处理单元」吗? 在计算系统的研究, 很大程度上是「优化」的研究。现有的基础设施不是不能, 而是不够「优化」。如果没有新技术的发明和引入, 最终需求和供给之间的矛盾就会越来越突出。
DPU 的出现首先要解决的就是网络数据包处理的问题。传统来看,2 层网络的数据帧是网卡来处理, 由 CPU 上运行的 OS 中的内核协议栈来来处理网络数据包的收发问题。这个开销在网络带宽比较低的时候, 不是大问题, 甚至中断开销都可以接受。但是, 随着核心网、汇聚网朝着 100G、200G 发展, 接入网也达到 50G、100G 时,CPU 就无法在提供足够的算力来处理数据包了。我们发现了一个现象, 称之为「性能带宽增速比失调」, 简单理解就是 CPU 性能由于摩尔定律的放缓, 性能增速也随之放缓, 但是网络带宽的增速来自于应用的丰富, 数据中心规模的扩大, 数字化进展的驱动, 所以增速反而更加的迅速, 这就进一步加剧了服务器节点上 CPU 的计算负担。
另外一个例子是在云计算场景下的一个核心应用, 虚拟机之间的数据转发问题, 即 OVS。通常而言,20 个 VM 需要消耗的算力, 如果用 Xeon 的多核 CPU 来处理, 大概需要 5 个核的算力——这确实还是比较大的开销。
此外, 目前的系统结构, 其实并不是为处理网络数据而生的, 而是为了更高效的管理本地资源, 支持多用户、多任务并行, 本地安全, 适当并发, 所以必须划分不同特权指令的执行和访问权限, 采用复杂的中断机制。这些机制对于高带宽网络、随机访问、高并发度收发的场景效率并不高。所以现有技术开辟了用户态访问机制, 直接绕过操作系统内核态, 用轮询替代中断来处理 IO 操作。这些在现在体系基础上的「修修补补」的权宜之计, 本质上是经典技术在新场景下的不适应。
为了更好的理解 DPU 在系统中的角色, 可以借助一种经典的计算系统模型, 把系统按照逻辑功能划分为三个部分:1) 数据平面 (Data Plane), 定义为用于数据包解析和处理的数据通路, 代表计算与数据密集的功能部分;2) 控制平面 (Control Plane), 定义是为输入输出数据流提供和配置数据平面的算法集合, 代表资源调度、系统配置、链路建立等控制密集的功能部分。此外, 业界通常还增加了第三个层面, 即 3) 管理平面 (Mgmt. Plane), 代表系统监控, 故障隔离, 在线修复等周期性或偶发性的部分应用。其实这也是在「软件定义网络 SDN」方法学下的一种划分。如果把一个城市的路网基础设施比做 SDN, 那么众横交错的道路就是其「数据平面」, 其路网密度和宽度决定了路网的流量上限;所有的交通灯及其控制系统就是其「控制平面」, 其控制算法优劣、部署位置的合理程度决定了交通流量实际容量;各种测速点、流量监控、临时交通管制、事故拥塞疏导等就是其「管理平面」。有了这套基础设施, 各类用户就可以应用各种车辆 (相当于用户的应用程序) 来开展运输服务了。
对于不同平面, 对可并行度、性能、灵活性、可靠性等属性通常都有比较大的不同。对于数据平面, 突出的诉求就是性能, 通过开发数据级、线程级, 任务级并行度, 高度定制化专用计算单元, 一切优化设计都是性能导向。而对于控制平面, 主要诉求是通用灵活, 便于作为控制数据平面的抓手, 把使用权交给用户。管理平面的功能主要是安全、可靠、易用, 便于系统状态监控、维护, 方便支持自动化运维等机制的实施。
为什么要从这三个平面来入手来看待 DPU 在系统中的角色呢? 因为这三个逻辑平面反映了 DPU 设计过程中需要关注的内容。有人把 DPU 单纯的理解为给 CPU「减负」, 把 DPU 作为一个网卡的「变种」, 只是一个被动设备, 把 DPU 视为一个单纯的算法硬件化的载体, 以「头脑简单, 四肢发达」的形象示人, 属于单纯追求强数据平面, 弱控制面的设计。比较典型的如数据加密, 图像转码专用卡,AI 加速卡等, 这是异构计算的「1.0 时代」。
如果我们重新审视一下系统功能的载体分布情况, 就会看到 DPU 其实越来越不像是一个单纯的加速器, 而是与 CPU 全方位配合的一个关键组件。传统的经典的计算系统, 我们称之为类型 I(Type-I) 是主机端负责所有的管理、控制、数据面的功能;异构计算的发展最先牵住的「牛鼻子」就是数据密集、计算密集的算法加速, 所以主要卸载的就是数据面的计算负载, 但是控制、管理都很少涉及, 我们称之为类型 II(Type-II)。一个典型的表征就是从 Host 端只能发现这个计算设备, 但是对于设备的状态, 启动、关闭、任务分配等都比较不方便。随着智能网卡等形态的产品出现, 在设备端除了数据面的优势得以强化外, 出现了完整的控制面功能, 我们称之为类型 III(Type- III)。例如 ARM 的控制器, 运行了轻量级的操作系统用于管理板卡上的资源;这也是目前比较常见的类型。还有最后一类,Type-IV, 是 DPU 承担所有数据面、控制面、管理面的功能, 而 HOST 侧反而不那么重要的, 这被认为是 DPU 的终极形态, 即完全以 DPU 为中心来构建计算系统。前不久阿里云公布的 CIPU(Could Infrastrucutre Procesing Unit) 宣称替代 CPU 成为新一代云计算核心硬件, 可以说是把 DPU 推向了舞台的中心, 虽然也有很多争议, 但这也许正是 DPU 发展的方向。
我们再来看看 DPU 具体能干什么。我们把 DPU 发挥作用的场景分为四个方向, 分别为网络、存储、计算和安全, 这四个方向其实是有依赖关系的, 在这个图中, 具有相邻关系的部分代表了一定的依赖;计算的部分涉及到的 PaaS 的内容偏多, 网络的部分偏 IaaS 层, 存储、安全在 IaaS 和 PaaS 层都比较多。覆盖这个分类图中越多的场景就是目前 DPU 各厂商努力的目标。
DPU 功能场景
为了实现这个功能, 我们可以通过我们研发的第二代架构的 DPU 产品结构来体现。在这个架构中, 有几个比较创新的功能单元, 比如 NOE, 是传统 TOE 的升级版;DOE, 是专门用于做数据查询加速, 还有 DOMS, 是一种高效的管理片上缓存数据的结构。其它的创新的结构还包括,FlashNOC 的片上互联技术, 还有多种面向特定 IO 的 DMA 的单元等等。
最后, 如果说 DPU 发展最大的驱动力, 其实还是来自需求侧。数据中心的架构发展趋势已经从 20 年前的本地部署集群, 到十年前的云化资源, 再到目前的云原生阶段。基础设施层变得越来越厚重, 向下越来越强化硬件资源的池化, 向上是「XaaS」, 即「一切皆可服务化」。K8S 等系统成为了新的「操作系统」, 服务网格成为了新的网络化应用开发基础,DevOps 开发运维一体化……在「生产率」得到提升的同时, 也直接催生了算力的需求, 特别是 IaaS 和 PaaS 层的算力需求——这也是 DPU 的主战场。
二、DPU 可以标准化吗?
在回答 DPU 是否可以标准化之前, 需要明确标准化的确切含义是什么, 以及为什么要标准化。我认为,DPU 的标准化涉及两个方面:DPU 的架构是否可以标准化, 这影响到 DPU 的研发成本问题;DPU 的应用是否可以标准化, 这影响 DPU 的应用生态的问题。
现在广泛存在一种认识的误区:笼统的认为 DPU 是一种专用处理器, 既然是「专用」, 那么就不可避免的采用「定制化」才能实现, 一旦「定制化」, 那么「标准化」也就无从谈起了, 从而得到了一个武断的结论:DPU 没有产业化价值!
其实专用化、定制化、标准化这三个概念, 并没有直接的因果关系。
专用化强调的是应用场景, 是否值的专用化, 取决于需求的的刚性。定制化是技术实现的路径选择, 经常是创新和核心技术的「发源地」。标准化是为了降低边际成本, 通常通过建立或融入产业生态、创造规模效益, 实现创新技术的价值变现。
比如,GPU 无疑是一种「专用」处理器, 因为人们对图形图像这种信息交互方式是绝对的刚需;GPU 中通过定制化来实现光栅操作处理器 (ROP)、纹理处理器 (TPC) 等高度定制化的功能单元, 还有超大规模的数据集同步并行处理技术, 都是面向像素级海量数据处理的定制化技术;最终, 通过 OpenGL,DirectX 等图形操作 API,CUDA 的通用编程框架来做标准化。所以,「专用」并不比「通用」低人一等,「定制化」甚至是解决一些应用刚需必须采用的技术选择。
我们去年在中国计算机学会通讯上发表了一篇文章《DPU:以数据为中心的专用处理器》, 其中有一个图, 反映的是目前几类处理器的特征分布。从功能导向划分为计算密集 vs. IO 密集, 从结构设计划分为控制为中心和数据为中心;从中我们可以看到, 目前 DPU 所处的分布区域, 确实还有一定的空白。简单的演绎一下, 在其它三个区域都有很好的产业化格局的时候,DPU 所属的区域应该也没有道理不能产业化。
我们团队在 DPU 标准化工作上也作出过一点贡献。首先是组织编写了行业第一本 DPU 技术白皮书, 这本白皮书比较全面的刻画了 DPU 的功能集, 以及 DPU 的应用场景, 并且给出了一个比较通用的 DPU 设计的参考模型。今年在过往的基础上, 我们又组织编写了第二部技术白皮书, 但关注的重点从 DPU 参考设计迁移到了 DPU 的性能评测方法, 作为后续细分应用设计基准测试程序的参考。
我认为,DPU 标准化是一个过程, 而不是目的。标准化的进程很大程度与市场化程度相互作用。因此, 标准化的目的是市场化, 而市场化的进展也将反过来促进标准化的工作。
三、DPU 产业化面临的挑战
DPU 主要在基础层和平台层发挥作用, 这决定了现阶段 DPU 的优化主要是性能导向。这其实一块特别硬的骨头。现在有些 DPU 的设计, 过于依赖通用核的使用, 尽管灵活性得到了保证, 但是性能往往上不去, 根本就不可能有客户买单。性能好, 灵活性差, 客户还会试一试;反之, 是一点机会都没有的。
这里我将介绍一个大家更有切身体会的挑战——产品适配。DPU 需要适配不同的 CPU 平台、不同的操作系统。「适配」说起来容易, 做起来难, 面临工作量「指数爆炸」的适配困境。例如, 驭数 DPU 中的 NOE 功能是 DPU 行业内低延迟性能最好, 在 X86 上的 TCP 和 UDP 的 1/2 RTT 回环时延可以达到 1.2us 甚至更低。做到如此极致, 除了硬件卸载之外, 也需要 YUSUR HADOS 的 InstantA™ NOE SDK 针对不同 CPU 架构做深度优化。因此, 我们在适配鲲鹏 CPU + OpenEuler 操作系统时, 需要解决和优化不少 ARM 架构和 X86 架构的差异化问题, 例如 ARM 架构上的指令读写乱序的问题, 最终做到了在鲲鹏 CPU 上 TCP 和 UDP 的 1/2 RTT 达到 1.6us 的业界领先的低时延性能。然而, 当我们以为可以轻易的去适配「鲲鹏 CPU + 麒麟操作系统」时, 又出现了不少新的问题, 例如需要解决麒麟中断处理差异, 并且需要新一轮的性能优化。
鉴于此, 我们提出了一套自动化多生态环境的编译、发布、测试系统平台 (ADIP), 把适配工作系统的分解为两条四个阶段的流水线, 分别针对 Host 侧的软件适配和 DPU 侧的软件适配。这个开发集成平台已经支持了驭数的 DPU 在多个国产 CPU 和 OS 的适配工作, 目前还在快速的完善过程中。虽然目前我们的 ADIP 流程自动化程度还有待提高, 但是对于流程阶段的划分, 已经可以非常高效的指导过百人的工程师团队来协作开发。
自动化多生态环境的编译、发布、测试系统平台:HADOS ADIP
以上的内容只表述了我们在开发 DPU 过程中的一个较大的挑战, 并且分享了我们的在应对这个挑战时提出的工程化解决方案。其实,DPU 还面临一些其它的挑战, 一些是属于目前国内集成电路设计行业面临的共性问题, 比如芯片制造的供应链问题, 高水平研发人员短缺问题等等;也有 DPU 这个赛道的特性挑战, 比如需求比较多样化, 存在需求多样化与 DPU 设计功能出现失配 (Mismatch),DPU 的软件生态不够成熟等问题, 虽「道阻且长」, 但「行则将至」!
四、DPU 的发展是否有「中国方案」?
DPU 的发展是否有适合我们自己的道路或「中国方案」? 这也是我们一直在思考, 但尚无定论的问题。虽然 DPU 不分「国界」, 但是 DPU 的产业化可能还是要找到适合我国国情的途径。
在计算系统发展的历程中, 大体有三个重要的因素决定了一类产品/技术的是否能取得商业化的成功。第一就是「性能」, 取决于创新结构、算法的发明, 创新技术、工艺的采用等。第二就是「生产率」, 与开发效率, 系统与现有系统的兼容性, 学习成本等因素有关。第三是「成本」, 涉及到规模效应, 工程化水平, 供应链, 以及服务成本等。
首先,DPU 的性能问题一方面是设计问题,DPU 的结构是不是优秀, 功能是不是完善等;另一方面的问题是 DPU 芯片生产制造的的问题。从我们 DPU 设计的功能和指标上来看, 我们自研的 DPU 和目前已经公布的一些 DPU 的产品相比可以说不落下风, 甚至在一些单项指标上还有领先, 比如时延。但是, 我们的优势是局部技术上的优势,NVIDIA,Marvell 的产品都有借鉴前代相关产品的功能模块, 架构更加的成熟, 而且已经采用了更加先进 (如 7nm) 的工艺, 从综合的产品力上来看, 客观说还是有一定优势。因此, 现在 DPU 得整体格局还是典型的「西强东弱」。
但是, 中国目前算力需求是全球最强劲的。服务器的需求增速是全球第一, 国家层面还有「新基建」中的「算力基础设施」的宏大布局、今年 2 月份启动的「东数西算」战略布局、运营商开始广泛投入的「算力网络」的建设等等。这不仅为 DPU 的发展提供了机遇, 还给整个信息技术、计算技术的发展都提供了新的机遇。中国人擅长「摸着石头过河」, 我们坚信、甚至笃信, 更期待与全行业的同仁, 通力协作, 探索出一套「中国方案」, 引领 DPU 这样一个新技术的发展。