2. DPU硬件架构与网络数据路径

DPU(Data Processing Unit)不是一块“更快的网卡”,而是一台嵌入在PCIe插槽里的独立计算机。理解它的关键,是把它拆成三个平面来看:计算平面(多核Arm CPU集群)、网络平面(高速以太网MAC/PCS与包处理流水线)、存储与加速平面(DMA引擎、加密/压缩/正则等硬件加速器)。三者通过片上互联(NoC或交换矩阵)连接,对外则通过PCIe Gen4/Gen5 x16主机接口与CPU/GPU通信,通过以太网接口与外部网络通信。

一、DPU的组成与三类引擎

以典型数据中心DPU(如NVIDIA BlueField-2/3、AMD Pensando、Intel IPU)为例,其内部可归纳为:

  • 计算引擎:8~16个Arm Cortex-A72/A78核心,运行Linux与DPDK/OVS,承担控制面与部分数据面卸载逻辑;
  • 网络引擎:可编程包处理流水线(P4/可编程parser-match-action),支持SR-IOV、VirtIO、RDMA、RoCEv2、IPsec/MACsec加解密;
  • 存储/加速引擎:NVMe-oF、压缩解压、正则匹配、SHA/AES引擎,用于卸载主机CPU的存储与安全负载。

这三类引擎共享片上DDR(通常8~32GB),并通过PCIe Switch或直接Root Complex与主机CPU、GPU互联。DPU的“独立性”体现在:即使主机CPU宕机,DPU仍可维持网络与存储服务,这正是云原生基础设施卸载的物理基础。

二、PCIe与网络接口的角色分工

DPU上有两个关键接口方向:PCIe侧面向主机,呈现为多个PF/VF(物理功能/虚拟功能),主机通过SR-IOV把VF直通给虚拟机;以太网侧面向外部网络,通常为2×25G/100G/200G端口。数据包从网口进入后,先经过MAC/PCS与可编程流水线,再决定是“上送DPU的Arm核处理”还是“直接DMA到主机内存中的VF队列”。

判断路径归属的核心参数是流表匹配结果:若匹配到卸载流表(offload flow),包走硬件快路径直达VF;若未命中,则上送Arm核的慢路径由OVS-DPDK处理,并可能触发流表下发。

三、数据包处理流水线

DPU内部的数据包处理可抽象为五级流水线:解析(Parse)→ 分类(Classify)→ 动作(Action)→ 队列(Queue)→ 传输(DMA/Transmit)。解析级提取以太网、IP、TCP/UDP、VXLAN/Geneve等头部字段;分类级用TCAM/哈希表匹配五元组或隧道ID;动作级执行转发、封装、丢弃、镜像、计数;队列级按VF或QoS分配;传输级通过DMA写入主机内存或从网口发出。

DPU 内部数据路径与主机/网络协同 主机 CPU / GPU 应用 / 虚拟机 VF 队列 / 内存 SR-IOV PF/VF PCIe 配置空间 GPU Direct RDMA 显存直通 主机内存 DMA 目标缓冲区 PCIe Gen4/5 x16 双向 DPU SoC 计算引擎 Arm 多核集群 Linux + DPDK/OVS 控制面 / 慢路径 网络引擎 可编程流水线 Parse-Match-Action VXLAN / IPsec / RoCE 存储与加速引擎 NVMe-oF · 压缩/解压 · AES/SHA · 正则匹配 DMA 引擎 · 队列管理 片上互联 NoC / 交换矩阵 · 共享 DDR 流水线:Parse → Classify → Action → Queue → DMA 命中流表走快路径,未命中上送 Arm 慢路径 外部网络 以太网 MAC/PCS 2×100G / 200G VXLAN/Geneve 隧道解封装 RoCEv2 / IPsec 加解密卸载 对端交换机 Spine/Leaf 以太网 协同关系:CPU 负责控制面与业务逻辑 · DPU 卸载网络/存储/安全数据面 · GPU 通过 GPUDirect RDMA 与 DPU 直连显存

四、与CPU/GPU的协同关系

在传统服务器中,网络数据面由CPU承担:每个包都要经过内核协议栈、中断、上下文切换,10Gbps以上时CPU开销急剧上升。DPU的引入改变了这一分工:CPU只处理控制面(如OVS流表下发、Kubernetes网络策略),DPU处理数据面(包转发、隧道封装、加解密)。以OVS卸载为例,主机上的ovs-vswitchd通过DPDK与DPU的VF通信,把流表下发给DPU硬件;后续同流数据包直接在DPU流水线内完成匹配与转发,不再经过主机CPU。

与GPU的协同则体现在AI训练场景:GPU需要从远端存储或另一节点读取训练数据。若走“网卡→CPU内存→GPU显存”的路径,会消耗大量CPU周期与PCIe带宽。DPU支持GPUDirect RDMA,允许网口收到的数据经DPU DMA引擎直接写入GPU显存,绕过主机内存。此时DPU扮演的是“GPU的网络前端”,把存储访问(NVMe-oF)与集合通信(NCCL/RoCE)都卸载到硬件。

五、一个可观察的卸载判断示例

假设在主机上执行以下命令查看VF与流表状态:

# 查看 DPU 呈现的 VF
lspci -d 15b3: | grep -i bluefield
# 查看 OVS 卸载流表
ovs-appctl dpctl/dump-flows -m type=offloaded
# 观察 DPU 侧包计数
cat /sys/class/net/enp3s0f0/statistics/rx_packets

若 dump-flows 中某条流的 offloaded:yes 且 packets 持续增长,而主机CPU的软中断(/proc/softirqs 中 NET_RX)几乎不增长,即可判断该流已成功卸载到DPU快路径。反之,若流表显示 offloaded:no,说明包仍走Arm核慢路径,需要检查流表是否命中、VF是否绑定正确、隧道类型是否被硬件支持。

注意:并非所有OVS动作都能卸载。例如复杂的conntrack状态跟踪、部分NAT场景、非标准隧道封装,可能只能由Arm核软件处理。设计网络方案时应先确认DPU硬件流水线支持的匹配域与动作集。

总结来看,DPU的硬件架构本质是把“服务器里最耗CPU的网络与存储数据面”下沉到一块带独立算力的PCIe设备中。理解计算/网络/存储三类引擎的分工、PCIe与以太网两个接口的方向、五级流水线的处理顺序,以及它与CPU/GPU的协同边界,是后续学习OVS卸载配置与性能调优的基础。