AC测试偶现9560-16i Raid卡高温告警

// 此模板仅供参考,如果不适用可以修改

问题描述

AC测试偶现9560-16i Raid卡偶现高温告警,出现高温告警时,BBU温度传感器读值都是254。

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

  • 硬件配置:[如 CPU、内存等]

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

查看代码BBU温度直接通过raid卡获取。想知道读出254可能的原因,能否直接在CSR里更改表达式将expr(($1 < 255) ? $1 : 0)改为<254

实际结果

AC压测不出现BBU温度高温告警

尝试过的解决方案

[列出您已经尝试过的解决方案及结果]

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

结论

  • 读取值 254°C 是通信异常或无效数据的表现,不应作为真实温度参与高温判断。
  • 建议修改表达式,将 $1 >= 254 视为异常并替换为默认值(如30°C),防止虚假告警。
  • 同时应加强防抖机制(如median_s5midavg_s6),提升系统鲁棒性。
  • 此类问题不建议仅通过提高阈值掩盖,而应从数据有效性校验角度根本解决。

修改后的逻辑将有效避免AC压测中因瞬态通信异常导致的误告警,提升系统稳定性与可信度。

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

RAID卡BBU高温告警问题分析与解决方案

问题描述

在AC测试过程中,偶现博通9560-16i RAID卡的Battery Backup Unit (BBU) 高温告警。当告警发生时,BBU温度传感器读值显示为254°C,显著高于正常工作温度范围(通常为0-60°C)。该问题具有间歇性特征,累计触发3次。

相关日志显示:

Temperature PCE21 BBU Temp Upper Non-critical going high | Asserted | Reading 254 > Threshold 60 degrees C

环境信息

  • RAID卡型号:博通9560-16i
  • 系统架构:PCIe RAID控制器
  • 监控系统:BMC(基板管理控制器)
  • 温度监控机制:基于IPMB/SMBus通信,通过MCTP协议读取RAID卡数据

根本原因分析

1. 数值254的来源分析

根据知识图谱和文档内容,温度读值254并非真实的物理温度,而是传感器通信异常或数据无效的标志值

相关依据:

  • ThresholdSensor_RaidCardTemp的配置中,存在表达式逻辑处理异常值:

    "MonitoringValue": "<=/Controller_1.TemperatureCelsius |> expr($1 >= 255 ? 30 : $1)"
    

    这表明系统已识别到255及以上为异常值,并进行特殊处理(如替换为默认值30°C)。

  • RAID卡温度获取失败事件的定义表明,当BMC无法从RAID控制器获取有效温度数据时会触发告警,说明通信链路可能存在问题。

  • 类似的传感器无效值包括32767255,常用于表示“无法读取”或“传感器故障”,文档中提到:

    “TemperatureAbnormal” 标志位用于判断温度是否异常,且 $1 == 255 被单独判断为异常状态。

因此,254极可能是通信异常期间返回的无效值或边界错误值,而非真实温度。

2. 可能导致读取异常的原因

原因类别 具体分析
通信链路异常 RAID卡与BMC之间通过I2C/IPMB总线通信。若I2C访问超时、SMBus冲突或MCTP消息丢失,可能导致返回默认/错误值(如254)。文档中指出:“I2C access timeout”是常见问题。
RAID卡固件问题 博通RAID卡固件在特定负载下可能返回错误温度值,特别是在初始化未完成或内部自检期间。
BBU硬件状态异常 尽管BBU物理存在,但其内部温度传感器可能因老化或连接不良导致输出异常。
阈值判断逻辑缺陷 当前系统对254未做有效性校验,直接参与比较并触发告警(>60°C),缺乏防抖与无效值过滤机制。

解决方案建议

:white_check_mark: 推荐方案:增强传感器值有效性校验与防抖机制

修改建议

在现有表达式基础上增加对254的判断,避免其被误认为高温。

原表达式(示例):

expr($1 >= 255 ? 30 : $1)

修改后表达式:

expr($1 >= 254 ? 30 : $1)

或更精确地排除所有非合理温度范围的值:

expr($1 < 0 || $1 >= 254 ? 30 : $1)

解释:将所有≥254的值视为无效,并替换为合理默认温度(如30°C)。这样可防止因通信异常导致的虚假高温告警。

依据支持

  • 文档硬件监控防抖机制参考中明确指出,RAID卡BBU温度使用median_s5中值滤波防抖(见Reference ID 5),说明该通道存在噪声或异常值风险,需加强数据清洗。
  • 当前系统已有处理255的逻辑,扩展至254符合设计一致性。

:wrench: 补充建议措施

措施 说明
启用midavg_s6防抖算法 参考文档,RAID卡BBU温度也适用于midavg_s6(有符号中值平均6次防抖),可进一步平滑瞬时异常值。
增加I2C通信健康监控 添加对I2C总线错误计数的监控,定位是否因通信不稳定导致数据异常。
确认RAID卡固件版本 升级至最新稳定版博通9560-16i固件,排查是否为已知固件bug。
审查BMC扫描周期 若扫描间隔过短(如小于20秒),可能导致RAID卡响应不及时,建议与厂商确认最小通信周期。

结论

  • 读取值 254°C 是通信异常或无效数据的表现,不应作为真实温度参与高温判断。
  • 建议修改表达式,将 $1 >= 254 视为异常并替换为默认值(如30°C),防止虚假告警。
  • 同时应加强防抖机制(如median_s5midavg_s6),提升系统鲁棒性。
  • 此类问题不建议仅通过提高阈值掩盖,而应从数据有效性校验角度根本解决。

修改后的逻辑将有效避免AC压测中因瞬态通信异常导致的误告警,提升系统稳定性与可信度。

254如果不符合预期就看下254的原因

不适合直接改CSR

看下配置呢

BBU温度看代码是从raid卡获取的,bmc这看不出具体原因。配置具体指的哪些

发下你vpd和storage的版本号 我看下这张raid卡的csr和 storage的业务代码逻辑

vpd:1.81.7 storage:1.81.0

没看出254是哪来的,建议发下一键日志收集
也可以参考下如下修改试试

        "Event_BBUOverTemp": {
            "Reading": "<=/Battery_1.TemperatureCelsius |> expr(($1 < 255) ? $1 : 0)",
            "OperatorId": 4,
            "Condition": "<=/ThresholdSensor_PCIeBBUTemp.UpperNoncritical",
            "@Default": {
             // 添加Reading的默认值
                "Reading": 20
                "Condition": 60
            },
            "Enabled": true,
            "DescArg1": "#/PCIeDevice_1.SlotID",
            "DescArg2": "#/Battery_1.TemperatureCelsius",
            "DescArg3": "#/ThresholdSensor_PCIeBBUTemp.UpperNoncritical",
            "LedFaultCode": "b02",
            "Component": "#/Component_Battery",
            "Hysteresis": 2
        },