电源策略--主备模式没有起作用

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

问题描述

920模组的鲲鹏服务器配置两个长城的电源,在web下配置Active/Standby,但是从power_mgmt看没有调用对用的set mode的函数

环境信息

软件版本:如 OpenUBMC1230

重现步骤

  1. PSR 配置

     "PowerStrategy_1": {
         "PowerWorkingMode": "LoadBalancing",
         "PowerLimitValue": 9999,
         "PowerLimitEnabled": false,
         "PowerLimitFailed": false,
         "PSUsOutputVoltageLow": false,
         "RedundancyFailure": true,
         "PowerLimitActivated": false,
         "PowerCappingSupported": true,
         "PowerLimitExceptionSupported": true,
         "DeepSleepSupported": true,
         "ActiveStandbySupported": true,
         "NormalAndRedundancySupported": false
     },
    
  2. web设置

  3. strategy 数据
    lsprop PowerStrategy_1_010104
    bmc.kepler.Object.Properties
    ClassName=“PowerStrategy”
    ObjectIdentifier=[1,“1”,“1”,“010104”]
    ObjectName=“PowerStrategy_1_010104”
    TraceSamplingRate=0
    bmc.kepler.Systems.PowerStrategy
    ActiveStandbySupported=true
    DeepSleep=“Disabled”
    DeepSleepSupported=true
    EnergyEfficiencyOptimizationSupported=false
    EnergySavingSupported=true
    ExpectedActivePSU=[1]
    HighPowerThresholdWatts=4000
    MaxPowerLimitInWatts=4000
    MinPowerLimitInWatts=8000
    NormalAndRedundancy=“Disabled”
    NormalAndRedundancySupported=false
    PSUsOutputCurrentImbalance=false
    PSUsOutputVoltageLow=false
    PSUsUnavailableOfflineCause=0
    PowerActualWorkingMode=“LoadBalancing”
    PowerCappingControlMode=0
    PowerCappingFailureOptions=[“LogEventOnly”,“NoAction”,“HardPowerOff”,“Reset”]
    PowerCappingSupported=true
    PowerLimitActivated=false
    PowerLimitEnabled=true
    PowerLimitException=“NoAction”
    PowerLimitExceptionLogEvent=true
    PowerLimitExceptionSupported=true
    PowerLimitFailed=false
    PowerLimitMode=“Proportion”
    PowerLimitValue=500
    PowerLimitWhenSteady=true
    PowerPredictSupported=true
    PowerWorkingMode=“Active/Standby”
    PresetLimitInWatts=9999
    RedundancyFailure=true
    RedundancyMode=0
    WorkModeConfigurable=true
    Private
    AllowableMinPowerLimitInWatts=8000
    CapLowerThresholdPercent=0
    CapStopThresholdPercent=0
    CapUpperThresholdPercent=0
    CustomPSActiveStandby=false
    ExpectedActivePSUList=“”
    Id=0
    IsSupportPowerLimitMode=true
    PSActiveStandbyMaxLevel=75
    PSActiveStandbyMinLevel=65
    PowerCappingDevices=[“CPU”,“NPU”]
    ReviseParam=1.1
    iRMHeartBeatTime=0

  4. OnePower 状态
    lsprop OnePower_0_010108
    bmc.kepler.Chassis.PowerSubsystem.Capacitor
    DepthOfDischargeVolts=0
    HardwareVersion=“”
    PowerState=“N/A”
    VOUTDebounceMilliseconds=0
    bmc.kepler.Chassis.PowerSubsystem.Capacitor.Metrics
    CapacityMicrofarads=0
    bmc.kepler.Chassis.PowerSubsystem.PowerSupply.Metrics
    EnergyApparentkVAh=0
    EnergyLifetimekWh=0
    EnergyReactivekVARh=0
    EnergySensorResetTime=“”
    EnergykWh=0
    InputCurrentAmpsCrestFactor=0
    InputCurrentAmpsTHDPercent=0
    InputPowerWattsApparentVA=0
    InputPowerWattsPhaseAngleDegrees=0
    InputPowerWattsPowerFactor=0
    InputPowerWattsReactiveVAR=0
    InputVoltageCrestFactor=0
    OutputPowerWattsApparentVA=0
    OutputPowerWattsPhaseAngleDegrees=0
    OutputPowerWattsPowerFactor=0
    OutputPowerWattsReactiveVAR=0
    bmc.kepler.Chassis.PowerSubsystem.PowerSupply.OutputControl
    OutputPowerLimitWatts=0
    bmc.kepler.Object.Properties
    ClassName=“OnePower”
    ObjectIdentifier=[1,“1”,“”,“010108”]
    ObjectName=“OnePower_0_010108”
    TraceSamplingRate=0
    bmc.kepler.Systems.PowerMgmt.OnePower
    DMTFPowerSupplyType=4
    DeepSleepStandbyPowerWatts=65535
    DeviceLocator=“PSU1”
    FirmwareVersion=“1.000”
    InputVoltageType=0
    IsPartOfSysPower=true
    LineInputVoltageType=“Unknown”
    Manufacturer="Great Wall "
    Model="CRPS2000D2 "
    PartNumber=“CRPS2000D2 "
    Position=“EXU”
    PowerSupplyChannel=0
    PowerSupplyType=1
    Presence=1
    ProductionDate=“230915”
    Protocol=“pmbus”
    RedundancyGroupId=0
    RelaySwitchedCount=0
    SerialNumber=“2N070047640 "
    SlotNumber=1
    SourceType=1
    TotalRunningHours=0
    WorkMode=“Enabled”
    bmc.kepler.Systems.PowerMgmt.OnePower.EfficiencyCurve
    EfficiencyCurve=
    PowerLevel=“N/A”
    bmc.kepler.Systems.PowerMgmt.OnePower.Metrics
    InputCurrentAmps=0.41
    InputFrequencyHz=0
    InputPowerWatts=92
    InputVoltage=232
    OutputCurrentAmps=5.41
    OutputPowerWatts=66
    OutputVoltage=12.379
    Rate=2000
    RatedCurrentAmps=0
    bmc.kepler.Systems.PowerMgmt.OnePower.Status
    BackupCircuitVINStatus=255
    CMLStatus=192
    CommunicationStatus=0
    DeepSleepEnabled=0
    DualInputVoltageStatus=0
    EquipmentMode=255
    Failure=0
    Fan1Fault=0
    Fan2Fault=0
    FanFault=0
    Health=0
    InputVoltageFault=0
    InputVoltageStatus=0
    IsUpgrading=false
    LossOfInput=0
    MainCircuitVINStatus=255
    MfrSpecificStatus=1
    NormalAndRedundancySupported=false
    OtherStatus=0
    OutputCurrentFault=0
    OutputState=1
    OutputVoltageFault=0
    OverTemperature=0
    ScanStatus=7
    SleepMode=””
    TPSUStatusHigh=0
    TPSUStatusLow=0
    bmc.kepler.Systems.PowerMgmt.OnePower.Temperatures
    EnvTemperatureCelsius=26
    InletTemperatureCelsius=0
    InnerTemperatureCelsius=0
    PrimaryChipTemperatureCelsius=35
    SecondaryChipTemperatureCelsius=36
    Private
    AlarmStatus=0
    InputState=1
    PhysicalInterface=“pmbus”
    PreAlarmStatus=0
    RefFrudata=“FruData_Ps_010108”
    RefSMCChip=
    UnsupportedProperties=
    UpgradeSupported=true

lsprop OnePower_0_010109
bmc.kepler.Chassis.PowerSubsystem.Capacitor
DepthOfDischargeVolts=0
HardwareVersion=“”
PowerState=“N/A”
VOUTDebounceMilliseconds=0
bmc.kepler.Chassis.PowerSubsystem.Capacitor.Metrics
CapacityMicrofarads=0
bmc.kepler.Chassis.PowerSubsystem.PowerSupply.Metrics
EnergyApparentkVAh=0
EnergyLifetimekWh=0
EnergyReactivekVARh=0
EnergySensorResetTime=“”
EnergykWh=0
InputCurrentAmpsCrestFactor=0
InputCurrentAmpsTHDPercent=0
InputPowerWattsApparentVA=0
InputPowerWattsPhaseAngleDegrees=0
InputPowerWattsPowerFactor=0
InputPowerWattsReactiveVAR=0
InputVoltageCrestFactor=0
OutputPowerWattsApparentVA=0
OutputPowerWattsPhaseAngleDegrees=0
OutputPowerWattsPowerFactor=0
OutputPowerWattsReactiveVAR=0
bmc.kepler.Chassis.PowerSubsystem.PowerSupply.OutputControl
OutputPowerLimitWatts=0
bmc.kepler.Object.Properties
ClassName=“OnePower”
ObjectIdentifier=[1,“1”,“”,“010109”]
ObjectName=“OnePower_0_010109”
TraceSamplingRate=0
bmc.kepler.Systems.PowerMgmt.OnePower
DMTFPowerSupplyType=4
DeepSleepStandbyPowerWatts=65535
DeviceLocator=“PSU2”
FirmwareVersion=“1.000”
InputVoltageType=0
IsPartOfSysPower=true
LineInputVoltageType=“Unknown”
Manufacturer="Great Wall "
Model="CRPS2000D2 "
PartNumber=“CRPS2000D2 "
Position=“EXU”
PowerSupplyChannel=0
PowerSupplyType=1
Presence=1
ProductionDate=“230802”
Protocol=“pmbus”
RedundancyGroupId=0
RelaySwitchedCount=0
SerialNumber=“2N070064407 "
SlotNumber=2
SourceType=1
TotalRunningHours=0
WorkMode=“Enabled”
bmc.kepler.Systems.PowerMgmt.OnePower.EfficiencyCurve
EfficiencyCurve=
PowerLevel=“N/A”
bmc.kepler.Systems.PowerMgmt.OnePower.Metrics
InputCurrentAmps=0.41
InputFrequencyHz=0
InputPowerWatts=93
InputVoltage=232
OutputCurrentAmps=5.87
OutputPowerWatts=73
OutputVoltage=12.377
Rate=2000
RatedCurrentAmps=0
bmc.kepler.Systems.PowerMgmt.OnePower.Status
BackupCircuitVINStatus=255
CMLStatus=192
CommunicationStatus=0
DeepSleepEnabled=0
DualInputVoltageStatus=0
EquipmentMode=255
Failure=0
Fan1Fault=0
Fan2Fault=0
FanFault=0
Health=0
InputVoltageFault=0
InputVoltageStatus=0
IsUpgrading=false
LossOfInput=0
MainCircuitVINStatus=255
MfrSpecificStatus=1
NormalAndRedundancySupported=false
OtherStatus=0
OutputCurrentFault=0
OutputState=1
OutputVoltageFault=0
OverTemperature=0
ScanStatus=7
SleepMode=””
TPSUStatusHigh=0
TPSUStatusLow=0
bmc.kepler.Systems.PowerMgmt.OnePower.Temperatures
EnvTemperatureCelsius=28
InletTemperatureCelsius=0
InnerTemperatureCelsius=0
PrimaryChipTemperatureCelsius=37
SecondaryChipTemperatureCelsius=36
Private
AlarmStatus=0
InputState=1
PhysicalInterface=“pmbus”
PreAlarmStatus=0
RefFrudata=“FruData_Ps_010109”
RefSMCChip=
UnsupportedProperties=
UpgradeSupported=true

期望结果

备用电源进入standby

实际结果

电源还是工作在shared模式

尝试过的解决方案

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

电源策略主备模式未生效问题分析与解决方案

根据您提供的详细信息,您的鲲鹏服务器配置了两个长城电源(CRPS2000D2),尽管在Web界面设置了主备供电模式(Active/Standby),但系统实际仍运行在负载均衡模式下。以下是对此问题的全面分析和解决方案建议。

问题诊断

当前系统状态分析

从您提供的信息可以看出以下关键点:

  1. PowerStrategy配置正确

    • PowerWorkingMode 已成功设置为 "Active/Standby"
    • ExpectedActivePSU=[1](表示期望PSU1为主用电源)
    • ActiveStandbySupported=true(支持主备模式功能)
  2. 实际运行状态不一致

    • PowerActualWorkingMode="LoadBalancing":实际工作模式仍为负载均衡
    • 两个电源的 WorkMode 均为 "Enabled":表明两块电源都在主用模式下工作
  3. 模式不一致的根本原因

    • BMC已发送正确的配置指令,但 power_mgmt 组件未执行 set_power_mode() 函数调用
    • 系统未能从软件配置状态成功转换为硬件执行状态

根本原因分析

基于知识库中的信息,可能导致该问题的原因包括:

1. 电源控制时序问题

正如文档中提到的,在AC电源恢复时,如果BMC尝试在电源模块尚未完成初始化并建立稳定电压输出前设置工作模式,会导致命令失效。

关键事实:在电源处于关机状态(STATUS_BYTE寄存器OFF位为1)时,无法响应 set_power_mode() 控制命令。

2. 驱动或固件兼容性问题

您的电源型号为长城CRPS2000D2,可能存在以下适配问题:

  • PMBus协议实现差异
  • Cold_Redundancy_Config (D0h) 命令的支持程度不同

3. 软件版本缺陷

您使用的Power_Mgmt组件可能存在已知bug,特别是在版本 1.70.11 及以下中存在自动切换逻辑判断条件过于宽松的问题。

解决方案建议

方案一:验证并修复控制流程

1. 检查电源状态再设置模式

修改或确认 get_work_mode() 函数实现,应先读取STATUS_BYTE寄存器检测电源是否已开启:

function get_work_mode()
    status_byte = chip_read_byte(STATUS_BYTE)
    if (status_byte & 0x40) then  -- OFF=1 when PSOK=0
        return "POWER_OFF"
    end
    
    work_mode = chip_read_byte(CONTROL_CMD)
    return (work_mode == COLD_ACTIVE) ? "ACTIVE_MODE" : "STANDBY_MODE"
end

2. 确保在电源就绪后设置模式

调整 power_strategy 模块逻辑,在检测到所有PSU的STATUS_BYTE中OFF位为0后再执行主备模式设置。

方案二:手动触发模式设置

使用busctl工具检查并强制设置电源模式:

# 查看当前电源策略配置
busctl introspect bmc.kepler.Systems.FruCtrl

# 手动调用设置电源工作模式接口
busctl call bmc.kepler.Systems.PowerConverter /bmc/kepler/Systems/system/PowerConverter/1 bmc.kepler.Systems.PowerConverter SetPowerWorkMode y 1
busctl call bmc.kepler.Systems.PowerConverter /bmc/kepler/Systems/system/PowerConverter/2 bmc.kepler.Systems.PowerConverter SetPowerWorkMode y 0

方案三:配置自定义主备切换阈值

启用并配置主备切换条件,以确保系统按预期行为工作:

# 设置主备切换条件
bmc command set BMCSet_CustomPSActiveStandby on
bmc command set Custom_PSActiveStandbyMinLevel 65
bmc command set Custom_PSActiveStandbyMaxLevel 75

方案四:检查并应用最新修复

查看是否有以下已知问题的补丁:

问题类型 推荐措施
Power_Mgmt组件bug 升级到已知修复版本(确保Power_Mgmt版本 > 1.70.11)
AC重启后模式丢失 验证SetPowerOnStrategyExceptions配置
状态显示不一致 应用Web界面状态刷新逻辑优化

验证方法

1. 日志调试建议

检查以下日志文件以定位问题:

/var/log/bmc/fructrl.log
/var/log/bmc/power_strategy.log
/var/log/bmc/power_mgmt.log

关注是否存在execute_poweron被意外调用的记录。

2. 测试用例验证

场景1:远程命令关机 → 应不触发恢复上电;
场景2:拔掉电源线再插回 → 应触发通电开机;
场景3:强制长按关机 → 视为异常掉电,应触发恢复策略。

3. 实际效果验证命令

# 检查实际工作模式
lsprop PowerStrategy_1_010104 | grep PowerActualWorkingMode

# 检查各电源工作模式
lsprop OnePower_0_010108 | grep WorkMode
lsprop OnePower_0_010109 | grep WorkMode

长期优化建议

  1. 升级系统组件:确保使用最新的Power_Mgmt和power_strategy组件版本。
  2. 增加重试机制:在模式设置失败后增加状态验证与重试逻辑。
  3. 增强异常处理:在电源未就绪时提供明确错误提示而非静默失败。
  4. 提交Issue:向openUBMC项目提交该兼容性问题,推动对长城CRPS电源的更好支持。

通过上述措施,可以系统性地解决主备模式未能生效的问题,确保电源策略能够正确实施。

手动对onepower设置work mode是可以把 电源切换到standby

OnePower的ScanStatus属性需要为15,可以先手动模拟成15试试

1 个赞

手动设置15可以,请问这个第3bit是什么意思,什么时候赋值的呢?

可以看下组件仓self.scan_status的赋值,bit3是模式相关信息

收到,谢谢