热插盘之后,bmc上识别ssd信息后温度为20度,不发送变化

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

问题描述

[公司购买的同方服务器(同方S920X20),内部ssd做热插测试,多轮测试后,个别盘在bmc上的显示信息不完全正确,盘的基本信息正确,但是,温度值不是盘的实时温度,pdlu不显示盘的真实寿命,默认100%一直不变;跟踪盘端,发现bmc会周期性的读取盘的smd信息以获取温度和寿命信息]

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[BMC_ver=5.05]

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

重现步骤

  1. [多轮热插板盘,在bmc界面观测识别盘的情况]

  2. [第二步]

  3. [第三步]

期望结果

[完整显示盘的所有信息]

实际结果

[实际界面信息为,盘的型号信息我隐藏了,能正常显示:

]

尝试过的解决方案

[使用过三星的竞品盘也有类似的现象]

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

总结

本问题的根本原因可能是:

  1. CustomReadInfo函数在热插拔场景下未能正确获取实时的S.M.A.R.T.数据
  2. 系统在数据获取失败后未正确更新状态,而是保留了默认值(20℃和100%)
  3. 数据更新机制可能存在缓存或刷新策略缺陷

建议优先尝试服务重启和固件升级方案,并通过日志进一步定位具体故障点。同时考虑到多品牌SSD均受影响,应重点排查BMC端的数据采集和处理逻辑。

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

S920X20服务器SSD热插拔后BMC温度与寿命信息显示异常分析

问题描述

在使用同方S920X20服务器进行SSD热插拔测试时,发现以下异常现象:

  • 热插盘后,BMC能够正确识别SSD的基本信息(如型号、容量、接口类型等)
  • 但SSD温度固定显示为20℃,不随实际温度变化
  • SSD剩余磨损率(PDLU)始终显示为100%,无法反映实际寿命状态
  • 已确认BMC会周期性读取盘的S.M.A.R.T.信息以获取温度和寿命数据,但未正确更新显示

环境信息

  • 服务器型号:S920X20
  • 管理控制器:iBMC(集成在S920X20系统中)
  • BMC固件版本:5.05(根据知识库显示,S920X20设备经历过从5.09.12.21到5.05.12.25的版本升级)
  • 硬件架构:基于Kunpeng 920平台
  • 管理框架:OpenUBMC/openBMC生态系统
  • 相关组件bmc.kepler.storagethermal_mgmtCustomReadInfo

问题分析

1. 核心信息流路径

根据文档资料分析,SSD信息上报和管理流程如下:

graph TD
    A[SSD] -->|S.M.A.R.T.数据| B(BMC)
    B --> C[bmc.kepler.storage]
    C --> D[thermal_mgmt]
    D --> E[Web界面显示]

该流程涉及多个关键组件交互。

2. 温度信息异常原因分析

结合知识库内容,可能的原因包括:

温度初始值机制

  • 根据[CSR配置字典之Drive类]文档,TemperatureCelsius属性的默认值为255(INVALID_U8),表示无效值。
  • 但在实际应用中,系统可能将20℃设置为某种默认或初始值,当无法获取实时数据时持续显示该值。

数据获取机制

  • bmc.kepler.storage作为D-Bus路径和服务组件,负责监控存储设备并收集系统级存储指标
  • 该服务通过CustomReadInfo函数从硬件读取数据,但此函数“有时返回无效数据”,可能导致数据获取失败

温度监控策略

  • 系统采用多种防抖机制,对于SSD/HDD硬盘温度监控使用midavg_s6(有符号中值平均6次防抖)策略
  • 若短时间内多次读取失败,系统可能维持上次有效值或默认值

3. 剩余磨损率(PDLU)不更新原因

SMART信息获取链路

  • BmcKeplerSmsRedfishSmartDetails是Redfish管理设备中存储SMART属性的数据结构
  • 该结构依赖固件(Firmware)支持来报告存储设备的SMART数据
  • 信息流路径:SSD → S.M.A.R.T. → BMC → bmc.kepler.storage → Redfish API → Web界面

可能的断点

  • iTestSmart测试软件用于S920X20平台的测试,若测试过程中存在兼容性问题,可能影响正常数据采集
  • 不同品牌SSD(包括三星竞品)均出现类似现象,表明问题更可能出在BMC端处理逻辑而非特定盘兼容性

相关技术支持细节

BMC与存储设备通信架构

组件 角色 相关信息
bmc.kepler.storage 存储管理核心服务 负责监控存储硬件,处理NVMe驱动信息更新
thermal_mgmt 温度管理模块 负责温度监控、风扇速度控制,版本1.70.107等
CustomReadInfo 数据读取函数 可能返回无效数据,已知存在问题

S920X20平台特性

  • 支持OpenUBMC固件生态系统
  • 使用华为iBMC管理系统
  • 具备完整的服务器管理功能:IPMI、Redfish、Web界面
  • 配备了完善的散热管理系统(CoolingPolicy支持EnergySaving/HighPerformance/LowNoise模式)

解决方案建议

1. 诊断步骤

# 检查BMC日志中关于storage和temperature的相关记录
ipmcget -d logbuf | grep -i "storage\|temperature"

# 查询具体的温度传感器状态
ipmitool sensor list | grep -i "ssd\|temp"

# 检查Web后端服务状态(bmc.kepler.web_backend可能存在timeout问题)
systemctl status bmc.kepler.web_backend

2. 潜在解决方法

方法一:重启相关服务

# 重启storage服务以重新建立连接
systemctl restart bmc.kepler.storage

# 重启thermal管理服务
systemctl restart thermal_mgmt

方法二:检查并更新固件

  • 当前使用BMC版本5.05可能存在已知问题,建议升级到更稳定的版本
  • 根据知识库,S920X20支持多个BMC版本,包括22.06.00、25.03、25.06.00等

方法三:配置修正

检查CoolingConfig类配置:

  • SysSSDsMaxTemperature 应设为80.0℃
  • DiskRowTemperatureAvailable 需设置为true以启用硬盘温度参与调速

方法四:日志追踪

在以下位置添加调试日志:

  • storage > src > lualib > sml > ctrl_info.lua(处理物理盘温度支持)
  • storage > src > luablb > drive > drive_object.lua(更新硬盘对象驱动信息)

已知相关问题

  1. CustomReadInfo函数问题:已知该函数有时返回无效数据,直接影响BMC数据读取
  2. bmc.kepler.web_backend超时问题:可能导致Web界面数据同步延迟或失败
  3. DeviceInfo响应不完整:S920X20设备存在DeviceInfo响应中缺少字段的问题
  4. RAID卡识别问题:OpenUBMC刷写后RAID卡未被识别,显示系统存在设备识别稳定性问题

总结

本问题的根本原因可能是:

  1. CustomReadInfo函数在热插拔场景下未能正确获取实时的S.M.A.R.T.数据
  2. 系统在数据获取失败后未正确更新状态,而是保留了默认值(20℃和100%)
  3. 数据更新机制可能存在缓存或刷新策略缺陷

建议优先尝试服务重启和固件升级方案,并通过日志进一步定位具体故障点。同时考虑到多品牌SSD均受影响,应重点排查BMC端的数据采集和处理逻辑。

从盘的角度看,bmc一直能读取到盘上的smd信息,并且盘会给出正确的温度信息和pdlu信息,理论上bmc也能采集到盘的信息

有条件的话,参考其他提问里把一键收集日志改个后缀放上来。

我印象里这是个历史问题,根因是在storage组件代码里,轮询NVMe信息的逻辑中,函数鲁棒性不够强,一些参数没有判断是否为nil的就进行了比较大小的动作。在实际运行中会概率性出现这些参数为nil的情况,这是违反lua语法的,导致了轮询逻辑崩溃。

1 个赞

在长江计算服务器上也复现了此问题

可以发个一键日志定位下
huangminghao4@huawei.com
任务异常报错,会记录相关日志的

在storage文件夹下

mv sync_property_trace.log sync_property_trace.log.txt

sync_property_trace.log.txt (53.2 KB)

part1.tar.gz (7.7 MB)

part1.tar.gz (7.7 MB)

在长江计算服务器上的两份log

初步分析你图中的情况是系统下电场景吧 由于下电这几个scanner会去使能,使用NominalValue值导致温度为20,磨损率为 100.
确认下

多次热插拔盘,系统不动

系统不动 系统是下电状态还是上电状态

看了下日志,没出现我之前遇到的那个问题报错。看到app.log中出现了大量的storage组件报错刷屏。是盘不支持获取link width这个信息么?看代码这是nvme-mi规范要求实现的

2026-03-31 09:17:48.435634 storage ERROR: nvme_object.lua(576): Read chip failed (repeated 2 times)

2026-03-31 09:17:48.436116 storage ERROR: nvme_object.lua(602): vpd_nvme_mi_get_link_width:Read chip failed

2026-03-31 09:17:48.470925 storage ERROR: nvme_object.lua(576): Read chip failed

2026-03-31 09:17:49.729894 storage ERROR: nvme_object.lua(602): vpd_nvme_mi_get_link_width:Read chip failed

2026-03-31 09:18:03.060684 storage ERROR: nvme_object.lua(602): vpd_nvme_mi_get_link_width:Read chip failed (repeated 2 times)

带内一直处于上电状态,所有槽位上插满盘进行热插拔测试,观测bmc上识别盘的情况

10轮会遇到一次,带内上正常识别盘,但是带外上盘的温度信息和pdlu信息不更新了,并且不正确了

你分析的对

我们测试的盘,按照nvme-mi协议更新了vpd信息中的mulit-record info的长度,从64字节切换到37字节了,所以后面的nvme pcie port multirecord的位置也发生变动了,在nvme pcie port multirecord中的pcie link width 和speed信息也变动了,导致主机找不到pcie link capability了

根本原因是:bmc只认为mulit-record info的长度为固定64 bytes,不支持37字节

但是这个问题,也不是导致热插拔后不更新温度的原因,温度不来自vpd信息,而是来自地址为0x6A地址的system management data,dera给出的标准格式

你们这些信息有变更,NVMe带外管理命令的IIC地址是0x6A NVMe Basic Management Data Structure结构有变更嘛,我们温度寄存器是从这个表中offset第三个字节读的温度,第四个字节读的PDLU

温度信息和寿命信息,都来自0x6A地址,dera盘给出的信息是标准格式,没有改动

当前现象是多次热插拔后某一次热插拔不识别这些信息,但是从盘上能看到bmc在周期性的获取smd上的温度和寿命信息,只是无法正确显示

当前bmc的最新版本中,在sr文件中定义的默认设备温度,也是20度,看起来像主机端得到盘的真实温度,用了默认值替代

    "Average_DiskTemp": {
        "WindowSize": 3,
        "DefaultValue": 20
    },

看了下自发现加载的csr 数量不对,像是频繁插拔导致对象没有正确卸载/添加
这份csr 14140224_VPD_0.sr 加载了12个,但是这个connector只有5个

    │ ├─/bmc/kepler/Connector/Connector_ComVPD_01010201
    │ ├─/bmc/kepler/Connector/Connector_ComVPD_01010206
    │ ├─/bmc/kepler/Connector/Connector_ComVPD_01010207
    │ ├─/bmc/kepler/Connector/Connector_ComVPD_01010208
    │ ├─/bmc/kepler/Connector/Connector_ComVPD_0101020C

是不是bmc的老版本的逻辑问题呢?实际上我们在这次热插拔异常中,bmc上看到温度为固定20度的盘只有两张,其他10张是真实温度

实际一键收集中的硬盘温度看了下 没有20度的 是因为不是出问题时收集的日志吗
该问题能否复现, 能否在温度为20度的时候 一键收集下