更新Cpu目标值调速与预期不符

问题描述

热设计修改Cpu调速目标值,根据环境模式修改为OriginSmartCoolingTargetTemperature 属性中的60 70 80,但实际生效的目标值为修改前的85,75,85

为什么会修改不成功,还需要什么特殊配置吗

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

:white_check_mark: 总结与建议

项目 说明
:cross_mark: 为什么修改不成功? OriginSmartCoolingTargetTemperature 只是原始校验基准,不能自动更新运行时配置
:white_check_mark: 如何解决? 必须通过配置导入、Redfish API 或 SR 文件修改等方式显式更新 SmartCoolingTargetTemperature
:white_check_mark: 是否需要特殊权限? 是的,通常需要管理员权限或具备配置导入能力
:repeat_button: 是否掉电持久化? 是,通过 SR 或配置导入的方式修改后具有持久性

:light_bulb: 建议流程

  1. 更新 OriginSmartCoolingTargetTemperature 作为安全基准;
  2. 再执行配置导入,将 SmartCoolingTargetTemperature 显式设置为新值;
  3. 重启冷却服务或整机以确保加载新策略。
点击此处查看详细分析解答

CPU 目标值调速更新未生效的原因分析

根据您提供的问题描述和系统配置信息,当前 CPU 目标调速值未按预期更新为 OriginSmartCoolingTargetTemperature 中的 [60, 70, 80],而仍然沿用旧值 [85, 75, 85]。以下是对该问题的全面分析和解决建议。


:magnifying_glass_tilted_left: 问题核心:SmartCoolingTargetTemperature 未同步 OriginSmartCoolingTargetTemperature

:white_check_mark: 实际配置(当前生效)

SmartCoolingTargetTemperature = [85, 75, 85]
SmartCoolingTargetTemperatureCelsius = [85, 75, 85]

:white_check_mark: 期望目标(出厂默认 / 原始基准)

OriginSmartCoolingTargetTemperature = [60, 70, 80]

尽管您已将 原始智能冷却目标温度 更新为 [60, 70, 80],但 当前运行中的智能冷却策略仍使用旧值,说明配置未生效。


:puzzle_piece: 原因分析

1. :red_exclamation_mark: OriginSmartCoolingTargetTemperature校验基准值,不是自动生效值

  • OriginSmartCoolingTargetTemperature出厂预设或配置导入时的原始参考值,用于:
    • 验证新配置是否合法
    • 防止调速目标被设置得过低或过高
    • 支持配置回滚机制
  • 不会自动覆盖 SmartCoolingTargetTemperature 的运行时配置。
  • 来源依据(来自文档 chunk 3):

    “OriginSmartCoolingTargetTemperature为原始默认的智能调速阈值,该阈值会在导入SmartCoolingTargetTemperatureCelsius进行校验,新设置的值不能超过该值”


2. :red_exclamation_mark: SmartCoolingTargetTemperature 必须通过显式配置操作更新

  • 即使 OriginSmartCoolingTargetTemperature 已更改,运行中的 SmartCoolingTargetTemperature 必须通过以下方式之一手动更新
    • 配置导入(Configuration Import)
    • Redfish API 设置
    • SR 文件编译后刷写
  • 否则,系统将继续使用原有的 持久化配置值 [85, 75, 85]

:magnifying_glass_tilted_right: 参考用户 “wwhh” 在对话中的说明:

“SmartCoolingTargetTemperatureCelsius 可通过配置导入进行修改;OriginSmartCoolingTargetTemperature 为原始默认的智能调速阈值,该阈值会在导入 SmartCoolingTargetTemperatureCelsius 时进行校验,新设置的值不能超过该值”


3. :warning: 存在“值范围校验”机制,但方向是“防过低/过高”,不能“自动拉高”

  • 校验规则:SmartCoolingTargetTemperatureCelsius 新值 ≤ OriginSmartCoolingTargetTemperature 对应值?
    • 实际上是 防止用户配置超出原始范围(如设置过高导致过热,或过低导致风扇噪声过大)。
  • 但当前情况是:Origin 值变小了,而运行值更大 → 不违反校验规则,因此不会阻止旧值继续使用
  • 所以系统 没有强制更新的触发条件

:white_check_mark: 解决方案

要让新的 CPU 调速目标值 [60, 70, 80] 生效,必须显式更新 SmartCoolingTargetTemperature 配置。以下是几种可行方式:

:white_check_mark: 方案一:通过配置导入(Recommended)

  1. 准备一个包含以下字段的配置文件(JSON 或 SR 格式):
    {
      "SmartCoolingTargetTemperature": [60, 70, 80],
      "TargetTemperatureCelsius": 60
    }
    
  2. 使用 BMC 的 配置导入工具 导入该文件。
  3. 系统会校验新值是否 ≤ OriginSmartCoolingTargetTemperature(此处相等,合法),并通过。
  4. SmartCoolingTargetTemperature 将被更新并生效。

:white_check_mark: 优点:支持校验、安全、可审计
:warning: 注意:部分版本中需确保 CustomSupported=true


:white_check_mark: 方案二:使用 Redfish API 直接修改

如果系统开放了 Redfish 接口,可通过 PATCH 请求更新:

PATCH /redfish/v1/Chassis/1/ThermalMetrics
{
  "Oem": {
    "openUBMC": {
      "FanSpeedCustom": {
        "CPUTargetTemperatureCelsius": 60
      }
    }
  }
}

:warning: 注意:若值不在允许范围内(如 <50 或 >80),会返回 PropertyValueOutOfRange 错误。


:white_check_mark: 方案三:修改 SR 文件并重新编译刷写

  1. 找到对应的 .sr 配置文件(如 CoolingRequirement_1_20.sr)。
  2. 修改如下字段:
    SmartCoolingTargetTemperature = [60, 70, 80];
    
  3. 重新编译并刷写到 BMC。
  4. 重启或触发冷却模块重载。

:white_check_mark: 适用于固件级长期生效
:warning: 需要权限和构建环境


:pushpin: 验证是否生效的方法

方法一:查看 CSR 当前状态

%sprop CoolingRequirement_1_20_010101

确认输出中:

SmartCoolingTargetTemperature = [60, 70, 80]
SmartCoolingTargetTemperatureCelsius = [60, 70, 80]

方法二:检查日志 cooling_control.log

搜索关键词:

ReqId:20 ... TarT:60

表示目标温度已更新为 60°C(节能模式)。


:white_check_mark: 总结与建议

项目 说明
:cross_mark: 为什么修改不成功? OriginSmartCoolingTargetTemperature 只是原始校验基准,不能自动更新运行时配置
:white_check_mark: 如何解决? 必须通过配置导入、Redfish API 或 SR 文件修改等方式显式更新 SmartCoolingTargetTemperature
:white_check_mark: 是否需要特殊权限? 是的,通常需要管理员权限或具备配置导入能力
:repeat_button: 是否掉电持久化? 是,通过 SR 或配置导入的方式修改后具有持久性

:light_bulb: 建议流程

  1. 更新 OriginSmartCoolingTargetTemperature 作为安全基准;
  2. 再执行配置导入,将 SmartCoolingTargetTemperature 显式设置为新值;
  3. 重启冷却服务或整机以确保加载新策略。

如有更多上下文(如具体使用的 BMC 工具链或 Redfish 版本),可进一步提供精准操作命令。

85,75,85被持久化了
cd /data/trust/persistence
sqlite3 per_poweroff.db
select * from persist_table where table_name = ‘t_cooling_requirement’;

排查是否是做了配置导入导出或其他命令导致了持久化
还是代码有bug:
删除表后做下AC,bmc重启,升级等,再查询数据库看是否表t_cooling_requirement中有值

需要修改的数组不是OriginSmartCoolingTargetTemperature,而是SmartCoolingTargetTemperature

Origin在代码内部维护的,私有的咋个修改

删除表之后重启BMC还是会有值,SmartCoolingTargetTemperature是在VPD仓中的SR文件更新的,但环境中的值好像是被持久化了,

哪个命令删的表

@wwhh

  1. 使用的删除命令是什么?
  2. SmartCoolingTargetTemperatureCelsius为掉电持久化数据,框架机制为若存在掉电持久化数据,则以掉电持久化数据优先;

DELETE FROM persist_table WHERE table_name = ‘t_cooling_requirement’;

SmartCoolingTargetTemperatureCelsius为什么会为掉电持久化数据有什么历史背景吗,如果热设计变动了目标值客户的机器怎么修改

理论上出厂后数据值就应该保持不变,若需要,则通过配置导入进行对应的修改,并且通过配置导入修改的策略需支持自定义,否则无法修改。

你意思是执行了删除这个命令,再查询是空的,重启BMC,Smart这个又默认被持久化了,而且无法升级csr去改变?

是的

有什么历史背景吗,如果热设计想变动目标值没有办法修改是不是不太合理

无明确历史背景,设计之初考虑同一款机型不涉及后续变更,若需变更,则出厂时配套对应SR

你意思是执行了删除这个命令,再查询是空的,重启BMC,Smart这个又默认被持久化了,而且无法升级csr去改变?
@KunLun_lixiangyu 如果是这个现象,那是一个涉及数据库的很严重的问题,你确定没理解错吧。附下操作流程和截图呢

持久化类型数据是只有在数据变化才会写进数据库,SmartCoolingTargetTemperatureCelsius这个数据运行代码中只会读,不会设置,理应不被持久化,只在配置导入等调用了设置接口且存在属性变化才会写进数据库


好像是有问题哟



model.json有两个相似的属性
SmartCoolingTargetTemperatureCelsius
SmartCoolingTargetTemperature

csr普遍配置的是SmartCoolingTargetTemperature
初次代码都会走到图1的else,进行写操作赋值,就会写进数据库

升级csr改变的是SmartCoolingTargetTemperature
空白环境->SmartCoolingTargetTemperatureCelsius被写入,持久化–>更改SmartCoolingTargetTemperature后升级–>SmartCoolingTargetTemperature=数据库的SmartCoolingTargetTemperatureCelsius

影响:无法通过修改SmartCoolingTargetTemperature或SmartCoolingTargetTemperatureCelsius来配置Smart数组,只能通过配置导入导出来修改

已提issue