2. DPU硬件架构与编程模型

DPU(Data Processing Unit)之所以能在数据中心里承担“第三颗主力芯片”的角色,关键不在于它把CPU换成了另一种处理器,而在于它把通用计算、可编程加速、高速I/O与内存子系统集成在同一颗芯片上,并以PCIe设备的形式插入服务器。理解DPU,首先要理解它的硬件组成与编程模型:哪些部分是可编程的,哪些部分是固定流水线,数据从哪里进来、经过哪些引擎、最终落到哪里。

一、典型DPU芯片的组成

一颗典型DPU芯片可以划分为五个功能域:通用计算域(多核ARM CPU集群)、网络加速域(以太网MAC/PCS、报文解析与匹配引擎、加密引擎)、存储加速域(NVMe控制器、DMA引擎、压缩/校验引擎)、主机接口域(PCIe Endpoint/RC、SR-IOV、队列管理)以及内存子系统(片上SRAM、DDR/HBM控制器、缓存一致性互连)。这些域通过片上NoC(Network-on-Chip)或交叉开关互连,而不是简单挂在一条总线上。

从编程视角看,DPU内部存在两类执行体:一类是运行Linux的ARM核,负责控制面、协议栈、管理面与复杂逻辑;另一类是可编程/半可编程的加速引擎,负责数据面的高吞吐处理。二者通过队列、Doorbell、共享内存和事件机制协作,这正是DPU编程模型的核心。

典型DPU芯片内部结构与数据通路 主机 Host 应用 / vDPA 驱动 / 队列 PCIe RC Root Complex 主机内存 HBM / DDR NVMe SSD 本地盘 PCIe Gen4/5 x16 双向 DPU SoC PCIe Endpoint SR-IOV / VF 队列 / Doorbell DMA 引擎 ARM CPU 集群 多核 Cortex-A Linux / 控制面 协议栈 / 管理 片上互连 NoC / 交叉开关(队列、事件、共享内存) 网络加速引擎 以太网 MAC/PCS 报文解析 / 匹配 IPsec / TLS 加解密 RoCEv2 / RDMA 存储加速引擎 NVMe 控制器 DMA / 描述符 压缩 / 校验 NVMe-oF 卸载 内存子系统 片上 SRAM DDR / HBM 控制器 Cache / 一致性 地址翻译 SMMU 外部以太网端口 100/200GbE NVMe SSD / 远端存储 DDR / HBM 颗粒 主机接口 通用计算 网络加速 存储加速 内存子系统 片上互连

二、ARM核:控制面与可编程数据面

DPU中的ARM核通常以多核集群形式出现,例如8~16个Cortex-A系列核心,运行标准Linux。它的职责不是替代主机CPU跑业务应用,而是承担控制面:初始化加速引擎、管理队列与内存映射、处理异常与慢路径、运行轻量协议栈(如TCP/IP、NVMe-oF target、OVS控制逻辑)。在部分DPU上,ARM核还可以运行eBPF或用户态数据面程序,处理不适合硬件卸载的复杂逻辑。

编程模型上,ARM核与加速引擎之间通过队列对(Queue Pair)和Doorbell寄存器交互。以网络报文处理为例:主机或网口把描述符写入队列,ARM核上的驱动通过MMIO写Doorbell通知引擎;引擎完成处理后写完成队列(CQ),并产生中断或事件。ARM核读取CQ,回收缓冲区,更新状态。这个“生产者—消费者”模型是DPU编程的基础,也是理解RDMA与存储卸载的入口。

三、网络与存储加速引擎

网络加速引擎通常包含可编程解析器(Parser)、匹配-动作表(Match-Action)、计量与整形、加解密模块以及RDMA/RoCEv2引擎。以RoCEv2为例,DPU可以在硬件中完成WQE(Work Queue Element)解析、地址翻译、报文分段、ACK/NACK生成,ARM核只负责建链、内存注册和异常处理。这样,主机CPU只需提交RDMA操作,数据路径完全由DPU硬件执行。

存储加速引擎则围绕NVMe展开:DPU可作为NVMe控制器直接连接SSD,也可作为NVMe-oF initiator/target,把远端存储通过RDMA或TCP暴露给主机。典型卸载包括:命令解析、PRP/SGL描述符处理、DMA搬运、CRC校验、压缩与去重。以NVMe-oF target为例,DPU收到RDMA写请求后,硬件解析NVMe命令,DMA写入本地SSD,再生成响应;ARM核只处理命名空间管理与错误恢复。

四、PCIe与内存子系统

PCIe是DPU与主机之间的唯一高速通道。DPU通常支持PCIe Gen4/Gen5 x16,并实现SR-IOV,把物理功能(PF)虚拟出多个虚拟功能(VF),每个VF可直通给不同虚拟机。编程时需要注意:主机内存与DPU内存是两套地址空间,DMA需要经过IOMMU/SMMU翻译;队列、Doorbell和完成事件都通过PCIe MMIO或内存映射访问。

内存子系统决定DPU能否“喂饱”加速引擎。片上SRAM用于缓存描述符、表项和报文头;DDR/HBM用于大容量缓冲、连接跟踪表和存储元数据。以200GbE线速为例,双向约50GB/s,若每个报文平均256字节,则每秒约2亿个报文,要求内存子系统提供足够的带宽与低延迟。实际设计中,DPU会把热数据放在SRAM,冷数据放在DDR,并通过预取与批处理减少访问次数。

编程模型要点:控制面跑在ARM核上,数据面跑在加速引擎上;二者通过队列、Doorbell、完成事件和共享内存协作。理解“谁生产、谁消费、谁通知、谁回收”,就抓住了DPU编程的主线。

五、一个简化的NVMe-oF读路径示例

假设主机通过DPU访问远端NVMe SSD,读请求路径如下:主机驱动把NVMe读命令封装为RDMA Send,写入发送队列并敲Doorbell;DPU的PCIe EP收到后,由网络加速引擎解析RoCEv2报文,提取NVMe-oF Capsule;存储加速引擎解析NVMe命令,向本地SSD发起DMA读;SSD返回数据后,存储引擎把数据封装为RDMA Write,经网络引擎发回主机;主机网卡或DPU的完成队列产生CQE,主机驱动回收请求。整个过程中,ARM核只参与连接建立、内存注册和异常处理,数据路径完全由硬件卸载。