根据 NVMe-MI 管理协议,硬盘温度读值并非简单的线性映射,而是包含无数据、传感器故障、保留字段、负温度补码等多种特殊编码。当前 Nvme 对象温度未对0x80/0x81和保留字段进行异常处理,导致传感器显示错误温度,也无法正确触发温度访问失败告警。因此需要在 ReplicaDrive 对象中新增 TemperatureCelsius 属性,作为 storage 与 VPD 传感器/告警之间的温度同步载体。
关联ISSUE
https://gitcode.com/openUBMC/storage/issues/376
整体方案
-
在
bmc.kepler.Systems.Storage.ReplicaDrive对象增加TemperatureCelsius属性 -
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 同步原始值,不触发告警
- 温度传感器和温度获取异常失败告警关联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 温度同步