答案内容由AI生成,仅供参考:
GPU适配后网页端无法显示功耗与温度信息的原因分析
当适配 NVIDIA 5090 GPU 后,能够在后台通过命令查询到功耗、温度等信息,但网页端无法显示这些数据,通常表明底层硬件通信正常,但上层数据链路或配置存在异常。以下是基于 openUBMC 架构和现有知识的全面分析与排查建议。
可能原因分析
1. 未正确配置资源协作接口(Object Model)
即使可以通过命令行读取到原始数据,若未在 openUBMC 的**资源树(Resource Tree)**中注册对应属性,Web 页面将无法获取数据。
-
关键属性缺失:
PrimaryGPUTemperatureCelsius:主 GPU 温度PowerWatts:GPU 当前功耗- 这些字段属于
bmc.kepler.Systems.Processor.GPU.Power和bmc.kepler.Systems.Processor.GPU接口,需要在 CSR 或配置文件中显式启用并映射。
-
检查点:- 是否在
Tesla_T4.lua(或其他对应 GPU 配置文件)中正确定义了PrimaryGPUTemperatureCelsius和PowerWatts的采集路径? - 是否在 CSR 中将
ProcessorType设置为 GPU 类型(通常为"2")?
- 是否在
2. Scanner 监控组件未正确配置或激活
数据从底层硬件到 Web 界面需经过 Scanner 组件定时采集。
-
Scanner_GPUTemp和Scanner_GPUPower是负责周期性读取 GPU 温度与功耗的核心模块。 -
如果 Scanner 的偏移地址(Offset)、周期(Period)、目标芯片(Chip)等参数配置错误,会导致采集失败。
-
相关实体:Scanner_GPUTemp_0101010301:监控 GPU 温度,周期 1000ms,偏移 156Scanner_GPUPower_0101010301:监控 GPU 功耗,偏移 144- 均依赖
Chip_TempOrPowerChip组件进行 I²C/SMBus 访问
-
检查点:- 使用命令查看 Scanner 状态:
若返回mdbctl lsprop Scanner_GPUTemp_0101010301 mdbctl lsprop Scanner_GPUPower_0101010301read failed或status=false,说明 Scanner 无法访问硬件。 - 确认
Chip_TempOrPowerChip的 I²C 地址是否正确(如0x4f),是否与 GPU 规格书一致。
- 使用命令查看 Scanner 状态:
3. 带外管理协议未适配(非 NVIDIA 协议)
虽然问题提到是“NVIDIA 5090”,但如果实际使用的是非标准或第三方封装的 GPU,可能不支持标准的 SMBus Post Box Interface (SMBPBI) 协议。
-
openUBMC 默认仅支持 NVIDIA 的
smbus_postbox协议。 -
对于其他厂商或定制卡,需:
- 获取厂商提供的带外管理协议文档
- 修改
general_hardware组件代码,实现私有协议解析
-
检查点:- 是否确认该 GPU 支持标准 NVIDIA SMBPBI 协议?
- 是否需要自定义协议解析器?参考文档:
general_hardware/docs/南向部件驱动适配教程GPU篇.md
4. Web 前端未订阅或渲染对应字段
即使后端已采集数据,若前端页面未正确绑定资源路径,也不会显示。
-
Web 页面通过 Redfish 或 D-Bus 资源路径订阅数据:
/bmc/kepler/Systems/1/Processors/GPU/:ID- 属性应包含:
{ "PrimaryGPUTemperatureCelsius": 65, "PowerWatts": 230 }
-
检查点:- 在浏览器开发者工具中,检查 Redfish API 是否返回了 GPU 的功耗与温度字段:
GET /redfish/v1/Systems/1/Processors/GPU_1 - 若 API 无此字段 → 说明后端未暴露;若有字段未显示 → 问题在前端 UI 映射。
- 在浏览器开发者工具中,检查 Redfish API 是否返回了 GPU 的功耗与温度字段:
5. 权限或状态过滤导致隐藏
某些情况下,系统会因健康状态异常、权限不足或状态为 Absent 而不展示传感器数据。
- 查看 GPU 是否被识别:
mdbctl lsobj | grep GPU - 查看健康状态:
若mdbctl lsprop GPU_1_01010103 | grep HealthHealth=0(OK),但数据仍不显示,则排除硬件离位问题。
解决方案建议
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 核查 Scanner 配置 |
确保 Scanner_GPUTemp 和 Scanner_GPUPower 的 Offset、Size、Chip 正确 |
| 2 | 验证 Chip_TempOrPowerChip 通信 |
使用 busctl 或 mdbctl 手动读取,确认 I²C 地址和总线是否可达 |
| 3 | 检查 GPU 配置文件 | 确认 Tesla_T4.lua 或自定义配置中已启用 PrimaryGPUTemperatureCelsius 和 PowerWatts |
| 4 | 查看资源树属性 | 执行 mdbctl lsprop GPU_1_01010103 bmc.kepler.Systems.Processor.GPU 确认字段存在 |
| 5 | 检查 Redfish 输出 | 访问 /redfish/v1/Systems/1/Processors/GPU_1 查看 JSON 是否含温功数据 |
| 6 | 更新 openUBMC 版本 | 某些旧版本存在闭源组件(如 compute)对 A2/A10/A100 卡支持不全的问题,建议升级至 25.09 或更高基线 |
参考案例
-
在适配 Atlas 300I A2 卡时,用户反馈温度与功耗无法读取,最终解决方案是:
来源:社区回复(baixin_lipengbo)
“当时我用的 openUBMC 25.06 基线,升级到 25.09 基线就可以了,25.09 基线的闭源组件compute有适配。” -
类似地,如果您的 “NVIDIA 5090” 实为定制 AI 加速卡(如 Atlas 系列),必须依赖特定 BMC 固件版本支持。
总结
网页端看不到 GPU 温功信息,本质是‘数据未进入资源树’或‘前端未绑定’。
虽然后台命令可读,说明物理层通,但完整链路还需:
Scanner 正确配置 → 数据采集
Resource Tree 注册 → 数据暴露
Redfish/Web 绑定 → 数据展示
建议操作命令汇总
# 查看 Scanner 状态
mdbctl lsprop Scanner_GPUTemp_0101010301
mdbctl lsprop Scanner_GPUPower_0101010301
# 手动测试读取
busctl call bmc.kepler.hwproxy /bmc/kepler/Chip/Complex/Chip_TempOrPowerChip_0101010301 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0 2
# 查看 GPU 对象属性
mdbctl lsprop GPU_1_01010103 bmc.kepler.Systems.Processor.GPU
# 检查是否存在 GPU 对象
mdbctl lsobj | grep GPU
# 查看 Redfish 接口输出(需通过 curl 或浏览器)
curl http://<BMC_IP>/redfish/v1/Systems/1/Processors/GPU_1
如以上步骤均正常但仍无法显示,请提供日志以进一步诊断。
相关链接: