3. BlueField系统管理接口

BlueField DPU 与普通网卡最大的差异之一,是它内部同时运行着 ARM 侧的嵌入式系统(通常称为 DPU OS 或 ECPF 侧)和主机侧(Host)的 PCIe 功能。这种“一卡两系统”的结构决定了它的管理接口不是单一的,而是分成若干条相互独立又彼此关联的通道。理解这些通道各自“管什么、从哪进、看到的是谁”,是后续做固件升级、模式切换和故障定位的基础。

可以把 BlueField 的管理面分成三层来看:最底层是硬件与固件层,由 mlxconfig、mlxfwmanager、devlink 这类工具直接读写设备寄存器、配置空间和固件镜像;中间层是带外管理,由板载 BMC 通过 Redfish/IPMI 提供,即使主机断电也能访问;最上层是带内管理,主机通过 RShim 或 PCIe 通道与 DPU 的 ARM 系统交互。三者覆盖的场景不同,排障时往往需要交叉验证。

BlueField 管理接口分层与访问路径 带外管理(主机断电仍可用) 管理网 / 浏览器 Redfish REST / IPMI 板载 BMC 独立供电 · 独立网口 BMC 可管对象 电源 / 温度 / 传感器 / 串口 / 固件版本 带内管理(依赖主机 PCIe 与驱动) Host 主机 Linux / Windows mlx5 驱动 RShim 通道 /dev/rshim0 虚拟串口 / 网络 DPU ARM 系统 ECPF / 嵌入式 OS 独立 IP 与用户 devlink 健康 / 端口 参数 / 重载 固件与配置层(直接操作设备) mlxconfig NV 配置项读写 模式 / SR-IOV / 安全 需重启或热复位生效 mlxfwmanager 固件查询 / 烧写 BMC 与 DPU 固件 升级后需断电冷启动 mst / mstflint 设备枚举与访问 mst start / status 多设备定位基础 诊断命令 ethtool / ibstat dmesg / lspci 链路与驱动状态

RShim:主机侧进入 DPU 的“后门”

RShim(Register Shell Interface Module)是 BlueField 提供的一条特殊通道,它让主机可以通过 PCIe 访问 DPU 的 ARM 系统,而不需要 DPU 侧网络已经配好。典型用途包括:DPU 首次上电还没有 IP 时,通过 RShim 虚拟串口登录控制台;或者主机侧需要向 DPU 推送镜像、执行 rshim 命令。Linux 下加载 rshim 驱动后会生成 /dev/rshim0 设备节点,配套的 rshim 工具可以查看状态、推送 boot stream、打开 console。

# 查看 RShim 设备与状态
ls /dev/rshim*
rshim -d /dev/rshim0 status

# 通过 RShim 打开 DPU 控制台(示例)
rshim -d /dev/rshim0 console

# 推送 boot stream 到 DPU(示例文件名)
rshim -d /dev/rshim0 boot ./bfb-image.bfb

需要注意,RShim 的可用性依赖主机侧驱动和 PCIe 链路。如果 lspci 看不到 BlueField 的 PCIe 功能,RShim 通常也无法工作,此时应优先检查主机 BIOS 中 PCIe 枚举、Above 4G Decoding 以及插槽供电。

BMC 与 Redfish:不依赖主机的带外通道

BlueField 板载 BMC 独立供电、独立网口,因此即使主机断电,只要管理网和电源正常,就能通过 BMC 访问。BMC 提供 Web 界面、Redfish REST API 和 IPMI 三种方式。Redfish 是目前推荐的方式,它用标准 JSON 描述资源,适合脚本化批量操作。

一个典型的 Redfish 查询流程是:先访问 /redfish/v1/ 获取根服务,再进入 /redfish/v1/Systems/ 找到 BlueField 系统资源,读取 PowerState、Boot、Processors、Memory 等属性。固件版本通常在 /redfish/v1/UpdateService/FirmwareInventory 下。下面示例用 curl 加基本认证读取系统电源状态:

curl -k -u admin:password \
  https://<bmc-ip>/redfish/v1/Systems/Bluefield \
  | python3 -m json.tool | grep -i powerstate

BMC 还能做带外固件升级、查看传感器温度、抓取串口日志。排障时如果主机侧完全无响应,BMC 往往是唯一还能看到 DPU 状态的地方。

mlxconfig、mlxfwmanager 与 devlink 的分工

这三个工具容易混淆,实际分工是:mlxconfig 管“配置项”,mlxfwmanager 管“固件镜像”,devlink 管“运行时设备状态与参数”。

mlxconfig 读写的是设备 NV 配置空间中的持久化参数,例如 INTERNAL_CPU_MODEL(决定 DPU 还是普通网卡模式)、SRIOV_EN、NUM_OF_VFS、LINK_TYPE_P1 等。查询用 -q,设置用 -s,设置后一般需要重启或热复位才生效。

# 查询当前配置
mlxconfig -d /dev/mst/mt41692_pciconf0 q

# 设置示例:开启 SR-IOV 并指定 VF 数量
mlxconfig -d /dev/mst/mt41692_pciconf0 \
  set SRIOV_EN=1 NUM_OF_VFS=16

# 应用后重启主机或对设备做热复位
mlxfwreset -d /dev/mst/mt41692_pciconf0 reset

mlxfwmanager 用于查询和烧写固件。查询时它会同时列出当前固件版本和镜像中可用版本;烧写时用 -i 指定固件包,-u 指定设备。BlueField 的固件升级通常涉及 BMC 固件和 DPU 固件两部分,升级完成后需要冷启动(完全断电再上电),而不是简单 reboot。

# 查询固件版本
mlxfwmanager -d /dev/mst/mt41692_pciconf0 --query

# 烧写固件(示例)
mlxfwmanager -d /dev/mst/mt41692_pciconf0 \
  -i fw-BlueField-2-rel.bin -u -f

devlink 是内核提供的统一设备管理接口,适合查看健康状态、端口状态、固件版本和运行时参数。常用命令包括 devlink dev show、devlink health show、devlink port show。当出现链路异常或驱动报错时,devlink health 能给出比 dmesg 更结构化的诊断信息。

devlink dev show
devlink health show pci/0000:03:00.0
devlink port show
devlink dev param show pci/0000:03:00.0

常用诊断命令与判断依据

日常排障建议按“物理层 → 驱动层 → 配置层 → 系统层”的顺序检查。物理层用 lspci -vv 确认设备是否被识别、链路速率和宽度是否正常;驱动层用 dmesg | grep mlx5 看加载是否报错;配置层用 mlxconfig 和 devlink 核对模式与参数;系统层再通过 RShim 或 BMC 进入 DPU 侧看 OS 状态。

命令关注点正常/异常判断
lspci -vv | grep -i mellanox设备枚举、LnkSta应看到 BlueField 设备;LnkSta 速率宽度符合插槽规格
dmesg | grep -i mlx5驱动加载、固件版本无 error/failed;固件版本与预期一致
mlxconfig -d ... qINTERNAL_CPU_MODEL、SRIOV_EN模式与部署目标一致
devlink health show健康报告器状态无 error 计数增长
ethtool <if>Link detected、SpeedLink detected: yes,速率符合预期
rshim -d /dev/rshim0 statusRShim 通道状态设备存在且状态正常
RShim、BMC、Redfish 属于“访问通道”,mlxconfig、mlxfwmanager、devlink 属于“操作工具”。排障时先确认通道是否通,再用工具读状态,顺序反了容易在错误的方向上浪费时间。
mlxconfig 修改配置项和 mlxfwmanager 烧写固件都属于高风险操作。修改前先记录原始配置(mlxconfig q 输出保存),固件升级前确认电源稳定、版本匹配,升级后按厂商要求执行冷启动,避免中途断电导致设备变砖。

把这几类接口串起来看:主机侧通过 RShim 或 PCIe 进入 DPU,带外通过 BMC/Redfish 独立访问,底层用 mlxconfig、mlxfwmanager、devlink 完成配置与固件管理,再用 lspci、dmesg、ethtool 等命令验证结果。掌握每条通道的边界和适用场景,才能在 DPU 出现异常时快速定位问题出在哪一层。