2. BlueField DPU硬件与系统初始化

BlueField DPU 不是一块普通网卡,而是一台"长在 PCIe 插槽上的嵌入式服务器"。它内部同时运行 Arm 子系统(含 CPU、内存、eMMC、BMC 管理单元)和 ConnectX 网络子系统(含以太网/InfiniBand 端口、硬件卸载引擎、加密引擎)。因此"初始化"这件事必须分两层理解:一层是主机侧把 DPU 当作 PCIe 设备识别出来,另一层是 DPU 自身作为独立主机完成固件、网络与管理通道的建立。只有两层都打通,DOCA 应用才有运行的地基。

一、先看清硬件规格与形态

以 BlueField-2(BF2)与 BlueField-3(BF3)为例,二者在 DOCA 开发中的定位差异明显。BF2 采用 8 核 Arm Cortex-A72、16GB DDR4、双端口 100Gb/s(可拆为 4×25Gb/s),适合中等卸载与安全场景;BF3 升级到 16 核 Cortex-A78、32GB DDR5、单/双端口 400Gb/s,并显著增强了可编程数据路径与加密吞吐,是当前 DOCA 主力平台。两者都以 PCIe Gen4/Gen5 x16 接入主机,主机侧看到的是一张 Mellanox/NVIDIA 多功能 PCIe 设备。

关键点在于"多功能":同一物理设备在主机上会枚举出多个 PCIe 功能(PF/VF),分别对应网络端口、存储(NVMe-oF)以及管理接口。用 lspci -nn | grep -i mellanox 可以看到类似 ConnectX-6 Dx 或 BlueField-2 的条目,用 mlxfwmanager 或 mst status 则能看到 DPU 的固件版本与设备名(如 /dev/mst/mt41692_pciconf0)。这一步是后续所有操作的"设备定位"基础。

二、固件升级:先对齐版本,再谈功能

DPU 的固件(firmware)决定了它支持哪些卸载能力、哪些 DOCA 特性可用。DOCA 版本与固件版本存在明确的兼容矩阵,升级前务必查阅对应 DOCA 版本的 release notes。升级流程本身不复杂,但顺序不能错:

# 1. 确认当前固件与设备
mst start
mst status
mlxfwmanager --query

# 2. 下载匹配的固件包(.bin)
#    例如 fw-BlueField-2-rel-24_35_1010.bin

# 3. 执行烧写(-f 指定设备,-i 指定镜像)
mlxfwmanager -d /dev/mst/mt41692_pciconf0 \
             -i fw-BlueField-2-rel-24_35_1010.bin \
             -u -f

# 4. 烧写完成后冷重启主机(或 DPU)
#    固件在 DPU 侧生效,需重启 Arm 子系统

注意两点:一是固件升级会重置 DPU,正在运行的 DOCA 服务会中断,生产环境需安排维护窗口;二是主机侧驱动(MLNX_OFED 或 DOCA OFED)版本要与固件匹配,否则可能出现"设备可见但功能不可用"的情况。升级后用 mlxfwmanager --query 核对版本号,并确认 dmesg 中没有固件加载失败或 PCIe 链路降速的告警。

三、网络接口配置:主机侧与 DPU 侧要分清

这是初学者最容易混淆的地方。BlueField 的物理端口在 DPU 的 Arm 系统里表现为 p0、p1(或 ens1f0np0 之类命名),而主机侧看到的是通过 PCIe 虚拟出来的 ens1f0 等接口。两者是"同一物理端口的两面",配置时必须明确你是在哪一侧操作。

典型做法是:DPU 侧 p0 作为上行链路(uplink)接入数据中心交换机,主机侧接口则通过 OVS 或桥接与 DPU 侧关联。若采用"主机直通"模式,主机侧接口可直接获得 IP;若采用"DPU 代理"模式,则由 DPU 上的 Arm 系统负责路由与策略。配置示例(DPU 侧):

# 在 DPU Arm 系统内
ip link set p0 up
ip addr add 192.168.100.10/24 dev p0
ip route add default via 192.168.100.1

# 主机侧对应接口
ip link set ens1f0 up
ip addr add 192.168.100.20/24 dev ens1f0

配置完成后,用 ethtool p0 确认链路速率与双工状态,用 ping 验证主机与 DPU 之间、DPU 与外部网络之间的连通性。若链路显示 Link detected: no,优先检查光模块/线缆、端口拆分模式(mlxconfig 中的 LINK_TYPE_P1)以及交换机侧配置。

四、主机与 DPU 通信通道:三条路,各有用途

主机与 DPU 之间不是只有一条通道,而是三条并行的路径,理解它们的差异对 DOCA 开发至关重要:

  • PCIe 通道:主机通过 PCIe 访问 DPU 的 BAR 空间,用于驱动加载、寄存器读写、固件交互。这是最底层、始终存在的通道。
  • 网络通道:主机侧接口与 DPU 侧接口通过内部虚拟交换机或直通路径通信,用于数据面流量、DOCA 服务发现。
  • 管理通道(BMC/RShim):DPU 内置 BMC,可通过 RShim 在主机上创建 tmfifo 设备,实现主机对 DPU Arm 系统的串口/网络访问,即使 DPU 网络未配置也能登录。

RShim 是初始化阶段最实用的工具。主机上加载 rshim 驱动后,会出现 /dev/rshim0,通过它可以:

# 主机侧
modprobe rshim
ls /dev/rshim0

# 通过 RShim 进入 DPU 控制台
cat /dev/rshim0/misc   # 查看状态
# 或使用 rshim 工具建立网络隧道
rshim -d /dev/rshim0 --net

当 DPU 网络尚未配置、SSH 不可达时,RShim 就是"救命通道"。建议在首次上电初始化时,先用 RShim 登录 DPU,完成 Arm 系统的网络与用户配置,再切换到常规 SSH 管理。

BlueField DPU 初始化:主机侧与 DPU 侧通信通道 主机(Host) PCIe 驱动 / MLNX_OFED lspci · mst status · mlxfwmanager 主机侧网络接口 ens1f0 · 192.168.100.20/24 RShim 驱动 /dev/rshim0 · tmfifo 主机侧可见对象 PCIe PF/VF 多功能设备 虚拟网络接口 ens1f0 RShim 控制台通道 BlueField DPU(Arm 子系统) Arm CPU / DDR / eMMC 8~16 核 · 16~32GB · DOCA 运行时 DPU 侧网络接口 p0 / p1 · 192.168.100.10/24 BMC / 管理单元 RShim 服务端 · 串口控制台 DPU 侧关键状态 固件版本(mlxfwmanager) 链路速率(ethtool p0) DOCA 服务运行状态 PCIe 通道 网络通道 RShim 管理通道 数据中心交换机 / 外部网络 上行链路 PCIe 网络 RShim

五、初始化完成后的验证清单

把上述步骤串起来,一次完整的 DPU 初始化应当能通过以下检查:主机 lspci 能看到 DPU 设备且链路宽度为 x16;mlxfwmanager --query 显示的固件版本与 DOCA 兼容矩阵一致;DPU 侧 p0 链路 Link detected: yes 且速率符合预期;主机与 DPU 之间能互相 ping 通;RShim 通道可登录 DPU 控制台;dmesg 无 PCIe AER 错误或固件加载失败记录。任何一项不通过,都应先解决再进入 DOCA 应用部署阶段,否则后续的卸载、加密、存储功能都会建立在不稳定的地基上。

首次上电建议先用 RShim 登录 DPU,确认 Arm 系统正常启动、eMMC 空间充足、DOCA 运行时已安装,再配置网络。这样即使网络配置出错,也不会失去对 DPU 的控制通道。