PCIeSlot对象如何配置

在2512LTS版本中,网卡热拔插的逻辑有改变:热拔插相关属性改变了:NetworkAdapter.CardPowerGood改为PCIeSlot.PowerState,NetworkAdapter.ReadyToRemove改为PCIeSlot.ReadyToRemove。

从pcie_device组件里的代码看热拔插相关属性是这么改的:

PowerOnSwitch和ReadyToRemove都是对pcie卡进行下电,这俩的区别是什么?


在2512LTS的VPD仓里没有看到PCIeSlot配置,能否给出一个配置示例?

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

:white_check_mark: 七、结论总结

项目 说明
:white_check_mark: 是否应使用 PCIeSlot 管理热插拔 是,符合架构设计趋势
:white_check_mark: PowerOnSwitch vs ReadyToRemove 前者是直接电源控制,后者是安全弹出触发
:white_check_mark: 是否有配置模板 提供了 CSR/JSON 模板,可结合实际硬件适配
:white_check_mark: 是否支持 Redfish 标准 是,已新增 HotPluggableReadyToRemove 属性
:warning: VPD 中无配置? VPD 主要存储静态资产信息,动态资源配置应在 CSR 或 BMC 服务中定义
点击此处查看详细分析解答

2512LTS 版本中,PCIe 热插拔管理逻辑确实发生了重要变更,将原先集中在 NetworkAdapter 对象上的电源状态和移除准备属性迁移至更符合系统架构设计原则的 PCIeSlot 对象。以下是对该问题的全面解析与配置说明:


:white_check_mark: 一、背景:为何将热插拔属性从 NetworkAdapter 迁移到 PCIeSlot?

根据上下文搜索结果与架构演进逻辑:

原先热插拔相关属性(如 ReadyToRemove)配置在 PCIe 卡自身 CSR 上,不合理,因为 热插拔控制本质上是槽位(Slot)的行为,而非设备本身。

因此,在 2512LTS 版本中推行如下变更:

  • 原属性 NetworkAdapter.CardPowerGood → 被 PCIeSlot.PowerState 取代
  • 原属性 NetworkAdapter.ReadyToRemove → 被 PCIeSlot.ReadyToRemove 取代

这一改动体现了 “槽位作为管理实体” 的设计理念,提升了硬件抽象层次的合理性。


:white_check_mark: 二、PowerOnSwitchReadyToRemove 的区别

虽然二者都涉及 PCIe 卡的电源控制或下电操作,但 用途、触发时机、方向性完全不同

属性 PowerOnSwitch ReadyToRemove
功能 主动控制槽位电源通断(软件上电/断电) 告知系统已准备好安全移除设备(通知式热拔)
操作方向 正向控制:写 1 = 上电,写 0 = 断电 反向确认:写 1 = 允许下电(触发断电流程)
作用对象 控制硬件 Accessor 寄存器,直接影响电源开关 触发 BMC 内部逻辑,可能导致后续调用 PowerOnSwitch=0
权限 读写(W: BasicSetting)
持久化
变化通知
典型场景 - 远程上下电
- 故障隔离强制断电
- 用户点击“安全移除”
- OS 发出热拔请求

:pushpin: 总结区别:

  • PowerOnSwitch电源开关按钮:你想开就开,想关就关。
  • ReadyToRemove安全弹出键:你告诉系统“我要拔卡了”,系统自动执行下电流程(内部可能调用 PowerOnSwitch=0)。

:white_check_mark: 三、PCIeSlot 对象的完整属性说明(基于 2512LTS)

以下是根据您提供的文档和知识图谱整理出的 PCIeSlot 核心属性列表:

属性名 类型 权限 默认值 说明
SlotId U8 R (ReadOnly) —— 物理槽位编号,用于定位硬件位置
SupportedComponentTypes U8 R —— 支持的组件类型(如 8 表示 OCP 网卡)
PowerState string (On/Off) R On 槽位当前供电状态(由 PowerOnSwitch 控制)
PowerOnSwitch ay (数组) 或 U8 RW (BasicSetting) 未定义 实际控制电源通断的私有属性,写 0 下电,写 1 上电
ReadyToRemove U8 RW (BasicSetting) 0 写入 1 表示允许对卡执行下电操作
HotPluggable boolean R true 是否支持热插拔(Redfish 标准属性)
HotResetSupported boolean R true 是否支持热复位

:memo: 注:PowerState 是一个计算属性,其值通常来源于 PowerOnSwitch 的状态映射。


:white_check_mark: 四、PCIeSlot 配置示例(CSR 或 JSON 模板)

由于您提到 VPD 仓中未找到 PCIeSlot 配置,这可能是因配置位于 CSR 文件或 BMC 资源定义中。下面给出一个符合 2512LTS 架构的 PCIeSlot 资源协作接口配置示例(模拟 JSON/CSR 形式):

{
  "PCIeSlot_1": {
    "SlotId": 1,
    "SupportedComponentTypes": 8,
    "PowerState": "expr($1 == 'Off' ? 'Off' : 'On')",
    "PowerOnSwitch": {
      "Chip": "#/Accessor_PowerSwitch",
      "Offset": "expr(${Slot} * 8 + 0)",
      "Length": 1
    },
    "ReadyToRemove": {
      "Chip": "#/Smc_ExpBoardSMC",
      "Offset": "expr(${Slot} |> ($1 == 1 ? 0x10 : ($1 == 2 ? 0x11 : 0x12)))",
      "AccessMode": "Byte"
    },
    "HotPluggable": true,
    "HotResetSupported": true,
    "Location": {
      "PartLocation": {
        "ServiceLabel": "PCIe Slot 1"
      }
    }
  }
}

:wrench: 配置中字段解释:

字段 说明
Chip 指向具体的硬件控制器(如 SMC、CPLD)
Offset 寄存器偏移地址;${Slot} 为动态变量,运行时替换为实际槽位号
expr(...) 支持表达式解析,用于动态地址计算
PowerOnSwitch 实际执行上下电动作的 Accessor 引用
ReadyToRemove 写入后触发 BIOS/CPLD 执行安全断电动作

:white_check_mark: 五、Redfish 接口映射(标准兼容)

PCIeSlot 对象会映射到 Redfish 接口:

:link: GET 请求示例:

GET /redfish/v1/Chassis/1/PCIeDevices/PCIeCard1

返回中新增字段:

{
  "Slot": {
    "HotPluggable": true,
    "ReadyToRemove": false
  },
  "PowerState": "On"
}

:link: PATCH 请求示例(设置 ReadyToRemove):

PATCH /redfish/v1/Chassis/1/PCIeDevices/PCIeCard1
{
  "Slot": {
    "ReadyToRemove": true
  }
}

此时 BMC 会通过 PCIeSlot.ReadyToRemove = 1 触发断电流程。


:white_check_mark: 六、建议:如何验证配置是否生效?

  1. BMC 日志观察

    journalctl -u pcie-slot-monitor | grep "set power"
    

    查看是否输出类似:

    [PCIEslot] set power to Off failed: ...
    
  2. 使用 devmon 工具检查资源状态

    devmon get /bmc/kepler/Systems/1/PCIeSlots/1
    
  3. 通过 Redfish 查询状态

    curl -k -H "X-Auth-Token: $token" https://$BMC_IP/redfish/v1/Chassis/1/PCIeDevices/PCIeCard1
    

:white_check_mark: 七、结论总结

项目 说明
:white_check_mark: 是否应使用 PCIeSlot 管理热插拔 是,符合架构设计趋势
:white_check_mark: PowerOnSwitch vs ReadyToRemove 前者是直接电源控制,后者是安全弹出触发
:white_check_mark: 是否有配置模板 提供了 CSR/JSON 模板,可结合实际硬件适配
:white_check_mark: 是否支持 Redfish 标准 是,已新增 HotPluggableReadyToRemove 属性
:warning: VPD 中无配置? VPD 主要存储静态资产信息,动态资源配置应在 CSR 或 BMC 服务中定义

如果您能提供具体主板型号或 SMC/CPLD 地址映射表,我可以进一步为您生成精确的配置片段。

2512的LTS VPD和component_drivers都没有找到PCIeSlot对象配置,是不是说明当前社区版本都是默认不支持网卡的热拔插的?

我发现一些网卡的HotPluggable是true,是不是应该都改为false(如果直接使用社区版本的话)?

当前支持热插拔的卡仅有OCP卡,且是在开机时存在卡时,仅支持更换同一型号的卡。您这边的诉求是什么呢?

我们的扩展板不支持热拔插,但是OCP卡因为HotPluggable=true会在web上显示热拔插状态。

社区代码里也没有热拔插必要的对象PCIeSlot,只在网卡里配置HotPluggable=true,这种情况下拿社区版本直接去用就会产生问题:实际没有热拔插功能,但是web上显示热拔插状态

当前社区代码卡是否支持热插拔是和卡相关的,配置在CSR中,如果需要关联上EXU的属性,可以自行增加适配:

方案1: 在代码中检测,检测EXU的特征,在network_adapter中手动将HotPluggable置位false

方案2: 通过csr配置,更改北向,获取EXU的属性,显示HotPlugSupported时也考虑EXU

当前网页上显示热插拔还是通过HotPluggable判断的,传递给前端的HotPlugSupported为false就不显示热拔出按钮。

1 个赞