【已评审】支持NVME盘温度传感器根据协议显示

根据 NVMe-MI 管理协议,硬盘温度读值并非简单的线性映射,而是包含无数据、传感器故障、保留字段、负温度补码等多种特殊编码。当前 Nvme 对象温度未对0x80/0x81和保留字段进行异常处理,导致传感器显示错误温度,也无法正确触发温度访问失败告警。因此需要在 ReplicaDrive 对象中新增 TemperatureCelsius 属性,作为 storage 与 VPD 传感器/告警之间的温度同步载体。

关联ISSUE

https://gitcode.com/openUBMC/storage/issues/376

整体方案

  1. bmc.kepler.Systems.Storage.ReplicaDrive对象增加 TemperatureCelsius 属性

  2. storage 组件依据 NVMe-MI 温度编码表对 Scanner 原始读值进行处理:

  • 0x00–0x7F / 0xC4–0xFF:正常温度,Drive 展示有符号摄氏度,ReplicaDrive 同步原始编码值(含负温度补码)

  • 0x81(129):传感器故障,Drive 温度不显示(255),ReplicaDrive 置 129 触发告警

  • 0x80(128):无数据/数据过期,Drive 展示上一次有效温度;ReplicaDrive 同步上一次有效原始值;持续 5 分钟后 ReplicaDrive 置 129 触发告警

  • 0x82–0xC3(130–195):保留字段,Drive 温度不显示(255),ReplicaDrive 同步原始值,不触发告警

  1. 温度传感器和温度获取异常失败告警关联ReplicaDrive对象下的TemperatureCelsius

评审点

评审点1: 在已有 path: /bmc/kepler/Systems/:SystemId/Storage/ReplicaDrives/:Id 下,于 interface: bmc.kepler.Systems.Storage.ReplicaDrive 中新增属性 TemperatureCelsius,用于 storage 与 VPD 传感器/告警之间的 NVMe 温度同步

详细描述

资源信息

资源path:/bmc/kepler/Systems/:SystemId/Storage/ReplicaDrives/:Id(已有)

资源interface:bmc.kepler.Systems.Storage.ReplicaDrive(已有)

变化类型:已有对象新增属性

应用场景:NVMe 硬盘温度经协议转换后同步至 ReplicaDrive,供 VPD ThresholdSensor 读值与温度告警 Event 消费

持久化类型:不持久化

操作权限:Read: ReadOnly

属性定义

|变更类型 | 属性名称 | 签名 | 只读 | 变化通知 | 属性描述 | 访问权限 | 属性来源 | 持久化类型 | 变更影响|

|— | — | — | — | — | — | — | — | — | —|

| 新增 | TemperatureCelsius | y | True | True | NVMe 硬盘温度(NVMe-MI 原始编码值)。0x00–0x7F 为正温度(0–126°C);0x7F 表示 ≥127°C;0x80 表示无数据/数据过期;0x81 表示传感器故障;0x82–0xC3 为保留字段;0xC4 表示 ≤-60°C;0xC5–0xFF 为负温度补码编码(-59°C ~ -1°C) | Read: ReadOnly | storage 组件在 update_dynamic_drive_info 中根据 Nvme 对象 Scanner 读值按协议转换后写入 | 不持久化 | 无影响 |

评审结论

评审点一、 同意在 path: /bmc/kepler/Systems/:SystemId/Storage/ReplicaDrives/:Id , interface: bmc.kepler.Systems.Storage.ReplicaDrive 中新增属性 TemperatureCelsius,用于 storage 与 VPD 传感器/告警之间的 NVMe 温度同步