调速策略适配指导
更新时间: 2025/12/12
在Gitcode上查看源码

引言

在现代服务器系统中,散热控制是确保硬件稳定运行、延长设备寿命和提高能源效率的关键技术。随着高性能计算组件(如多核CPU、GPU加速卡)的广泛应用,服务器的热设计和散热控制变得越来越复杂和重要。

本文档将详细介绍openUBMC的调速策略适配指导,主要介绍风冷散热系统的调速策略。


散热系统组成

服务器散热系统通常由以下组件构成:

  • 热源:产生热量的硬件组件,如CPU、GPU、内存、硬盘、电源等
  • 散热介质:传递热量的物质,如空气、液体(水或制冷剂)
  • 散热设备:
    • 散热片(Heat Sink):增大散热面积
    • 风扇(Fan):提供强制 airflow
    • 热管(Heat Pipe):快速传递热量
    • 液冷系统:循环液体带走热量
  • 温度传感器:监测关键组件温度
  • 控制单元:根据温度数据调整散热设备运行状态

散热工作原理

散热系统的基本工作原理是通过热传导、对流和辐射三种方式将热量从热源传递到外部环境:

  • 热传导:热量通过固体材料(如金属散热片)传递
  • 热对流:热量通过流体(空气或液体)流动传递
  • 热辐射:热量以电磁波形式直接散发

在服务器系统中,主要依靠热传导和强制对流来实现高效散热。


openUBMC常用风扇调速技术

PWM调速(Pulse Width Modulation)

  • 原理:通过改变脉冲宽度调制信号的占空比来控制风扇转速
  • 特点:调速范围宽(通常20%-100%),效率高,噪音低
  • 接口:通常使用4Pin风扇接口
  • 工作电压:保持12V恒定,通过PWM信号(通常25kHz频率)控制转速

一般情况下,风扇转速与PWM占空比呈线性关系:

txt
风扇转速 = 最大转速 × PWM占空比

例如:

  • 当PWM占空比为50%时,风扇转速约为最大转速的50%,实际上,大多风扇的占空比和转速比存在一定偏差
  • 当PWM占空比为100%时,风扇转速达到最大值

散热控制策略

基于阈值的控制策略

这是最常用的散热控制策略,根据温度传感器的读数与预设阈值比较来调整风扇转速:

  • 单阈值控制:当温度超过阈值时,风扇逐渐增加转速,直到全速运行;低于阈值时,风扇低速运行,对应目标调速
  • 多阈值分段阶梯控制:设置多个温度阈值和对应的风扇转速等级,对应区间调速的台阶式调速,对应代码中“TemperatureRangeLow”和“TemperatureRangeHigh”的区间对应值相同,在调速策略中,该方式较目标调速复杂,但调速精准性提高很多
  • 多阈值分段线性控制:设置多个温度阈值和对应的风扇转速等级,对应区间调速的线性调速,对应代码中“TemperatureRangeLow”和“TemperatureRangeHigh”的区间对应值不同,该方式调速较为复杂,很多转速点依赖代码计算,风扇转速较前两种更平滑,不易出现转速忽高忽低的情况

示例:

温度范围(℃)风扇转速(%)
<= 4020
40-5040
50-6060
60-7080
> 70100

PID控制策略

openUBMC的调速策略都会给到PID调速库,PID调速库根据各种调速策略计算出生效的PWM占空比,最终输出到风扇控制器,控制风扇转速。


散热控制对象

散热控制对象关系

调速对象主要有:

  • CoolingConfig:cooling模块全局配置,包含风扇转速设置范围、BMC启动初始转速等,CoolingConfig必须配置在PSR,不能重复加载
  • CoolingArea:主要用于将CoolingRequirement、CoolingPolicy、CoolingFan(风扇对象)对象关联起来,该配置描述了一个温度点调速需要哪几个风扇参与,也描述了温度点关联哪些环温调速曲线,CoolingArea必须配置在PSR,不能重复加载
  • CoolingRequirement:一个温度点对应一个CoolingRequirement对象,用于关联硬件温度和配置目标调速策略
  • CoolingPolicy:用于承载cooling模块的策略配置,包含策略名称、预期生效条件、实际生效条件、温度区间、转速区间等,CoolingPolicy为线性调速策略对象,一个CoolingPolicy对象代表一条环温曲线,每个温度点可能关联0个或多个CoolingPolicy对象,取计算出的转速最大值下发,删除CoolingPolicy需要在对应CoolingArea的PolicyIdxGroup里面删除对应的PolicyIdx,CoolingArea必须配置在PSR,不能重复加载
  • AbnormalFan:异常调速风扇对象,用于描述异常状态下的风扇转速、异常类型、关联的CoolingFan、触发异常后,参与异常转速调速的风扇Id等
  • BasicCoolingConfig:配置多个风扇组之间转速差容忍区间、PSU风扇的转速校准等
  • FanGroup:风扇组对象,用于描述风扇槽位号列表、风扇组ID等
  • FanGroupPolicy:风扇组策略对象,用于描述风扇组之间的转速差容忍区间、异常调速策略等

json
{
    "CoolingConfig_Basic": {  // CoolingConfig类通常不配置在板卡的配置文件中,不能重复加载
        "SmartCoolingState": "Enabled",  // 智能调速是否启用,取值范围"Enabled","Disabled"
        "SmartCoolingMode": "EnergySaving",  // 智能调速模式,取值范围"EnergySaving","HighPerformance","LowNoise","Custom","LiquidCooling"
        "LevelPercentRange": [20, 100],  // 手动设置转速级别(百分比)允许的范围,样例中为调速范围为20-100
        "InitLevelInStartup": 100,  // 启动时默认调速等级,取值范围0-100
        "DiskRowTemperatureAvailable": false,  // 硬盘温度是否可获取
        "SysHDDsMaxTemperature": 80.0,  // HDD硬盘最大温度阈值
        "SysSSDsMaxTemperature": 80.0,  // SSD硬盘最大温度阈值
        "SensorLocationSupported": false,  // 是否支持温度海洋界面
        "FanBoardNum": 1,  // 含有调速风扇的风扇板个数(多风扇板机型需要配置,默认值为1)
        "MinimalLevel": 20,  // 最小转速级别(百分比),取值范围0-100
        "MaximalLevel": 100  // 最大转速级别(百分比),取值范围0-100
    },
    "CoolingPolicy_EnergySaving": {  // 线性调速策略需要配置在PSR中,不能重复加载,若配置了PCIeCardName、HDDBackPlaneName、FanType多个条件,需每个条件都满足,该Policy才生效;即环境插入了PCIeCardName中的网卡之一(若配置了PCIeCardName),环境加载了HDDBackPlaneName中的硬盘背板之一(若配置了HDDBackPlaneName),环境的风扇类型包含FanType中的类型之一(若配置了FanType)
        "PolicyIdx": 6,  // 线性调速策略Id,PolicyIdx必须全局唯一
        "ExpCondVal": "EnergySaving",  // 预期生效条件,CoolingPolicy生效前提是实际条件与期望条件一致,取值范围"EnergySaving","HighPerformance","LowNoise","Custom","LiquidCooling"
        "ActualCondVal": "<=/CoolingConfig_1.SmartCoolingMode",  // 实际生效条件,取值范围"EnergySaving","HighPerformance","LowNoise","Custom","LiquidCooling"
        "TemperatureRangeLow": [-127, 20, 30, 40, 50],  // 线性调速策略温度区间低门限
        "TemperatureRangeHigh": [20, 30, 40, 50, 127],  // 线性调速策略温度区间高门限,线性调速策略温度区间为左闭右开
        "SpeedRangeLow": [20, 32, 70, 100],  // 线性调速策略转速区间低门限
        "SpeedRangeHigh": [20, 32, 70, 100],  // 线性调速策略转速区间高门限
        "FanType": ["02314BLG 8038+"],  // 风扇类型列表,环境风扇类型为列表之一时,风扇条件生效
        "HDDBackPlaneName": ["BC83NHBF"],  // 关联的PCIe卡名称该列表中,环境插入了该列表中网卡之一时,网卡条件生效
        "PCIeCardName": ["SF200HT"]  // 硬盘背板名称列表,环境有该列表中背板之一时,背板条件生效
    },
    "CoolingRequirement_1_7": {
        "RequirementId": 7,  // 目标调速策略Id,Id必须全局唯一,当前Id支持有效16位,前8位baseid,后8位槽位号,如服务器可能加载多次同一个sr文件,可用类似配置"${Slot} |> expr((58 << 8) | $1)",不支持配置为同步属性
        "TemperatureType": 11,  // 目标调速温度点类型,1:Cpu 2:Outlet 3:Disk 4:Memory 5:PCH 6:VRD 7:VDDQ 8:NPUHbm 9:NPUAiCore 10:NPUBoard 11:Inlet 12:SoCBoardOutlet 13:SoCBoardInlet
        "MonitoringStatus": "<=/Scanner_Lm75_Inlet.Status",  // 温度点传感器状态,0:正常 1:异常
        "MonitoringValue": "<=/Scanner_Lm75_Inlet.Value;<=/Scanner_Lm75_Inlet.Value |> expr((($1 + 5) > ($2 - 10)) ? ($1 + 5) : ($2 - 10))",  // 参与调速的温度值
        "FailedValue": 80,  // 温度状态异常后的异常调速转速,不配代表不触发异常调速;如果配置了值,温度点读取失败的时候,异常调速会固定下发这个转速值
        "TargetTemperatureCelsius": 50,  // 当前调速目标值, PID会基于当前温度点的温度值和目标温度值进行转速计算,该属性为持久化属性,不能配置为同步或引用
        "MaxAllowedTemperatureCelsius": 60,  // 目标调速满转温度,当前温度点达到该温度则触发满转,该属性为持久化属性,不能配置为同步或引用
        "TargetTemperatureRangeCelsius": [  // 自定义温度允许范围,用于自定义目标值时的合法性判断
            40,
            60
        ],
        "SmartCoolingTargetTemperature": [  // EnergySaving/HighPerformance/LowNoise 三种模式下的目标温度值,可不配置
            50,
            47,
            53
        ],
        "CustomSupported": true,  // 是否支持自定义目标温度值,true:支持,false:不支持
        "CustomTargetTemperatureCelsius": 50,  // 用户自定义温度值,255为无效值
        "SensorName": "#/ThresholdSensor_InletTemp.SensorName",  // 传感器名称
        "ActiveInStandby": false,  // 是否在待机状态下生效
        "Enabled": "<=/CoolingRequirement_1_6.MonitoringStatus > expr($1 == 0 ? true : false)",  // 是否生效,可关联其他CoolingRequirement的状态,支持条件表达式
        "CoolingMedium": "Air",  // 冷却介质类型,取值范围"Air","Liquid"
        "LiquidFailedValue": 0,  // 液体冷却介质下,温度状态异常后的异常调速转速,不配代表不触发异常调速;如果配置了值,温度点读取失败的时候,异常调速会固定下发这个转速值
        "IsBackupRequirement": false,  // 是否为备份策略
        "BackupRequirementIdx": 0,  // 备份策略Id,IsBackupRequirement为true时必填
        "ObtainTempFaildToValid": false  // 温度点读取失败时生效该策略
    },
    "CoolingArea_1_25": {  // oolingArea主要用于将CoolingRequirement、CoolingPolicy、CoolingFan(风扇对象)对象关联起来,该配置描述了一个温度点调速需要哪几个风扇参与,也描述了温度点关联哪些环温调速曲线,如果新增了CoolingRequirement,则需要增加对应的CoolingArea对象,若CoolingArea不参与调速,则PolicyIdxGroup和LiquidCoolingDeviceGroup默认配置为空即可,CoolingArea必须配置在PSR,不能重复加载
        "AreaId": 25,  // 调速域ID,用不同的AreaId来区分不同调速区域
        "RequirementIdx": 25,  // 目标调速策略ID,用来区分不同目标调速策略
        "PolicyIdxGroup": [1,2],  // 线性调速策略ID组,用来记录不同线性调速策略
        "FanIdxGroup": [  // 调速域风扇组,用来记录参与该区域调速的风扇id,风扇Id必须按数字由小到大顺序配置
            1,
            2,
            3,
            4
        ]
    },
    "CoolingFan_1": {
        "FanId": 1,  // 风扇ID,通常配置为风扇的槽位号,当有多个风扇板时,风扇id不能相同
        "FrontPresence": "<=/Fan_1.FrontPresence",  // 前转子在位状态:1:在位;0:不在位
        "FrontStatus": "<=/Fan_1.FrontStatus",  // 前转子状态:1:异常;0:正常
        "RearPresence": "<=/Fan_1.RearPresence",  // 后转子在位状态:1:在位;0:不在位
        "RearStatus": "<=/Fan_1.RearStatus",  // 后转子状态:1:异常;0:正常
        "HardwarePWM": "#/Accessor_Fan1_PWM.Value",  // 风扇硬件占空比
        "MaxSupportedPWM": 255,  // 最大支持转速
        "Slot": 1  // 槽位号
    },
    "BasicCoolingConfig": {
     "FanGroupSpeedDiffThresholdPercent": 25,  // 两个分区间的转速差容忍区间,即转速差不超过25%
     "PsuFanSpeedCalibration": 5 // psu风扇转速校准值,即psu风扇转速按照+5%下发,无psu风扇则不配置改属性
    },
    "FanGroup_1": {
      "Id":1,  // 风扇组ID,用于区分不同的风扇组
      "FanSlots": [1, 2]  // 风扇组包含的风扇槽位号列表
    },
    "FanGroupPolicy_1": {  
      "Id": 1,  // 风扇组策略ID
      "PolicyType": 2, // 策略类型:1:FanGroupIds中各风扇组之间的转速差不超过SpeedPercentDifference; 2:FanGroupIds中各风扇组的转速比RelativeGroupIds的转速高至少SpeedPercentDifference
      "FanGroupIds": [1],  // 风扇组ID列表
      "RelativeGroupIds": [2],  // 关联的风扇组ID列表
      "SpeedPercentDifference": 20  // 两个组间的转速差容忍区间,即转速差不超过20%
    },
    "AbnormalFan_1": {
        "Id": 1,  // 异常调速ID
        "FanIdx": 1,  // 关联的CoolingFan的索引
        "Status": "AbnormalRotation", // AbnormalRotation、NotInPosition,如需要两种则配置2个AbnormalFan对象,每个对应一种类型
        "FanGroup": [1, 2, 3, 4],  // 异常调速生效的风扇组
        "SpeedPercentage": 80  // 异常调速的转速百分比,为0则表示异常时不进行调速
    }
}

主要调速方式

目标调速

目标调速是指根据用户设置的目标温度,通过调整风扇转速来实现温度控制。目标调速通常用于服务器等需要严格控制温度的场景。

以该需求为例,出风口目标调速,目标温度45,全速阈值60,节能、高性能、低噪模式下目标温度分别为50,47,53。当传感器失效时,所有风扇转速设定80%,配置如下

json
{
        "CoolingRequirement_1_7": {
            "RequirementId": 7,  // Id必须全局唯一,当前Id支持有效16位,前8位baseid,后8位槽位号,如服务器可能加载多次同一个sr文件,如网卡、PCIE卡、硬盘等,可用类似配置"${Slot} |> expr((58 << 8) | $1)",不支持配置为同步属性
            "TemperatureType": 2,  // 目标调速温度类型为出风口
            "MonitoringStatus": "<=/Scanner_Lm75_Outlet.Status",  // 同步Scanner_Lm75_Outlet的状态
            "MonitoringValue":"<=/Scanner_Lm75_Outlet.Value",  // 同步Scanner_Lm75_Outlet的值
            "FailedValue": 80,  // 温度状态异常后的异常调速转速为80%
            "TargetTemperatureCelsius": 45,  // 目标温度为45摄氏度
            "MaxAllowedTemperatureCelsius": 60,  // 温度大于等于60摄氏度时触发满转
            "SmartCoolingTargetTemperature": [50, 47, 53],  // 节能、高性能、低噪三种模式下的目标值温度分别为50、47、53
            "SensorName": "#/ThresholdSensor_OutletTemp.SensorName"
        },
        "CoolingArea_1_7": {
            "AreaId": 7,
            "RequirementIdx": 7,
            "PolicyIdxGroup": [],
            "FanIdxGroup": [1, 2, 3, 4]
        }
}

线性调速

线性调速是指根据温度与目标温度的偏差,通过线性公式计算所需风扇转速。线性调速通常用于需要平滑调整风扇转速的场景。目前opemUBMC主要支持阶梯式线性调速和折线式线性调速。

  • 线性调速温度区间为左闭右开
  • 阶梯式调速如下面的例子中温度范围[-127, 20) 转速范围为[30, 30]
  • 折线式调速以下面的配置为例,温度范围[-127, 20) 转速范围修改为类似[20, 30]即为折线式调速
  • CoolingPolicy对象若配置了ExpCondVal 、PCIeCardName、HDDBackPlaneName、HDDRearBackPlaneName、FanType多个条件,需每个条件都满足,该Policy才生效
json
{
    "CoolingRequirement_1_6": {
        "RequirementId": 6,
        "TemperatureType": 11,  // 温度类型为入风口
        "MonitoringStatus": "<=/Scanner_Lm75_Inlet.Status",
        "MonitoringValue": "<=/Scanner_Lm75_Inlet.Value",
        "FailedValue": 80,
        "BackupRequirementIdx": 8,  // 该温度点的备用温度点Id为8
        "SensorName": "#/ThresholdSensor_InletTemp.SensorName"  // 该温度点关联的传感器名称
    },
    "CoolingRequirement_1_8": { // 备用温度点
        "RequirementId": 8,
        "MonitoringStatus": "<=/Scanner_FanBrdTemp.Status",
        "MonitoringValue": "<=/Scanner_FanBrdTemp.Value",
        "IsBackupRequirement": true,
        "SensorName": "#/ThresholdSensor_FanBoardTemp.SensorName"
    },
    "CoolingArea_1_6": {
        "AreaId": 6,
        "RequirementIdx": 6,  // 该调速区域关联的温度点(CoolingRequirement)Id为6
        "PolicyIdxGroup": [6, 7],  // 该调速区域关联的调速策略(CoolingPolicy)Id为6、7
        "FanIdxGroup": [1, 2, 3, 4]
    },
    "CoolingPolicy_1_6": {
        "PolicyIdx": 6,
        "ExpCondVal": "EnergySaving",  // 调速策略预期生效的条件为节能模式
        "ActualCondVal": "<=/CoolingConfig_1.SmartCoolingMode",  // 实际的模式
        "Hysteresis": 1,  // 迟滞量,温度过高触发风扇满转后,当温度降到MaxAllowedTemperature减Hysteresis以下时,风扇退出满转调速状态
        "TemperatureRangeLow": [  // 线性调速策略温度区间左值
            -127, 20, 30, 40
        ],
        "TemperatureRangeHigh": [  // 线性调速策略温度区间右值
            20,  30, 40, 127
        ],
        "SpeedRangeLow": [  // 线性调速策略转速区间左值
            30, 50, 80, 100
        ],
        "SpeedRangeHigh": [  // 线性调速策略转速区间右值
            30, 50, 80, 100
        ],
        "FanType": [],
        "HDDBackPlaneName": [], 
        "HDDRearBackPlaneName": [],
        "PCIeCardName": []
    }
}

异常调速

  • 当温度获取异常时,会触发异常调速,转速为CoolingRequirement对象配置的FailedValue值,部分调速不建议增加异常调速,如光模块温度
  • 风扇状态为AbnormalRotation时,会触发异常调速,转速为AbnormalFan对象配置的SpeedPercentage值
  • 风扇状态为NotInPosition时,会触发异常调速,转速为AbnormalFan对象配置的SpeedPercentage值
json
{
    "CoolingRequirement_1_6": {
        "RequirementId": 6,
        "TemperatureType": 11,  // 温度类型为入风口
        "MonitoringStatus": "<=/Scanner_Lm75_Inlet.Status",
        "MonitoringValue": "<=/Scanner_Lm75_Inlet.Value",
        "FailedValue": 80,  // 温度状态异常后的异常调速转速为80%
        "BackupRequirementIdx": 8,  // 该温度点的备用温度点Id为8
        "SensorName": "#/ThresholdSensor_InletTemp.SensorName"  // 该温度点关联的传感器名称
    },
    "AbnormalFan_1": {
        "Id": 1,
        "FanIdx": 1,
        "Status": "AbnormalRotation", // AbnormalRotation、NotInPosition
        "FanGroup": [1, 2, 3, 4],
        "SpeedPercentage": 80  // 异常调速的转速百分比,为0则表示异常时不进行调速
    }
}

分区调速

多个风扇按区域管理,不同区域调速可以不同,常见的场景如风扇1,2主要负责CPU1的散热,风扇3,4主要负责CPU2的散热。

每个风扇区域的温度点和策略关联,不同区域的温度点和策略可以不同。

不同区域的风扇转速差异不能超过FanGroupSpeedDiffThresholdPercent配置的百分比。

json
{
    "BasicCoolingConfig": {
        "FanGroupSpeedDiffThresholdPercent": 20,  // 两个分区间的转速差容忍区间,即转速差不超过20%
        "PsuFanSpeedCalibration": 5  // psu风扇转速校准值
    },
    "FanGroup_1": {
        "Id":1,  // 风扇组ID,用于区分不同的风扇组
        "FanSlots": [1, 2]  // 风扇组包含的风扇槽位号列表,常见的如4个风扇分2个风扇组,8个风扇分2个风扇组等
    },
    "FanGroup_2": {
        "Id":2,
        "FanSlots": [3, 4]
    }
}

分组调速

分组调速和分区调速类似,但也有些不同,多用于多风扇板场景,不同分组的风扇转速不同。

json
{
    "FanGroupPolicy_1": {
        "Id": 1,
        "PolicyType": 2,  // 策略类型:1:FanGroupIds中各风扇组之间的转速差不超过SpeedPercentDifference; 2:FanGroupIds中各风扇组的转速比RelativeGroupIds的转速高至少SpeedPercentDifference
        "FanGroupIds": [1],
        "RelativeGroupIds": [2],
        "SpeedPercentDifference": 20
    },
    "FanGroup_1": {
        "Id":1,
        "FanSlots": [1, 2, 3, 4]
    },
    "FanGroup_2": {
        "Id":2,
        "FanSlots": [5, 6, 7, 8]
    }
}

standby调速

standby调速,配置CoolingRequirement对象的ActiveInStandby属性为true即为支持standby调速。常用于DPU卡等在OS下电后仍需保持正常工作,且无辅助散热的情况下,自身散热片等散热无法满足散热需求的场景,该场景需要服务器支持在下电后仍能保持某些板卡,如DPU卡、发热较大的OCP卡等正常工作。

json
{
    "CoolingRequirement_1_2": {
        "RequirementId": 2,
        "Description": "xxx",
        "MonitoringStatus": "<=/DPUCard_1.Inlet1TemperatureCelsius |> expr(($1 == 32767) ? 1 : 0)",
        "MonitoringValue": "<=/DPUCard_1.Inlet1TemperatureCelsius |> expr(($1 == 0 || $1 > 200) ? 40 : ($1 & 255))",
        "FailedValue": 80,
        "TargetTemperatureCelsius": 55,
        "MaxAllowedTemperatureCelsius": 65,
        "ActiveInStandby": true,  // ActiveInStandby配置为true表示支持standby调速
        "SensorName": "#/ThresholdSensor_XX.SensorName"
    },
    "CoolingArea_1_2": {
        "AreaId": 2,
        "RequirementIdx": 2,
        "PolicyIdxGroup": [],
        "FanIdxGroup": [
            1,
            2,
            3,
            4
        ]
    }
}

调试策略调试

新增调速策略后,如果要验证调速策略的效果,建议把环境中其它调速策略全部禁用,只保留新增的策略,然后再模拟不同的温度验证。

1、目标调速常用调试方法:
查询所有的CoolingRequirement对象:

txt
mdbctl lsobj CoolingRequirement

模拟设置所有的CoolingRequirement对象目标温度为0,等同于禁用该调速策略:

txt
mdbctl setprop set CoolingRequirement_xx bmc.kepler.Systems.CoolingRequirement TargetTemperatureCelsius 0

测试完毕后,恢复所有的CoolingRequirement对象的目标温度:

txt
mdbctl setprop unset CoolingRequirement_xx bmc.kepler.Systems.CoolingRequirement TargetTemperatureCelsius

2、线性调速速常用调试方法:
查询所有的CoolingRequirement对象:

txt
mdbctl lsobj CoolingPolicy

模拟设置所有的CoolingPolicy对象生效状态为不生效,禁用该调速策略:

txt
mdbctl setprop set CoolingPolicy_xx bmc.kepler.Systems.CoolingPolicy IsValid 0

测试完毕后,恢复所有的CoolingPolicy对象的生效状态:

txt
mdbctl setprop unset CoolingPolicy_xx bmc.kepler.Systems.CoolingPolicy IsValid

PS:测试时可自己写脚本一次禁用所有调速策略,测试完毕后再恢复。


常见问题

1、无法确认配置的调速策略是否生效
->按上文介绍的方法禁用所有非待测试的调速策略。
->模拟待测试调速策略的不同的温度。
->查看log,确认待测试策略是否生效。


2、预期的风扇转速和实际的风扇转速存在偏差
说明:BMC控制风扇调速通常是设置占空比给风扇,风扇根据占空比提供散热,实际的风扇转速比和占空比并不相同,有些风扇的占空比和转速之前的关系并不是一个平滑的直线,BMC只能决定风扇的占空比,实际的转速需要查询风扇规格书确认。


3、调速策略不生效

  • 检查对应的CoolingRequirement对象RequirementId是否重复
  • 检查对应的CoolingRequirement对象配置是否正确,如TargetTemperatureCelsius、MaxAllowedTemperatureCelsius等
  • 检查对应的CoolingPolicy对象PolicyIdx是否重复
  • 检查对应的CoolingPolicy对象配置是否正确,ActualCondVal和ExpCondVal是否匹配,FanType、HDDBackPlaneName、PCIeCardName是否配置且是否同时匹配
  • 检查对应的CoolingPolicy对象TemperatureRangeLow,TemperatureRangeHigh,SpeedRangeLow,SpeedRangeHigh配置属性的数量是否一致,且数据合理