2. DPU硬件与网络数据路径
BlueField DPU 不是一块“插在服务器里的普通网卡”,而是一台以 PCIe 为宿主接口、自带多核 ARM 子系统与完整网络数据通路的片上系统。理解它的硬件结构,是后续做 DOCA 卸载、流量镜像、OVS 加速和零拷贝通信的前提。本节从芯片内部结构出发,沿着“网络接口 → 报文解析 → 内存/PCIe 拓扑 → 主机或 ARM 侧处理”的顺序,把数据包在 DPU 中的真实流转路径讲清楚。
一、BlueField DPU 的内部结构
以 BlueField-2 为例,芯片内部可以划分为四个功能域:
- 网络接口域:提供两个 100Gb/s 以太网端口(或一个 200Gb/s 聚合端口),支持以太网、RoCEv2、VXLAN/Geneve 等封装。物理层与 MAC 由硬件处理,报文进入后交给可编程的报文处理流水线。
- 可编程数据面:包含 eSwitch(嵌入式交换机)与 Parser/Match/Action 流水线。eSwitch 负责在物理端口、主机 PF/VF、ARM 侧 PF/VF 之间做二层/三层转发与 ACL 匹配,是“流量到底给谁”的决策点。
- ARM 子系统:多核 Arm Cortex-A72(BlueField-2 为 8 核),运行 Linux,承载 DOCA 服务、OVS、DPDK、存储与安全应用。它通过内部总线访问网络接口与内存,是“卸载逻辑”的执行者。
- PCIe 与内存域:DPU 作为 PCIe Endpoint 接入主机,同时自身挂载 DDR 内存。主机与 DPU 之间通过 PCIe 交换数据,DPU 内部通过一致性互联访问本地 DDR。
关键点在于:DPU 同时是“网卡”和“主机”。对宿主机而言,它是一张 PCIe 设备;对网络而言,它是一台能独立跑协议栈的服务器。这种双重身份决定了数据包有两条可能的归宿——主机侧或 ARM 侧。
二、网络接口与 PCIe 拓扑
BlueField-2 的 PCIe 接口通常为 PCIe Gen4 x16,向下兼容 Gen3。它向主机暴露多个 PCIe Physical Function(PF)与 Virtual Function(VF),典型划分如下:
| 功能 | 典型用途 | 归属 |
|---|---|---|
| PF0 / PF1 | 主机侧以太网接口(netdev) | 宿主机 |
| VF0…VFn | SR-IOV 虚拟化、容器网络 | 宿主机/虚拟机 |
| ARM PF | DPU 自身管理口、DOCA 服务 | ARM 子系统 |
| eSwitch 端口 | 连接物理口、主机 PF/VF、ARM PF | 数据面 |
内存拓扑上,DPU 拥有独立的 DDR4/DDR5 控制器与内存条,容量常见 8GB~32GB。主机内存与 DPU 内存是两套物理内存:主机通过 PCIe BAR 空间访问 DPU 的寄存器与队列,DPU 通过 PCIe 发起 DMA 读写主机内存。二者之间没有硬件缓存一致性,跨 PCIe 的数据搬运需要显式 DMA 或 RDMA 操作。
三、数据包在 DPU 中的流转路径
下面这张图给出了一条报文从物理端口进入后,在 BlueField DPU 内部的主要分支与流转关系。它把网络接口、eSwitch、ARM 子系统、PCIe 与两侧内存放在同一张拓扑里,便于对照理解“流量去了哪里”。
结合上图,一条报文的典型流转可以拆成四步:
- 入口解析:报文从物理端口进入网络接口域,硬件完成 MAC 层校验、五元组解析、RSS 哈希,并打上时间戳。此时报文仍是“裸包”,尚未决定归属。
- eSwitch 决策:报文进入 eSwitch 流水线,按 Match/Action 规则匹配。规则可以基于目的 MAC、VLAN、IP、端口号,也可以基于 VXLAN VNI。匹配结果决定报文被送往主机 PF/VF、ARM PF,还是被镜像/丢弃。
- 分支搬运:若送往 ARM 侧,报文写入 DPU DDR,由 ARM 上的 DPDK/OVS 直接处理;若送往主机侧,报文通过 PCIe DMA 写入主机内存中预先注册的 RX 队列,主机驱动收到中断或轮询后交给协议栈。
- 回程与卸载:主机或 ARM 侧处理完成后,报文沿相反方向经 eSwitch 从物理口发出。若启用了 DOCA 卸载,部分转发、加密、压缩动作在 eSwitch 或硬件引擎中完成,CPU 只处理控制面。
四、实际观察与验证方法
在真实环境中,可以用几条命令确认上述拓扑是否按预期工作。以下命令在 DPU 的 ARM 侧 Linux 中执行,用于查看 PCIe 设备与网络接口的对应关系:
# 查看 DPU 作为 PCIe Endpoint 暴露给主机的设备
lspci -nn | grep -i mellanox
# 查看 ARM 侧网络接口与 representor 端口
ip link show
# 查看 eSwitch 端口映射与 representor 对应关系
devlink port show
# 查看主机侧 PF/VF 与 DPU 的绑定状态
cat /sys/class/net/ens1f0/device/sriov_numvfs
判断依据很直接:如果 devlink port show 中物理口对应的 representor 与主机 PF 处于同一 eSwitch 下,说明流量可以在主机与 ARM 之间被规则调度;如果 ethtool -S 中 RX 队列计数在 ARM 侧增长而主机侧不增长,说明报文走的是 ARM 分支,未占用主机 PCIe 带宽。反之,主机侧队列增长则说明报文经 PCIe DMA 进入了主机内存。
五、内存与 PCIe 对性能的影响
跨 PCIe 的 DMA 是主机侧路径的主要开销来源。以 PCIe Gen4 x16 为例,理论双向带宽约 32GB/s,但实际有效带宽受报文大小、队列深度和 DMA 描述符开销影响。小包场景下,每包都要经历一次描述符读写和一次数据 DMA,PCIe 事务开销占比高,吞吐会明显低于大包。这也是为什么在高包转发率场景中,优先把处理逻辑放在 ARM 侧或 eSwitch 中,避免报文反复穿越 PCIe。
DPU 本地 DDR 的访问延迟远低于跨 PCIe 访问主机内存。因此,DOCA 应用在 ARM 侧做报文缓存、流表查找和状态维护时,应尽量使用本地内存;只有必须与主机共享的数据,才通过 PCIe 或 RDMA 传递。理解“哪侧内存、哪条总线”是后续做零拷贝和卸载设计的基础。
把本节内容压缩成一句话:BlueField DPU 的数据路径由 eSwitch 做分叉决策,向上可走 ARM 子系统与本地 DDR,向下可走 PCIe 与主机内存;选择哪条路径,决定了带宽开销、延迟和可卸载的功能范围。