1. DPU环境初始化与验证
任务目标
本案例完成BlueField-3 DPU开发环境的初始化配置,验证主机(Host)与DPU(BlueField-3)之间的PCIe通信链路正常,并通过基础命令确认DPU系统状态与固件版本可用。
环境依赖
- 硬件:NVIDIA BlueField-3 DPU(建议BF3 200G或更高型号),x86或ARM主机
- 主机OS:Ubuntu 22.04 LTS(已安装NVIDIA DOCA 2.7+)
- DPU OS:BlueField-3出厂预装Ubuntu 22.04(ARM架构)
- 工具:
mlnx-tools、rshim(主机侧)、docactl(DOCA SDK工具)
实现步骤与代码
以下脚本在主机侧执行,完成DPU发现、通信验证与状态采集。将脚本保存为 dpu_init_check.sh:
#!/bin/bash
# dpu_init_check.sh - BlueField-3 DPU环境初始化与验证
set -e
echo "=== [1/5] 检测BlueField-3 DPU设备 ==="
# 通过PCIe Vendor ID 15b3 (NVIDIA) 和 Device ID过滤BF3
lspci -d 15b3: | grep -i "BlueField-3" || {
echo "错误:未检测到BlueField-3设备,请检查PCIe连接或rshim驱动"
exit 1
}
echo "=== [2/5] 检查rshim接口 ==="
ls /dev/rshim* 2>/dev/null || {
echo "错误:rshim设备不存在,请加载rshim驱动"
exit 1
}
echo "=== [3/5] 验证主机与DPU通信 ==="
# 通过rshim登录DPU并执行命令,验证双向通信
DPU_CMD="uname -a && cat /etc/os-release | head -n 2"
rshim_dpu=$(rshim -c "echo 'DPU_READY'" 2>/dev/null) || {
echo "错误:无法通过rshim与DPU通信"
exit 1
}
echo "DPU响应: $rshim_dpu"
echo "=== [4/5] 采集DPU系统状态 ==="
# 通过rshim获取DPU侧关键状态
echo "--- DPU内核版本 ---"
rshim -c "uname -r"
echo "--- DPU内存使用 ---"
rshim -c "free -h | head -n 2"
echo "--- DPU固件版本 ---"
rshim -c "mlxconfig -d /dev/mst/mt41686_pciconf0 q | grep -i firmware" || \
echo "提示:mlxconfig不可用,跳过固件查询"
echo "=== [5/5] 验证DOCA环境 ==="
# 检查主机侧DOCA工具链
if command -v docactl > /dev/null; then
docactl version
else
echo "警告:docactl未安装,DOCA环境不完整"
fi
echo "=== 初始化验证完成 ==="
赋予执行权限并运行:
chmod +x dpu_init_check.sh
sudo ./dpu_init_check.sh
验证方法与判定标准
脚本执行后,按以下标准判定环境初始化是否成功:
- 步骤1:输出包含
BlueField-3的PCIe设备行,无错误退出。 - 步骤3:显示
DPU响应: DPU_READY,证明主机→DPU命令通道正常。 - 步骤4:能获取到DPU的Linux内核版本(如
5.15.0-...-arm64)和内存信息,说明DPU OS已启动且可交互。 - 步骤5:若输出DOCA版本号(如
DOCA 2.7.0),则开发环境完整;若仅显示警告,则需补装DOCA SDK。
以上全部通过即表示BlueField-3 DPU环境初始化完成,主机与DPU通信正常,可进入后续DPU加速开发。
常见问题
- rshim设备不存在:执行
modprobe rshim加载驱动,或检查BlueField-3是否已通过PCIe正确枚举。 - DPU无响应:确认DPU处于
Arm启动模式(非HOST模式),可通过mlxconfig检查启动参数。 - 固件查询失败:若
mlxconfig不在DPU默认路径,可尝试/opt/mellanox/bin/mlxconfig或使用mlxfwmanager替代。