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 替代。