OS下电后风扇转速过高问题分析
更新时间: 2026/05/28
在Gitcode上查看源码

问题背景

  • 单板类型:NA;
  • 软件版本:openUBMC 25.09;
  • 涉及功能:风扇调速;
  • 触发条件:OS上电、风扇转速正常(30%)的前提下,执行下电操作,大概两秒钟左右,因为一张PCIE卡的温度触发了异常调速。
  • 业务表现:预期风扇正常调速;实际OS下电后,风扇转速持续保持在80%,噪声过大。

问题复现步骤

OS上电、风扇转速正常(30%)的前提下,执行下电操作,大概两秒钟左右,因为一张PCIE卡的温度触发了异常调速,该调速策略配置如下: 从现象分析,下电后scanner先检测到电源状态,将状态设置为disable,触发异常调速,将风扇转速拉高。然后cooling组件才判断电源状态为off,终止调速,风扇就一直保持着高转速。

由此是否可以引申出下面的情况:当执行OS下电时,部分pcie卡可能先下电,导致温度获取异常,从而触发异常调速,然后cooling组件在下电完成后终止调速,导致风扇会一直保持高转速,产生很大的噪声,并且影响整机功耗。

关键日志信息

查看日志,确认报错如下:

定位过程

  1. 从如下log可以看出,当一个异常调速变为inValid时,虽然exp_speed_t表中删除了该异常调速,但是在通过PID获取PWM时,因为OS下电,导致PID读值为:66 0 0 6 64 0 255 255 0 0 86 255 255 0 0 86 255 255 0 0 86 255 255 0 0 86 255 255 0 0 86 255 255 0 0 86 255 255 0 0 86 255 255 0 0 86 255 255 0 0 86 255 255 0 0 86 255 255 0 0 86 255 255 0 0 86,导致调速的fan_table为空,进而导致设置pwm失败:cooling_mgmt.lua(1001): Set fan pwm failed, fan_table:nil。

  2. 经确认,在风扇支持standby的情况下,需要至少有一个CoolingRequirement将ActiveInStandby设置为true,用来给PID提供温度点,否则就会出现PID返回所有fanid为255的情况,进而导致没有转速可以下发。

问题原因

经确认,在风扇支持standby的情况下,需要至少有一个CoolingRequirement将ActiveInStandby设置为true,用来给PID提供温度点,否则就会出现PID返回所有fanid为255的情况,进而导致没有转速可以下发。

解决方案

在风扇支持standby的情况下,需要至少有一个CoolingRequirement将ActiveInStandby设置为true。