门限传感器Status变为disabled状态

问题描述

偶现门限传感器Status变为disabled状态,关联entity的PowerState、Presence为固定值1。
ThresholdSensor和Entity状态读取

~ ~ # mdbctl lsprop ThresholdSensor_CpuDDRVDDVolt_01010209
bmc.kepler.Object.Properties
  ClassName="ThresholdSensor"
  ObjectIdentifier=[1,"1","","01010209"]
  ObjectName="ThresholdSensor_CpuDDRVDDVolt_01010209"
  TraceSamplingRate=0
bmc.kepler.Systems.ThresholdSensor
  Capabilities=232
  EntityId=3
  EntityInstance=98
  LowerCritical=37
  LowerNoncritical=0
  LowerNonrecoverable=0
  NegativeHysteresis=2
  OriginalReading=0
  OwnerLun=0
  PositiveHysteresis=2
  Reading=41
  ReadingMask=4626
  ReadingStatus=0
  SensorIdentifier=""
  SensorName="CPU2 DDRVDD"
  SensorNumber=39
  SensorType=2
  UpperCritical=45
  UpperNoncritical=0
  UpperNonrecoverable=0
bmc.kepler.Systems.ThresholdSensorDisplay
  AssertStatus=0
  Health="OK"
  LowerCriticalDisplay="0.722"
  LowerNoncriticalDisplay="0.000"
  LowerNonrecoverableDisplay="0.000"
  NegativeHysteresisDisplay="0.039"
  PositiveHysteresisDisplay="0.039"
  ReadingDisplay="0.000"
  Status="Disabled"
  UnitDisplay="Volts"
  UpperCriticalDisplay="0.878"
  UpperNoncriticalDisplay="0.000"
  UpperNonrecoverableDisplay="0.000"
Private
  Accuracy=0
  Analog=1
  AssertMask=0
  B=0
  BA=0
  BaseUnit=4
  BelongsToSystem=false
  DeassertMask=0
  Initialization=127
  IsValid=true
  Linearization=0
  M=195
  MT=0
  MaximumReading=128
  MinimumReading=0
  ModifierUnit=0
  NominalReading=80
  NormalMaximum=0
  NormalMinimum=0
  OwnerId=32
  RBExp=192
  ReadingType=1
  Unit=0

~ ~ # mdbctl lsprop Entity_CPU1_01010209
bmc.kepler.Object.Properties
  ClassName="Entity"
  ObjectIdentifier=[1,"1","","01010209"]
  ObjectName="Entity_CPU1_01010209"
  TraceSamplingRate=0
bmc.kepler.Systems.Entity
  Health=0
  Id=3
  Instance=98
  Name="CPU1"
  PowerState=1
  Presence=1
  Slot=255
Private
  BelongsToSystem=false

~ ~ #

CSR配置

        "Entity_CPU1": {
            "Id": 3,
            "Instance": 96,
            "Name": "CPU1",
            "PowerState": 1,
            "Presence": 1
        },
        "ThresholdSensor_CpuNAVSVolt" :{
            "OwnerId": 32,
            "OwnerLun": 0,
            "EntityId": "<=/Entity_CPU1.Id",
            "EntityInstance": "<=/Entity_CPU1.Instance",
            "Initialization": 127,
            "Capabilities": 232,
            "SensorType": 2,
            "ReadingType": 1,
            "SensorName": "CPU${Slot} N-AVS",
            ……
            "Reading": "<=/Scanner_CpuNAvs_Volt.Value |> expr(($1 / 10))",
            "ReadingStatus": 0,
            "SensorNumber": 255
        }

环境信息

  • 软件版本:OpenUBMC2512SP1

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

:pushpin: 总结

门限传感器 Status=Disabled 但 Entity 状态正常,最可能的原因是 Entity 状态更新时序问题已知 bug(Entity 更新传感器使能状态遗漏),导致传感器状态与 Entity 实时状态不同步。建议优先合入修复补丁,并验证初始化顺序。

点击此处查看详细分析解答

根据您提供的现象描述和知识库信息,门限传感器 Status 偶发变为 Disabled,但关联的 Entity_CPU1PowerStatePresence 均为固定值 1,说明 Entity 本身处于正常在位且上电状态。结合知识库中的以下关键信息,问题可能由以下原因导致:


:magnifying_glass_tilted_left: 可能原因分析

1. Entity 状态更新时序问题(最可能原因)

  • 知识库中 [Document Chunks id=5] 指出,离散传感器初始化时因 Entity 对象关联存在时序问题,导致传感器状态与代码配置不符。虽然该描述针对离散传感器,但门限传感器同样依赖 EntityIdEntityInstance 关联 Entity,初始化时机错误也可能造成传感器状态异常。
  • 相同知识库还提到,当代码找不到 Entity 对象时,传感器默认状态为 EnabledDisabled,并可能在后续 Entity 初始化完成后未能正确更新传感器状态,从而产生偶发 Disabled
  • 您环境中 Entity 的 PowerStatePresence 虽然当前为 1,但在传感器初始化阶段可能因时序原因未正确读取到 Entity 状态,导致传感器被错误禁用。

2. Capabilities 配置影响

  • 传感器 Capabilities=232(二进制 11101000),其中 bit7(值为 128)置位,表示 传感器使能状态受关联 Entity 的 PowerState 和 Presence 影响(参考 [Sensor Management FAQ id=1 的 Q006 和 id=4 的说明])。
  • 即使 Entity 当前状态正常,若存在短暂的状态波动(如系统启动、复位阶段),PowerState 或 Presence 曾为 0,传感器 Status 会变为 Disabled,而 Entity 恢复后传感器状态可能未被重新使能

3. 已知问题(与 OpenUBMC 2512SP1 版本相关)

  • 知识库中 [Document Chunks id=1 的回复] 明确指出,该问题已定位解决,并关联了两个 issue:
    • Issue #90:OS 下电后,设置风扇手动模式,风扇转速传感器为 Disabled
    • Issue #128Entity 更新传感器使能状态遗漏问题
  • 您使用的版本为 OpenUBMC2512SP1,若未合入上述修复补丁,则此偶发 Disabled 现象可能与已知 bug 一致。

4. 其他可能因素(需进一步排查)

  • 主动禁用操作:通过 IPMI/CLI 接口主动变更传感器使能状态(参考 [Sensor Management FAQ id=1]),即使 Entity 状态未变,传感器也可能被手动置为 Disabled
  • ReadingStatus 异常:虽然当前 ReadingStatus=0(正常),但历史上如果传感器扫描异常(如 ReadingStatus 非 0),也可能导致 Status 异常,但当前读数正常,此可能性较低。

:white_check_mark: 排查与解决建议

  1. 确认补丁状态
    检查当前版本是否已合入 Issue #90Issue #128 的修复。若未合入,建议移植相关修改。

  2. 验证传感器初始化逻辑
    检查传感器初始化阶段 Entity 对象的加载顺序,确保 Entity_CPU1ThresholdSensor_CpuDDRVDDVolt_01010209 之前完成注册。可通过增加日志或延迟启动传感器服务来规避时序问题。

  3. 检查 disable_override 标志
    在传感器私有属性中查看是否存在 disable_override 被意外置为 true(知识库 [id=1] 提到此标志在 disable_scanningdisable_all 被更改时置为 true),这会导致传感器维持禁用状态。

  4. 临时规避手段
    若无法立即修复,可尝试在传感器初始化完成后,强制重新设置传感器状态,例如通过 IPMI 命令 raw 重新使能传感器(但需确保 Entity 状态稳定)。


:pushpin: 总结

门限传感器 Status=Disabled 但 Entity 状态正常,最可能的原因是 Entity 状态更新时序问题已知 bug(Entity 更新传感器使能状态遗漏),导致传感器状态与 Entity 实时状态不同步。建议优先合入修复补丁,并验证初始化顺序。