thermal_mgmt 共享风扇控制权属性新增
1. 评审背景
支持风扇共享的转速和转速模式设置
现有手动模式(SetCtrlMode/SetManualLevel)仅支持单 BMC。新场景为双单板控制器机框:每板一个 BMC(一主一从),共 14 个独立风扇(每板 7 个)+ 2 个共享风扇(两板中间,仅主控可访问)。
协同要求:
- 独立风扇各板本地生效,不分主从
- 共享风扇仅主控生效;调用方为从控时,转发 RPC 至主控,主控设置后再同步
多控建模已确认:两 BMC 资源树上均存在风扇对象;主从同步远期走 bmc_datasync,不在本次范围。
核心诉求:需要一个可承载"独立控制 or 仅共享主控控制"语义的属性。
2. 已有属性复用结论:均不可复用
| 属性 | 所属类 | 语义 | 不可复用原因 |
|---|---|---|---|
IsTwins/Position/FunctionDesc |
Fan | 结构/位置/描述 | 与控制权无关 |
ManageFans |
PWMChannel | 通道管辖的风扇 ID 数组 | "通道→风扇"映射,非"风扇→控制方"归属 |
FanCtrlEnable |
CoolingConfig | 整板调速使能(Enabled/Disabled) | 整板级开关,非每风扇粒度 |
WorkInStandby |
Fans | standby 是否可运转 | 电源域语义,无关 |
强行复用会破坏现有语义,影响上层呈现,故需新增属性。
3. 新增属性方案对比
方案 A:Fan 类新增单风扇标记(私有属性)
"Fan": {
"path": "/bmc/kepler/Systems/:SystemId/Thermal/Fans/:Id",
"properties": {
"ControlOwner": {
"usage": ["CSR"],
"baseType": "U8",
"default": 0,
"description": "0=本板独立控制, 1=共享风扇仅主控控制"
}
}
}
-
优点:建模正确(共享/独立是风扇固有属性),单风扇粒度精确;与风扇硬件数据同层,basic_cooling 遍历风扇时可直接读取,逻辑层读取零跨层;远期若组件拆分后属性归属下层 thermal 组件,无跨组件引用
-
缺点:方法在 CoolingConfig(上层)、属性在 Fan(硬件层),RPC 实现需跨两层(上层入口 → 逻辑层 → 硬件层对象)读取,调用链较长;每个 Fan 对象字段膨胀;需改设备树同步
接口变更:
| 属性名称 | 变化类型 | 签名 | 资源path | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|
| ControlOwner | 新增属性 | y | /bmc/kepler/Systems/:SystemId/Thermal/Fans/:Id | 不持久化 | false | 风扇控制权归属:0=本板独立控制,1=共享风扇仅主控控制 | 取值仅 0/1,由板级 CSR 逐风扇配置 |
方案 B:CoolingConfig 类新增共享风扇 ID 列表(私有属性)
"CoolingConfig": {
"path": "/bmc/kepler/Systems/:SystemId/CoolingConfig",
"properties": {
"SharedFanIds": {
"usage": ["CSR"],
"baseType": "U8[]",
"description": "共享风扇ID列表,多控下仅主控可设置转速"
}
}
}
-
优点:与方法同类、改动集中;配置集中(整框概念);扩展好(加共享风扇仅改 CSR)
-
缺点:依赖两控 CSR 一致;风扇热插拔需维护列表;与硬件层 Fan 对象跨层——属性在上层,需将风扇 FanId 列表映射到硬件层风扇对象才能定位共享风扇;远期若组件拆分后属性在上层 basic_cooling,但语义属于下层风扇,存在跨组件引用风险
接口变更:
| 属性名称 | 变化类型 | 签名 | 资源path | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|
| SharedFanIds | 新增属性 | ay | /bmc/kepler/Systems/:SystemId/CoolingConfig | 不持久化 | false | 共享风扇ID列表,多控下仅主控可设置转速 | 两控 CSR 配置须一致;列表为风扇 FanId 数组 |