// 此模板仅供参考,如果不适用可以修改
问题描述
拔出网卡光模块后,光模块对象信息仍然显示在位,Presence=1
环境信息
- 软件版本: OpenUBMC2509
实际结果
没有插光纤线时上报了告警,拔出光模块后告警也不会消失
// 此模板仅供参考,如果不适用可以修改
拔出网卡光模块后,光模块对象信息仍然显示在位,Presence=1
没有插光纤线时上报了告警,拔出光模块后告警也不会消失
答案内容由AI生成,仅供参考:
当网卡光模块被物理拔出后,系统中对应的光模块对象信息仍然显示为“在位”(Presence=1),并且之前因无光纤连接触发的告警未能自动清除。
根据提供的系统信息:
OpticalModule_2_010108 的 Presence 属性仍为 1光模块的在位状态通常通过以下方式检测:
从当前现象来看,系统虽然判断 Presence=1,但 Accessible=0、Manufacturer 等字段无法正常获取或为空,表明光模块实际已不可访问,说明其已被移除。然而 Presence 状态未同步更新,说明:
光模块在位检测逻辑与实际通信状态脱节,未进行状态联动刷新。
Accessibility=0 表示无法访问模块ModuleState=255 是默认值,表示未进入正常工作状态TX/RX Current/Power 均为 0,无有效数据交互符合“物理拔出”后的特征。
告警系统应当具备基于对象生命周期的动态管理机制,即:
但当前系统中:
告警未与
Presence状态绑定联动,导致模块移除后告警持续存在。
这属于典型的“孤悬告警(Hanging Alarm)”问题。
文档明确指出:
“Event仅对Reading值负责,Event是通过监听Reading值触发告警”
这意味着:
Presence 状态来决定是否屏蔽或清除告警理想情况下,应在光模块状态变化时执行:
但在本案例中:
Presence=1,但无任何有效数据返回表明系统可能仅依赖初始化状态或静态寄存器值,并未执行动态探测。
来自《openUBMC 182x大板管理特性设计说明书》中定义的新增功能:
【新增】汇聚光模块查询信息:
- 光模块在位状态:光模块是否在位(在位/不在位)
- 光模块静态信息:厂商名称、部件名称、序列号等
- 光模块动态信息:温度、电压、功率、电流等
【新增】获取光模块在位状态:快速查询单个光模块的在位状态
此外,bmc.kepler.Systems.OpticalModule 接口包含:
| Presence | U8 | 只读 | 光模块是否在位 |
| Accessible | U8 | 只读 | 光模块是否可访问 |
两者应联合判据:
Presence = 在位 且 Accessible = 1 才表示真正有效的在位状态
graph TD
A[定时检测光模块状态] --> B{Presence = 1?}
B -- 否 --> C[标记为离线, 清除所有相关告警]
B -- 是 --> D{Accessible = 1?}
D -- 否 --> C
D -- 是 --> E[继续监测各项指标]
E --> F{是否超阈值?}
F -- 是 --> G[触发相应告警]
F -- 否 --> H[保持正常状态]
修改 network_adapter 服务中的在位检测逻辑,改为:
Presence 引脚状态修改文件:
network_adapter.lua中与OpticalModule.Presence相关逻辑
Presence 和 Accessible 状态在告警生成逻辑中加入前置条件校验:
if module.Presence == 1 and module.Accessible == 1 then
-- 允许检测读数并判断是否告警
else
-- 强制清除与该模块关联的所有传感器告警
clear_all_optical_module_alarms(module_id)
end
可避免出现“无物理实体却持续报障”的问题
在 network_adapter 中增加一个周期性热插拔检测任务(如每 5~10 秒一次),执行以下操作:
Presence=0 并清除所有关联状态与告警| 检查项 | 是否符合 |
|---|---|
Presence 是否仅依赖硬件引脚? |
|
Accessible 是否被用于告警抑制? |
|
| 是否存在模块移除时的告警清除逻辑? | |
是否使用 SMBus 主动探测模块存在? |
| 问题 | 原因 | 建议措施 |
|---|---|---|
拔出后 Presence=1 |
检测机制不完整,仅依赖初始状态 | 联动 SMBus 通信结果 |
| 告警无法清除 | 告警未绑定 Presence 生命周期 | 增加 Presence 条件判断 |
| 数据残留 | 系统未释放对象状态 | 实现对象回收机制或定时清理 |
结论:当前行为 不符合预期设计规范。系统应在光模块拔出后正确更新
Presence=0并清除相关告警。建议结合Presence与Accessible属性,实现更精确的状态管理机制。
相关链接:
通过带外IPMI命令获取光模块信息的流程里确实没判断光模块不在位的情况,建议在network_adapter仓的om_cpu.lua文件中如下代码段加上不在位并reset获取信息的逻辑
if rsp and rsp.Status == 0x00 then
orm_obj.Presence = 1
else rsp and rsp.Status == 0x02
// 示例新增代码,判断是否需要防抖等异常处理,协议里规定0x02代表光模块不在位
reset_diagnostic_info(orm_obj)
log:info("optical module not present")
end