JKP_1980
(Jkp 1980)
1
// 此模板仅供参考,如果不适用可以修改
问题描述
通过BMC下发hPPR命令返回U0后,维护日志没有触发hPPR
环境信息
-
操作系统:[如 Ubuntu 24.04]
-
软件版本:[如 OpenUBMC2509]
-
硬件配置:920Bpro
重现步骤
-
[第一步] 在BIOS侧开启hPPR开关,使用redfish开启MemHardPPREnabled
-
[第二步] 使用ssh连接BMC,在 BIOS启动过程中下发命令
-
[第三步]查看 维护日志 ,没有BMC下发命令操作和触发hPPR隔离操作
期望结果
下发命令成功后,有触发hPPR操作
实际结果
命令下发成功后,无触发hPPR操作记录
尝试过的解决方案
1、下发sPPR成功,
分析结论
[详细总结您对此问题的分析结论]
答案内容由AI生成,仅供参考:
初步结论
U0 仅表示 BMC 命令层成功,不保证硬件层 hPPR 真正执行。维护日志无记录可能是:
- 新版本的设计(成功事件仅通过属性暴露)
- 功能开关未完全生效
- 命令参数或硬件限制导致隔离未实际触发
建议优先通过上述第 2、3 步确认隔离是否真实执行,再根据结果针对性调整配置或深入硬件层面。若问题持续,建议收集完整的 BMC 日志(app.log、maintenance log 等)和命令调用过程,以便社区或开发团队进一步分析。
点击此处查看详细分析解答
问题分析
从您描述的现象看,通过 BMC 下发 hPPR 命令返回 U0(通常对应 IPMI 完成码 00h,表示命令执行成功),但维护日志中没有触发 hPPR 相关记录。结合知识库中的信息,可能的原因及排查方向如下。
1. 命令返回 U0 的含义
- 知识库说明:在 IPMI 规范中,完成码
00h 表示成功(Completion Code 实体)。对于 hPPR/sPPR 等内存隔离命令,自定义返回码 U0 通常对应 ResultState 的 bit[7] = 0(成功)且 bit[0:6] = 0(无附加错误),可参考《上报内存隔离结果》文档中的响应码定义。
- 但成功码只说明 BMC 已接收并处理了命令,并不代表硬件层面确实执行了 hPPR 隔离。
2. 维护日志未记录的可能原因
2.1 维护日志的记录策略
在较新的 openUBMC 版本中,内存隔离的成功/失败事件不再通过传统维护日志打印,而是通过新增属性 MemIsolationSuccessBitmap / MemIsolationFailureBitmap 指示(详见 【已评审】新增属性支持内存隔离执行成功/失败指示)。其中 hPPR 对应 bit2。
- 如果是新特性版本:成功执行后不会在维护日志自动打印,需查询上述属性确认(例如通过
busctl get-property 获取)。
- 如果仍期望日志打印:可能需要检查日志级别或确认该次隔离是否真的被硬件执行(见下)。
2.2 功能开关未正确开启
- BIOS 侧:需在 BIOS setup 中开启 hPPR 相关开关(如
MemHardPPREnabled)。
- BMC 侧:需通过 Redfish 或配置导入导出功能将
BMCSet_MemHardPPREnabled 设为 "on"(值对应 true),并确认 MemHardPPREnabled 开关生效(详见 【已评审】部分内存故障预隔离开关项支持配置导入导出和装备定制化)。
- 若开关未正确生效,命令可能返回成功但实际不触发硬件隔离,维护日志自然无记录。
2.3 命令参数问题
- hPPR 命令需指定准确的地址信息(CPU、Channel、Dimm、Rank、SubRank、Device、Bank、Row、Col 等)。从《Get Memory HPPR Address》命令格式看,参数错误可能导致 BMC 返回成功但硬件不执行。
- 可对照《Get Memory HPPR Address》请求中的域定义,检查下发命令的参数字节是否合法。
2.4 硬件或资源限制
- 硬件不支持:部分平台可能不支持 hPPR 功能。
- 资源耗尽:如果 BankGroup 中已无冗余资源,隔离会失败。响应码 U0 可能掩盖了真实状态——但实际上硬件未执行(参考《上报内存隔离结果》中 hPPR 的响应码定义,资源耗尽对应响应码 3)。
- CPLD 透传问题:BMC 通过 HardwareProxy 下发命令,若 CPLD 或底层通信异常,也可能出现命令成功但实际未触发的现象。
3. 排查建议
-
确认功能开关
- 使用 Redfish 或
busctl get-property 检查 BMC 侧 MemHardPPREnabled 是否为 true。
- 查看 BIOS setup 中 hPPR 选项是否已开启。
-
查询隔离结果属性
- 调用
busctl --user call bmc.kepler.Systems.FDMDomain.MemoryRAS ... 获取 MemIsolationSuccessBitmap,检查 bit2(hPPR)是否从 0 变为 1。若已置位,说明隔离成功,维护日志不打印是设计行为。
-
使用 Get Memory HPPR Address 命令验证
- 下发
ipmicmd -k "0f 00 30 92 db 07 00 66 ..." 查询当前已隔离的 HPPR 地址列表。如果成功隔离,返回应有非零的地址信息。
-
检查 BMC 应用日志
- 查看
/var/log/app.log,搜索 fault_diagnosis 或 FDMDomain 相关关键词,可能包含 fail to send 或 Isolation failed 等错误信息(参考 sPPR 问题类似场景)。若全无打印,可考虑日志级别限制。
-
确认硬件兼容性与资源状态
- 确认 CPU(如 Kunpeng 920)及内存颗粒是否支持 hPPR。
- 查阅《Report Memory Fault Isolation Address》中的响应码定义,若硬件内返回非 0 响应码,BMC 可能仍返回 U0(需根据具体实现判断)。
-
参考类似问题的解决过程
- 在 openUBMC 社区或知识库中,
huangzhiyu 等贡献者曾针对内存隔离问题提供过详细的排查步骤(如检查 CPLD 透传、逻辑分析仪抓波形、验证 SMC 命令字等),可作为深入排查的指引。
初步结论
U0 仅表示 BMC 命令层成功,不保证硬件层 hPPR 真正执行。维护日志无记录可能是:
- 新版本的设计(成功事件仅通过属性暴露)
- 功能开关未完全生效
- 命令参数或硬件限制导致隔离未实际触发
建议优先通过上述第 2、3 步确认隔离是否真实执行,再根据结果针对性调整配置或深入硬件层面。若问题持续,建议收集完整的 BMC 日志(app.log、maintenance log 等)和命令调用过程,以便社区或开发团队进一步分析。
hPPR触发流程为:1、先打开BMC侧及BIOS开关,2、再在BMC侧下发命令,3、最后重启,在启动阶段BIOS会向BMC获取隔离信息。(这里2 3步骤反了)
BMC侧不会记录下发hPPR的日志(因是BIOS主动获取的隔离信息,不是BMC下发),仅在隔离之后BIOS上报BMC隔离结果后记录隔离结果日志
这里属性显示隔离失败,是因为sPPR隔离失败
(原因可见你“1、下发sPPR成功,”处维护日志截图,最后一条日志未sPPR隔离失败,原因为BIOS侧开关未打开
JKP_1980
(Jkp 1980)
6
现在就是先在BMC下发命令,然后在强制重启,看起来还是没有触发hPPR
在下发sPPR时会有这个日志,BMC successfully reported IMU SPPR isolation information,但下发hPPR就没有这个打印,跟这个有关系吗
hPPR不会打印:“BMC successfully reported IMU XXX isolation information”,hPPR是BIOS在启动阶段主动向BMC查询的,不是BMC reported的。
发送BMC debug命令之后不能重启BMC,需要确保BIOS侧开关打开,之后OS上下电
新版本在装备包场景添加了debug开关,防止测试模拟故障时误触发hPPR隔离。可以通过mdbctl call FDMDomain_1_010101 bmc.kepler.Debug.Systems.FDMDomain GetConfigurations 0 "GetHpprTuneEnable"查看开关状态,1是打开,0是关闭。
通过:mdbctl call FDMDomain_1_010101 bmc.kepler.Debug.Systems.FDMDomain SetConfigurations 0 “SetHpprTuneEnable” 1 打开开关
yin
(kunlun_yinmengyu)
10
这个debug开关只影响模拟故障时的场景嘛,不影响真实hPPR隔离问题把