2. DPU硬件与软件栈概览
DPU(Data Processing Unit)之所以能在云原生网络中承担卸载与加速职责,核心在于它同时具备三类能力:以PCIe接入主机的“设备身份”、以高速以太网接入数据面的“网络身份”,以及可编程、可卸载的“处理身份”。理解DPU,不能只看芯片参数,而要把芯片架构、接口、固件驱动分层和上层软件框架放在同一条链路上看:数据从哪里进来、由谁处理、结果如何回到主机或转发出去。
主流DPU芯片架构的三种取向
当前主流DPU在架构上大致可分为三类取向。第一类是以NVIDIA BlueField系列为代表的“Arm多核+可编程加速器+高速接口”SoC架构,片上集成Arm CPU集群、PCIe Switch/Endpoint逻辑、网络接口以及加密、压缩、正则匹配等加速单元,能够独立运行操作系统和网络数据面。第二类是AMD Pensando系列,强调可编程数据包处理器(P4可编程流水线)与Arm核协同,把策略、遥测、加密等能力下沉到硬件流水线。第三类是Intel IPU/FPGA路线,借助FPGA或专用ASIC实现灵活的数据面卸载,适合需要深度定制流水线的场景。
三类架构的共同点是:把原本消耗主机CPU的报文处理、连接跟踪、加密解密、存储协议处理等任务,迁移到DPU内部完成。差异在于可编程粒度、生态成熟度和开发门槛。对云原生网络加速而言,关键不是“哪颗芯片更强”,而是芯片是否提供与OVS、DPDK、DOCA等框架匹配的编程接口。
PCIe与网络接口:DPU的两条生命线
DPU与主机之间通过PCIe连接。典型配置为PCIe Gen4 x16或Gen5 x16,理论带宽约32GB/s至64GB/s。DPU在主机侧通常呈现为多个PCIe功能(PF)和虚拟功能(VF),分别对应管理面、存储面、网络面。主机上的驱动通过这些PF/VF与DPU通信,而DPU内部的Arm核则通过嵌入式交换机或eSwitch把流量在物理端口、主机PF/VF、加速单元之间转发。
网络侧接口常见为2×100GbE、2×200GbE或400GbE。以200GbE为例,单向线速约200Gbps,若按64字节小包计算,包转发率可达约297Mpps,这对DPU内部流水线的缓存、队列和调度提出很高要求。实际部署中,DPU常以“双口”形式接入ToR交换机,一口承载业务流量,一口用于带外管理或冗余,形成高可用拓扑。
固件与驱动分层:从加电到可用
DPU加电后,首先运行的是固件。固件负责初始化PCIe链路、网络PHY、内存控制器和安全启动链。以BlueField为例,固件包含UEFI、ATF、OP-TEE等组件,支持安全启动和固件在线升级。固件版本与驱动版本必须匹配,否则可能出现PF/VF枚举失败、链路降速或加速功能不可用。实际运维中,升级固件前应记录当前版本,升级后通过mlxfwmanager或厂商工具确认版本一致性。
驱动层分为主机侧和DPU侧。主机侧驱动负责把DPU暴露为标准的网络、存储和管理设备,例如Linux下的mlx5_core、virtio_net。DPU侧驱动运行在Arm核上,管理物理端口、eSwitch和加速单元。两层驱动通过PCIe BAR空间和邮箱机制通信。若主机侧驱动缺失或版本过旧,DPU可能只能作为普通网卡使用,卸载能力无法生效。
DOCA、DPDK、OVS的职责边界
DOCA是NVIDIA为BlueField提供的软件开发框架,包含驱动、库、运行时和服务,覆盖网络、存储、安全、管理四个方向。DOCA的核心价值在于把DPU能力封装成可调用的API,例如DOCA Flow用于定义报文转发规则,DOCA Telemetry用于采集遥测数据。DPDK则是用户态数据面开发套件,提供轮询模式驱动、无锁环形队列和大页内存管理,适合在DPU的Arm核上构建高性能转发程序。OVS是虚拟交换机,负责虚拟网络中的端口管理、流表匹配和隧道封装。
三者的边界可以这样理解:DOCA负责“让DPU能力可用”,DPDK负责“让数据面跑得快”,OVS负责“让虚拟网络连得通”。在云原生场景中,常见组合是OVS-DOCA:OVS的控制面仍在主机或DPU上运行,但数据面通过DOCA Flow卸载到DPU硬件流水线,从而绕过主机内核协议栈。此时,主机CPU只处理控制面和异常流量,大部分转发、封装、策略匹配由DPU完成。
softirq占用是否下降、DPU侧流表命中计数是否增长、以及ovs-dpctl dump-flows中是否出现offloaded:yes标记。若流表未卸载,优先检查DOCA版本、驱动匹配和eSwitch模式配置。
一个可参考的部署检查清单
| 检查项 | 示例值/命令 | 判断依据 |
|---|---|---|
| PCIe链路 | lspci -vv 查看LnkSta |
速率与宽度符合预期,无降速 |
| 固件版本 | mlxfwmanager -d |
与驱动版本匹配 |
| 网络端口 | ibdev2netdev 或 ip link |
双口UP,MTU一致 |
| DOCA服务 | systemctl status doca_* |
关键服务active |
| OVS卸载 | ovs-dpctl dump-flows |
出现offloaded:yes |
理解DPU硬件与软件栈,最终要落到“数据走哪条路、由谁处理、如何验证”三个问题上。芯片架构决定能力上限,PCIe与网络接口决定吞吐边界,固件与驱动决定可用性,DOCA/DPDK/OVS决定开发与部署方式。只有把这几层对齐,云原生网络加速才能从“能跑”走向“跑得稳、跑得快”。