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