网卡传感器温度值从资源树同步的场景下网卡断电传感器数据不会更新问题分析
更新时间: 2026/05/28
在Gitcode上查看源码问题背景
- 单板类型:自研板;
- 软件版本:openubmc 25.09;
- 涉及功能:网卡温度值获取;
- 触发条件:下电后查看网卡温度传感器的温度值。
- 业务表现:预期温度值因下电而改变;实际下电后网卡温度值不变。
问题复现步骤
网卡断电后查看资源树上传感器的温度值与温度状态,发现不会产生跳变,仍是下电前的值.
关键日志信息
csr代码配置如下:
温度配置的是emits-change:
下电后web页面传感器温度值: 序号67的传感器从硬件直接读值,掉电后读取不到,所以显示-;序号68的传感器从资源树读值,掉电后保持掉电前的值。
定位过程
- 看配置的csr代码,同步语法表明,温度值的获取并未与上下电状态产生关联,资源树上的温度值与温度状态由于持久化,也就不会产生跳变,仍是下电前的值;
- 下电状态下温度传感器的温度值因持久化显示下电之前的值,考虑是否去掉持久化功能;经确认该持久化类型的处理可能影响的场景范围太大;
- 排查该网卡使用的协议,在代码中查看网卡下电后预期带外会获取失败,会将TemperatureStatus置为非0,这样会展示为-了,除非网卡支持standby,os下电网卡也可以回复报文,这样才不会设置TemperatureStatus;经确认网卡使用的ncsi协议,尝试添加日志打印以后发现,网卡更新温度和状态的函数在下电后并没有被再调用,导致依然显示持久化的数据;
- 经分析,网卡温度可以与网卡的上下电状态进行绑定;具体做法考虑将传感器的ReadingStatus属性与网卡的上下电状态用表达式关联,上电状态下显示实际获取的网卡温度值,下电状态下,显示固定温度值;尝试修改,测试,下电状态下温度值不再显示持久化数据;
问题原因
VPD组件中网卡的温度值/状态都是从资源树拿的,环境下电后网卡的资源树上属性不会变,所以导致下电后网卡温度值显示一个死值。
解决方案
从vpd修改温度状态表达式上解决问题,具体代码如下:
text
"ReadingStatus": "<=/::FruCtrl_1_0.PowerState;<=/NetworkAdapter_1.TemperatureStatus |> expr($1 == ‘OFF’ ? 1 : $2)"