25.12版本/SPService/DeviceInfo返回数据异常

// 此模板仅供参考,如果不适用可以修改

问题描述

发送redfish命令/redfish/v1/Managers/:managerid/SPService/DeviceInfo,返回信息中缺少pciecard信息,环境中插着raid卡和pcie网卡。

查看rackmount后发现是这里为空所以没有信息

image

所以这个地方是25.12版本做啥修改了吗,还是有bug

环境信息

  • 软件版本:25.12

答案内容由AI生成,仅供参考:

:receipt: 结论:最可能的原因

:red_exclamation_mark: 在 25.12 版本中,由于 CSR 配置缺失或 Pcie_Device Component 更新导致 PCIe 设备未被正确枚举,使得 SPService 获取不到 PCIe 卡信息,最终 Redfish 接口返回空数据。

这并非典型 Bug,而是 适配问题,与以下因素强相关:

  • 是否为新引入的 PCIe 卡型号
  • CSR 文件是否随 25.12 版本更新而遗漏
  • SPService 是否调整了设备信息收集逻辑
点击此处查看详细分析解答

Redfish 获取 SPService/DeviceInfo 时 PCIe 卡信息缺失问题分析

根据您提供的问题描述,在使用 Redfish 接口 GET /redfish/v1/Managers/1/SPService/DeviceInfo 获取设备信息时,返回结果中缺少 PCIe 卡(如 RAID 卡、网卡)的相关信息。尽管系统中实际插有相关硬件,但接口返回数据异常为空。结合上下文信息和系统架构逻辑,以下为对该问题的全面分析与可能根源定位。


:magnifying_glass_tilted_left: 问题概述

  • 问题现象
    Redfish 接口 /redfish/v1/Managers/1/SPService/DeviceInfo 返回的数据中,未包含已插入的 RAID 卡、PCIe 网卡等 PCIe 设备信息

  • 环境信息

    • 软件版本:25.12
    • 使用接口:/redfish/v1/Managers/:managerid/SPService/DeviceInfo
    • 状态码:200 OK,说明请求成功,但响应体中关键字段为空
    • rackmount 工具或底层 busctl 调用中,发现相关路径返回值为空

:puzzle_piece: 可能原因分析

1. PCIe 设备未被正确识别或加载

系统必须通过 PCIe 设备发现机制 将物理卡识别为可管理对象。若未正常加载,则无法在 DeviceInfo 中展示。

涉及组件:

  • Pcie_Device Component
  • ImplPCIEDevicesPCIEDevicesGetPCIeCardNumGetPCIeCardNum 方法
  • CSR(Component Self-description Record)

关键点:

若系统未完成 PCIe 设备枚举或 CSR 配置缺失,将导致 DeviceInfo 接口无法获取 PCIe 卡列表。

  • 根据文档信息:“Pcie_Device component is a software module versioned at 1.70.100 and later updated to 1.70.109”,如果该组件未正确处理 PCIe 地址信息,可能导致发现失败。
  • CSR 文件是否正确定义了 PCIeCard_1PCIeDevice_1NetworkAdapter_1 等对象的属性(如 VendorID, DeviceID, Description),直接影响 BMC 是否能识别设备。

:white_check_mark: 建议检查:

  • 对应 PCIe 卡是否存在有效的 CSR 配置文件
  • 是否基于 BDF(Bus/Device/Function)正确绑定设备信息
  • 使用命令 lspcibusctl 查看 PCIe 设备是否被 OS 识别

2. SPService 与 UMS/MDB 数据源对接异常

从您提供的 busctl 命令来看,尝试调用的是:

busctl --user call bmc.kepler.maca /bmc/kepler/MdbService bmc.kepler.Mdb GetPath ... "bmc.kepler.Managers.Ums"

此路径用于获取资源协作接口数据,但返回为空。

分析:

  • SPService/DeviceInfo 接口的数据来源于底层的 资源协作接口(MdbService),由多个组件(如 openUBMC)上报。
  • SPService 所依赖的 GetPath 接口未能从 bmc.kepler.Managers.Ums 正确获取数据,则表现为信息缺失。
  • busctl 返回空表明:数据未上报、未注册、或路径不匹配

相关实体:

  • Redfish API 作为北向接口,依赖于 MDBService 和资源协作接口的数据映射
  • GetPCIeCardNum 方法应返回 PCIe 卡数量,但若其底层调用 ImplPCIEDevicesPCIEDevicesGetPCIeCardNum 失败,也会导致信息为空

3. SR/CSR 配置缺失或适配错误(重点!)

关键证据:

文档中明确指出:“网卡的静态信息,让BMC可以识别安装了什么网卡;” —— 这依赖 CSR 中的完整定义。

缺少以下任一信息都可能导致设备不可见:

对象 必需属性
PCIeDevice_1 DeviceName, FunctionClass, VendorID, DeviceID
PCIeCard_1 Name, Manufacturer, PartNumber, FirmwareVersion, SerialNumber
NetworkAdapter_1 NetworkPortCount, SupportedMctp, LinkSpeed, LinkWidth

示例 CSR 配置:

{
  "PCIeCard_1": {
    "Name": "Atlas 300I Pro Inference Card",
    "Description": "AI Inference Accelerator",
    "Manufacturer": "Huawei",
    "VendorID": "0x19e5",
    "DeviceID": "0x0222",
    "FirmwareVersion": "1.00",
    "SerialNumber": "SN12345678"
  }
}

:red_circle: 如果 CSR 中缺省了 PCIeCard 相关配置,DeviceInfo 将无法拼装出 PCIe 卡信息。


4. Redfish 映射配置不完整

Redfish 接口需要通过 映射器接口配置 将底层资源协作数据映射到 /DeviceInfo 的 JSON 输出中。

可能问题:

  • /Managers/1/SPService/DeviceInfo 的映射配置中,未包含 PCIeCardNetworkAdapter 的数据路径

  • 映射器配置中对敏感字段 Sensitive 进行了屏蔽,但不应影响 PCIe 基本信息

  • 映射器在 25.12 版本中是否有变更?参考文档提到:

    “生成代码的版本大于等于14时,不再生成 bmc.kepler.Object.Properties 接口相关代码”

    DeviceInfo 依赖此接口,则升级后可能出现字段丢失。


5. Smart Provisioning(SP)软件适配问题?

您提到:

“初步分析应该和Smart Provisioning软件信息推送有关”

说明:

  • SPService 是 Smart Provisioning 的管理服务
  • 若 SP 未主动从 BMC 获取或订阅 PCIe 设备事件,可能导致 DeviceInfo 未及时更新
  • 或 SPService 在 25.12 版本中修改了数据拉取逻辑,改为懒加载或按需上报

:white_check_mark: 解决建议与排查步骤

步骤 操作 工具/命令
1 确认 PCIe 卡是否被系统识别 lspci | grep -i raid|eth
2 检查 CSR 配置是否存在并正确命名 检查 /usr/share/ubmc/csr/ 下对应 PCIe 卡的 .json 文件
3 验证 CSR 中是否包含 PCIeCard_1PCIeDevice_1 定义 查看字段如 VendorID, DeviceID, FirmwareVersion 是否完整
4 检查 MDB 是否成功加载该设备 busctl tree bmc.kepler 或检查一键收集中的 mdb_info.log
5 调试调用 GetPCIeCardNum 是否返回正确数值 通过 Lua 脚本或 D-Bus 调用 ImplPCIEDevicesPCIEDevicesGetPCIeCardNum
6 检查 SPService 的 Redfish 映射配置 查看映射文件中 /SPService/DeviceInfo 是否关联了 PCIeCard 数据路径
7 对比 25.12 与旧版本的变更点 特别关注 Pcie_Device Component 版本是否从 1.70.100 → 1.70.109 引入兼容性问题

:receipt: 结论:最可能的原因

:red_exclamation_mark: 在 25.12 版本中,由于 CSR 配置缺失或 Pcie_Device Component 更新导致 PCIe 设备未被正确枚举,使得 SPService 获取不到 PCIe 卡信息,最终 Redfish 接口返回空数据。

这并非典型 Bug,而是 适配问题,与以下因素强相关:

  • 是否为新引入的 PCIe 卡型号
  • CSR 文件是否随 25.12 版本更新而遗漏
  • SPService 是否调整了设备信息收集逻辑

:light_bulb: 修复建议

  1. 补充 CSR 配置文件,确保 PCIeCard_1 包含完整硬件信息
  2. 验证 GetPCIeCardNum 方法是否返回非零值
  3. 检查 Redfish 到 MDB 的映射配置是否完整
  4. bios_service.lua 中添加 PCIe 地址日志输出,用于调试发现流程
  5. 联系驱动团队确认 25.12 是否移除了某些默认上报行为

:link: 参考知识支持

  • PCIeCard_1 应包含 FirmwareVersion, Manufacturer, DeviceID 等字段
  • Pcie_Device Component 版本 1.70.109 依赖 dtframeforlua,需确保依赖正常
  • Redfish API 通过 MDBService.GetPath 获取数据,若路径无响应则返回空
  • CSR 是决定 BMC 能否识别硬件的核心机制

如仍无法解决,请提供:

  1. 一键收集中 mdb_info.log 内与 PCIeCard 相关部分
  2. csr 目录下对应网卡或 RAID 卡的配置文件内容
  3. lspci 输出及设备 BDF 地址

以便进一步定位问题。

1、在SP未运行的情况下,收一份BMC一键日志,发送到邮箱huangjunhua14@huawei.com

2、/redfish/v1/Managers/:managerid/SPService/DeviceInfo该接口的信息来源于SP启动时进行的设备信息收集,确认下之前是否进入过SP,如果从未进入过SP,该接口是不会有设备信息的

从收集回来的BMC日志来看,可以确认是没有进入过SP,因此当前这个SPService/DeviceInfo接口没有返回设备信息,是正常的

可以通过以下操作,启动进入SP进行设备信息收集:

1、BMC web页面选择“iBMC管理”->“SP管理”

2、勾选“基本信息”->“启动设置”下的“设备信息收集使能”按钮

3、对服务器进行重新上电后,会进入SP收集设备信息

待SP收集完成设备信息并退出后,再请求SPService/DeviceInfo接口查看设备信息

目前发现有一些信息的value是null,这些信息在资源树上是有值的