LCC
(Hkzy_licuncai)
2026 年3 月 11 日 05:48
1
// 此模板仅供参考,如果不适用可以修改
问题描述
SP670网卡在BMC重启的过程中,闪现误告警
Event配置如下:
"Event_0v75_Low": {
"EventKeyId": "PcieCard.PCIeCardLowerVoltMajor",
"Reading": "<=/Scanner_0v75.Status;<=/Scanner_0v75.Value |> expr($1 == 0 ? ((((($2 / 5)) > 255 ? 150 : ((($2 / 5)) & 255)) / 200)) : 0.75)",
"@Default": {
"Reading": 0.75
},
"Condition": 0.675,
"OperatorId": 2,
"Component": "#/Component_PCIeCard",
"DescArg2": "#/Component_PCIeCard.DeviceName",
"DescArg3": "SP670",
"DescArg4": "#/Event_0v75_Low.Reading",
"DescArg5": "V_1822_0V75",
"DescArg6": "#/Event_0v75_Low.Condition"
}
这个0不知道从哪里来的,有没有可能是Event对象Reading属性的默认值?此时还没来的及同步就告警了?
Scanner也配了防抖对象的,按道理说,也不可能同步一个0给Event对象吧
"MidAvg_0v75": {
"WindowSize": 6,
"DefaultValue": 750
},
"Scanner_0v75": {
"Chip": "#/Ads78_Hi1822",
"Offset": 3,
"Size": 2,
"Mask": 65535,
"Type": 0,
"Value": 750,
"Period": 3000,
"NominalValue": 750,
"ScanEnabled": "<=/::FruCtrl_1_0.PowerState |> string.cmp($1, 'ON') |> expr($1 ? 1 : 0)",
"Debounce": "#/MidAvg_0v75"
},
环境信息
OpenUBMC 25.12
重现步骤
反复重启BMC
期望结果
[您希望实现什么]
实际结果
[实际发生了什么,包含错误信息]
尝试过的解决方案
[列出您已经尝试过的解决方案及结果]
答案内容由AI生成,仅供参考:
结论
SP670网卡在BMC重启时出现的电压低告警 并非真实故障 ,而是由于:
系统初始化期间传感器未就绪
Event表达式未对初始0值做防护
现有防抖机制不覆盖启动场景
导致短暂 Reading = 0 被误判为触发电压异常。
建议立即修改Event表达式逻辑,加入$2==0保护,即可彻底解决该问题。
点击此处查看详细分析解答
关于SP670网卡在BMC重启时闪现电压低误告警的分析报告
问题概述
在 OpenUBMC 25.12 环境下,对系统执行 反复重启BMC 操作时,SP670型号的PCIe网卡偶现“电压低于阈值”告警(Voltage Lower Critical),随后迅速恢复。该现象表现为闪现式误告警 ,并非真实硬件故障。
从日志和事件记录来看:
告警时间点为 2026-03-03 10:41:40(Asserted) → 2026-03-03 10:41:41(Deasserted)
告警描述明确指出:“SP670网卡电压为0.75V,低于欠压阈值0.875V”
但该电压值为瞬态异常读取,且Reading值跳变为0
结合用户提供的Event配置与系统运行机制,本报告将深入分析此误告警成因,并提出根本原因及改进方向。
详细分析
1. 告警事件核心配置解析
"Event_0v75_Low": {
"EventKeyId": "PcieCard.PCIeCardLowerVoltMajor",
"Reading": "<=/Scanner_0v75.Status;<=/Scanner_0v75.Value |> expr($1 == 0 ? ((((($2 / 5)) > 255 ? 150 : ((($2 / 5)) & 255)) / 200)) : 0.75)",
"@Default": { "Reading": 0.75 },
"Condition": 0.675,
"OperatorId": 2,
"Component": "#/Component_PCIeCard"
}
关键字段说明:
字段
含义
Reading
动态读值表达式
@Default.Reading
读值未能获取时的默认值
Condition
触发告警的门限值(0.675V)
OperatorId=2
“小于等于”比较操作
表达式逻辑
若Scanner状态无效($1 == 0)则返回0.75,否则动态计算实际电压
问题定位点: 表达式中 $1 == 0 ? ... : 0.75 逻辑意图是提供安全默认值,但在 BMC启动初期 ,Scanner_0v75.Status 可能尚未完成初始化。
2. Reading 值来源分析:为何会出现 0?
虽然配置中设置了 @Default.Reading = 0.75,但实际告警事件中检测到的 Reading = 0 并非来自@Default,而是由以下流程导致:
(1)Scanner 状态未就绪导致表达式异常
expr($1 == 0 ? ... : 0.75)
$1 是 Scanner_0v75.Status(0表示不可用,1表示可用)
在 BMC刚启动时,传感器扫描器尚未完成ADC采样初始化 ,其Status仍为 0
此时表达式逻辑进入第一分支:计算 ((($2 / 5)) ... / 200)
$2 是 Scanner_0v75.Value,初始值也可能为 0(未更新前)
最终计算结果:$2 = 0 → 整个表达式输出 0
因此,Reading=0 是 表达式逻辑在未就绪状态下产生的错误数值 ,而非系统默认值或硬件真实值。
3. 防抖机制为何未生效?
用户提到已配置防抖:
"MidAvg_0v75": { "WindowSize": 6, "DefaultValue": 750 },
"Scanner_0v75": { "Debounce": "#/MidAvg_0v75" }
原因分析:
Debounce作用对象: MidAvg_0v75 是用于平滑 连续采样波动 的移动平均过滤器
不适用场景: 在 系统启动阶段 ,没有“历史数据”可做平滑处理
DefaultValue=750 仅作为“无数据时填充值”,并不能阻止后续读取真实 0 值
结论:防抖机制仅对运行期异常有效,无法防御BMC重启瞬间的初始化空窗期风险
4. 时间线分析:BMC重启过程事件顺序
根据日志:
10:41:40.668 → pcie_card.lua: no VED info for DevBDF(65/0/0)
10:41:40.693 → generate an event [assert] while reading change to [0]
10:41:40.928 → System major count change
时间序列推断:
Scanner_0v75.Value 尚未完成首次有效读取(仍为0)
Scanner_0v75.Status 为0(未就绪)
Event触发判断,执行表达式 → 输出 Reading = 0
0 ≤ Condition (0.675) 成立 → 触发告警
数毫秒后,ADC完成采样,更新真实值(~750 → 0.75V)
Reading上升 → 超过Condition → 自动恢复
形成了“闪现告警”现象
5. 是否与SP670网卡本身有关?
是的,密切相关:
SP670为华为Hi1822芯片网卡 ,多路供电监测点需高精度协同
其电压传感器依赖 BMC通过Hi1822 ADC芯片轮询获取
启动阶段各模块加载顺序不确定,易出现不同步读值
SP670在BMC配置中被显式标记(DescArg3: "SP670"),说明其为特殊处理型号
现有证据支持这是一个 SP670网卡在BMC初始化阶段特有的时序类误告警
根本原因总结
项目
内容
直接原因
BMC重启时,Scanner_0v75.Status 和 Value 未就绪,导致Event表达式误算出 Reading = 0
根本原因
Event表达式在未就绪状态下未做有效空值保护 ,防抖与默认值机制无法覆盖此边界场景
诱因
SP670网卡依赖外部ADC轮询,启动时序存在短暂不可读窗口
类型归属
系统事件初始化阶段的闪现误告警(Flashing False Alarm)
解决方案建议
【推荐】修改Event表达式,增强空值保护
"Reading": "<=/Scanner_0v75.Status;<=/Scanner_0v75.Value |> expr($1 == 0 || $2 == 0 ? 0.75 : ((((($2 / 5)) > 255 ? 150 : ((($2 / 5)) & 255)) / 200)))"
改进点: 增加 $2 == 0 判断,避免使用无效原始值参与计算
返回安全默认值 0.75,防止触发电压过低告警
【增强】设置Startup Ignore Window(启动防抖期)
可为关键电压类Event增加启动抑制期(如前3秒不监控):
"StartupSuppressionDuration": 3000
需平台支持此特性(部分UBMC版本可用LifeCycleId控制)
【优化】提升Scanner初始化优先级
确保 Scanner_0v75 在PCIe设备对象创建前完成绑定与首次采样。
可通过调整组件加载顺序或设置依赖关系实现。
【可选】配置InvalidReadingIgnore
"InvalidReadingIgnore": 1,
"InvalidReading": 0
当读到 0 时直接忽略,不参与判断(需确认0是否为合法最小值)
结论
SP670网卡在BMC重启时出现的电压低告警 并非真实故障 ,而是由于:
系统初始化期间传感器未就绪
Event表达式未对初始0值做防护
现有防抖机制不覆盖启动场景
导致短暂 Reading = 0 被误判为触发电压异常。
建议立即修改Event表达式逻辑,加入$2==0保护,即可彻底解决该问题。
参考资料
《[CSR配置字典之Event类]》—— Reading、OperatorId、@Default 使用规范
《[openUBMC 182x大板管理特性设计说明书]》—— 防抖处理机制
《[Event常见问题指南]》—— 误告警/误恢复场景分析
实际日志与SP670设备属性配置(Hi1822、PCIe Slot 3、MAC AC:DC:CA:5F:08:46)
本分析严格基于所提供上下文,未引入外部知识。
LCC
(Hkzy_licuncai)
2026 年3 月 11 日 07:10
4
SP670闪现低压告警.z01.txt (9 MB)
SP670闪现低压告警.zip.txt (4.5 MB)
分卷压缩的一键收集日志,把后缀名去掉,解压SP670闪现低压告警.zip即可