电源轻载休眠管理资源树路径和WebREST接口评审
1. 背景
管理板需要提供框级电源轻载休眠管理能力,根据框级负载情况自动管理电源模块的休眠与唤醒,实现轻载节能。该功能部署在管理板,作为独立组件运行,通过D-Bus消费既有电源管理接口,并向北向提供WebREST管理接口。
2. 整体方案
| 维度 | 说明 |
|---|---|
| 部署位置 | 管理板(框级) |
| 资源树路径 | /bmc/kepler/AggregationService/Aggregates/${AggregateId}/SystemService/EnergySaving |
| WebREST 路径 | /UI/Rest/Chassis/AggregationService/EnergySaving |
| 持久化 | tableType: “PoweroffPer”(掉电持久化) |
资源树路径层级(挂在既有AggregationService汇聚组SystemService下)
/bmc/kepler/AggregationService/Aggregates/${AggregateId}
└── SystemService
├── BootOptions (既有)
├── PowerControl (既有)
└── EnergySaving (新增)
└── 属性: EnergySavingMode / EffectiveEnergySavingMode / SleepingPsuCount / LastSleepCount / PowerCapEnabled
└── 方法: SetEnergySavingMode / GetPsuStatus
WebREST 路径层级(前缀 /UI/Rest/Chassis/AggregationService)
/UI/Rest/Chassis/AggregationService
├── OverView (既有)
├── Certificate (既有)
├── Accounts (既有)
├── Configuration (既有)
├── LogService (既有)
├── UpdateService (既有)
├── BootOptions (既有)
├── ManagerNetWork (既有)
├── PowerControl (既有)
├── AssetInventory (既有)
├── AssetHealthStatus (既有)
└── EnergySaving (新增)
├── GET → 查询节能模式状态 + PSU工作状态
└── PATCH → 设置节能模式
3. 评审点清单
| 评审点编号 | 类别 | 评审对象 | 北向WebREST路径 | 资源树Path | 实现接口 | 方法 | 详细 |
|---|---|---|---|---|---|---|---|
| ES-01 | 新增路径、新增属性、新增方法 | 节能管理D-Bus接口 | — | /bmc/kepler/AggregationService/Aggregates/${AggregateId}/SystemService/EnergySaving | bmc.kepler.AggregationService.EnergySaving | SetEnergySavingMode / GetPsuStatus | §4.1 |
| ES-02 | 新增WebREST接口 | 节能管理WebREST | /UI/Rest/Chassis/AggregationService/EnergySaving | 同上 | 同上 | — | §4.2 |
4. 详细评审点
说明:本评审覆盖资源树路径、D-Bus接口属性与方法、北向WebREST路径。
4.1 [ES-01] 新增资源树路径 /bmc/kepler/AggregationService/Aggregates/${AggregateId}/SystemService/EnergySaving
路径描述:框级电源轻载休眠管理D-Bus对象。挂载于既有AggregationService汇聚组SystemService下,与既有BootOptions、PowerControl同级。归属聚合管理-系统服务功能域。部署在管理板,层级为机框。掉电持久化(tableType: “PoweroffPer”),BMC重启后恢复节能模式配置。
| 项 | 内容 |
|---|---|
| 资源树路径 | /bmc/kepler/AggregationService/Aggregates/${AggregateId}/SystemService/EnergySaving |
| 接口名 | bmc.kepler.AggregationService.EnergySaving |
| 层级 | 汇聚组下3级Service |
| 类权限 | ReadOnly |
| 持久化 | PoweroffPer(掉电持久化) |
属性
| 属性名 | 类型 | 默认值 | Usage | 选项 | 描述 |
|---|---|---|---|---|---|
| EnergySavingMode | String | “Standard” | [“CSR”] | — | 节能工作模式:Standard(标准) / BasicSaving(基本节能) / DeepSaving(深度节能) |
| EffectiveEnergySavingMode | String | “Standard” | [“CSR”] | emitsChangedSignal: “true” | 当前生效的节能模式(受温度/故障等约束可能与配置模式不同) |
| SleepingPsuCount | U8 | 0 | [“CSR”] | emitsChangedSignal: “true” | 当前处于休眠状态的电源模块数量 |
| LastSleepCount | U8 | 0 | [“CSR”] | — | 上次休眠PSU数量,用于主备倒换恢复 |
| PowerCapEnabled | Bool | false | [“CSR”] | emitsChangedSignal: “true” | 功率封顶使能状态,true时退出节能模式 |
方法
| 方法名 | 权限 | 描述 |
|---|---|---|
| SetEnergySavingMode | [“BasicSetting”] | 设置节能工作模式,参数为模式字符串(Standard/BasicSaving/DeepSaving) |
| GetPsuStatus | [“ReadOnly”] | 查询所有PSU的节能状态,返回PsuStatusList(含槽位号、在位状态、休眠模式、是否工作、供电分区) |
实现接口
| 实现接口 | 实现接口描述 | CSR配置影响 | 持久化影响 | 其他影响 |
|---|---|---|---|---|
| bmc.kepler.AggregationService.EnergySaving | 提供框级电源轻载休眠管理的模式配置、生效状态查询和休眠计数。属性EnergySavingMode掉电持久化;运行时属性(EffectiveEnergySavingMode/SleepingPsuCount/PowerCapEnabled)由组件运行时维护,emitsChangedSignal变更通知;主备管理板间通过bmc_datasync PropertySync机制实时同步EnergySavingMode和PowerCapEnabled | 新增CSR配置项:EnergySavingMode(节能模式)、EffectiveEnergySavingMode(生效模式)、SleepingPsuCount(休眠计数)、LastSleepCount(上次休眠计数)、PowerCapEnabled(功率封顶使能) | EnergySavingMode通过tableType: "PoweroffPer"掉电持久化;LastSleepCount运行时状态不持久化,主备倒换后从硬件重建 | 需实现新增属性5个 + 新增方法2个;类权限ReadOnly,写方法独立BasicSetting权限 |
4.2 [ES-02] 新增WebREST接口 /UI/Rest/Chassis/AggregationService/EnergySaving
路径描述:框级电源轻载休眠管理WebREST接口。挂在既有AggregationService WebREST路径下,与PowerControl、BootOptions同级。GET查询节能模式状态、模式生效状态及PSU工作状态,PATCH设置节能模式。
| 项 | 内容 |
|---|---|
| 北向WebREST路径 | /UI/Rest/Chassis/AggregationService/EnergySaving |
| 资源树路径 | /bmc/kepler/AggregationService/Aggregates/${AggregateId}/SystemService/EnergySaving |
| 实现接口 | bmc.kepler.AggregationService.EnergySaving |
WebREST 评审说明
| 北向URI | HTTP | 类型 | 映射资源树 | 说明 |
|---|---|---|---|---|
| /UI/Rest/Chassis/AggregationService/EnergySaving | GET | 资源 | Property(D-Bus属性读取)+ Plugin(PSU工作状态、模式生效判断) | 查询节能模式状态、模式是否生效、休眠计数、PSU工作状态 |
| /UI/Rest/Chassis/AggregationService/EnergySaving | PATCH | 资源 | Method: SetEnergySavingMode | 设置节能模式,请求体 EnergySavingMode(Enum: Standard/BasicSaving/DeepSaving) |
GET响应体:
| 字段 | 类型 | 来源 | 说明 |
|---|---|---|---|
| EnergySavingMode | String | D-Bus属性 | 配置的节能模式 |
| EnergySavingModeEffective | Boolean | 编排器插件 | 当前配置的节能模式是否已生效(配置模式与实际生效模式一致) |
| SleepingPsuCount | Integer | D-Bus属性 | 当前休眠的电源模块数量 |
| PsuWorkStatus | Object | 编排器插件 | PSU工作状态,KV格式。key为槽位号(字符串),value为 Active(在位且未休眠)/ DeepSleep(在位但已休眠)/ Absent(不在位) |
PATCH请求体:
| 字段 | 类型 | 必填 | 枚举 | 说明 |
|---|---|---|---|---|
| EnergySavingMode | String | 是 | Standard / BasicSaving / DeepSaving | 节能工作模式 |
PSU工作状态编排器插件:通过D-Bus查询 bmc.kepler.Systems.PowerMgmt.OnePower 接口所有对象,根据 Presence 和 OnePower.Status.SleepMode 生成 KV 格式的 PSU 工作状态:在位且未休眠 → Active,在位但休眠 → DeepSleep,不在位 → Absent。
模式生效判断编排器插件:比较 D-Bus 属性 EnergySavingMode 与 EffectiveEnergySavingMode 是否一致,返回 boolean。
样例展示:
GET 查询节能模式及 PSU 工作状态:
URL: /UI/Rest/Chassis/AggregationService/EnergySaving
操作类型:GET
响应消息体举例:
{
"EnergySavingMode": "DeepSaving",
"EnergySavingModeEffective": true,
"SleepingPsuCount": 2,
"PsuWorkStatus": {
"1": "Active",
"2": "Active",
"3": "DeepSleep",
"4": "Active",
"5": "Active",
"6": "Active",
"7": "DeepSleep",
"8": "Active"
}
}
PATCH 设置节能模式:
URL: /UI/Rest/Chassis/AggregationService/EnergySaving
操作类型:PATCH
请求参数:
{
"EnergySavingMode": "DeepSaving"
}
响应消息体举例:
(无响应体,HTTP 200 表示成功)
GET 查询(模式尚未生效时):
URL: /UI/Rest/Chassis/AggregationService/EnergySaving
操作类型:GET
响应消息体举例:
{
"EnergySavingMode": "DeepSaving",
"EnergySavingModeEffective": false,
"SleepingPsuCount": 0,
"PsuWorkStatus": {
"1": "Active",
"2": "Active",
"3": "Active",
"4": "Active",
"5": "Active",
"6": "Active",
"7": "Active",
"8": "Active"
}
}
GET 查询(部分槽位不在位时):
URL: /UI/Rest/Chassis/AggregationService/EnergySaving
操作类型:GET
响应消息体举例:
{
"EnergySavingMode": "BasicSaving",
"EnergySavingModeEffective": true,
"SleepingPsuCount": 1,
"PsuWorkStatus": {
"1": "Active",
"2": "Active",
"3": "DeepSleep",
"4": "Active",
"5": "Absent",
"6": "Active",
"7": "Active",
"8": "Active"
}
}