当 OS 下电或驱动未就绪时,读值默认为 0,但在某些异常路径下会返回 32768(表示 BMC 通信失败)甚至 32767。
若 BMC 的驱动(如 compute 组件)未能正确处理这些特殊值:
32767 和 32768 均超出 U8 范围(0–255),强制截断为低 8 位会造成数值混乱。
若这些值直接参与计算且无符号处理,极易导出负数。
支撑证据:
DC 3 中提到:32768 = BMC 从卡侧获取温度失败;32767 = 卡侧已返回,但卡没读到真实值。
DC 7 显示日志中频繁出现 find_object nil 错误,表明 BMC 与 NPU 通信链路不稳定。
3. IPMI SDR 数据获取路径与其他接口不一致
Web UI 和 npu-smi 使用的是:
Web 接口:基于 Restful API 从 D-Bus 或对象模型获取;
npu-smi:直接通过 NPU 驱动从设备读取;
而 ipmitool sdr list 是通过 IPMI 协议 → SDR(Sensor Data Record) → BMC 内部转换逻辑 获取:
涉及 GetDeviceSDR, Get Sensor Threshold, Get Sensor Reading 等命令;
需依赖 M, B, RBExp 参数进行线性转换;
若该流程中的某环节缓存失效、数据脏读、并发竞争,则可能返回异常中间值。
支撑证据:
搜索结果 #9术语表 明确指出:SDR = Sensor Data Record,是 IPMI 提供的传感器元数据记录方法。
DC 6 规定 Reading 必须是一个在门限范围内的初始值,防止产生 SEL 时间。若该值初始化不当,会导致展示异常。
三、潜在技术路径剖析
1. 传感器数值转换流程缺陷
flowchart LR
A[RAW 数据来自 NPU] --> B{是否为有效值?}
B -->|0 或 32767/32768| C[异常标记]
B -->|正常值| D[除以缩放倍率 → 控制在 0-255]
D --> E[写入 Sensor.Reading]
E --> F[应用 M/B/RBExp 公式]
F --> G[输出最终值]