配置riser槽位出现slot1 slot2 portid重复

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

问题描述

配置riser槽位出现slot1 slot2 portid重复。根据日志看slot1 slot2的serdes都是识别到同一个了,检查线缆白名单和BusinessConnector按照正常配置配的,不知道还有哪里有问题。slot1 slot2配置与日志打印如下:

“BusinessConnector_1”: {
“Name”: “Down_1”,
“Direction”: “Downstream”,
“Slot”: 1,
“LinkWidth”: “X8”,
“MaxLinkRate”: “PCIe 5.0”,
“ConnectorType”: “PCIe CEM”,
“UpstreamResources”: [
{
“Name”: “Up_1”,
“ID”: 255,
“Offset”: 0,
“Width”: 8
}
],
“RefMgmtConnector”: “#/Connector_PCIE_SLOT1”,
“RefMgmtConnectorTianChi”: “#/Connector_PCIE_SLOT1TianChi”,
“RefPCIeAddrInfo”: “#/PcieAddrInfo_1”
},
“BusinessConnector_101”: {
“Name”: “Up_1”,
“Direction”: “Upstream”,
“Slot”: 1,
“LinkWidth”: “X8”,
“MaxLinkRate”: “PCIe 5.0”,
“ConnectorType”: “UBC”,
“Ports”: [
{
“Name”: “Port1”,
“ID”: 16,
“Offset”: 0,
“Width”: 8
}
]
},
“BusinessConnector_2”: {
“Name”: “Down_2”,
“Direction”: “Downstream”,
“Slot”: 2,
“LinkWidth”: “X16”,
“MaxLinkRate”: “PCIe 5.0”,
“ConnectorType”: “PCIe CEM”,
“UpstreamResources”: [
{
“Name”: “Up_2”,
“ID”: 255,
“Offset”: 0,
“Width”: 8
},
{
“Name”: “Up_3”,
“ID”: 255,
“Offset”: 0,
“Width”: 8
}
],
“RefMgmtConnector”: “#/Connector_PCIE_SLOT2”,
“RefMgmtConnectorTianChi”: “#/Connector_PCIE_SLOT2TianChi”,
“RefPCIeAddrInfo”: “#/PcieAddrInfo_2”
},
“BusinessConnector_102”: {
“Name”: “Up_2”,
“Direction”: “Upstream”,
“Slot”: 2,
“LinkWidth”: “X8”,
“MaxLinkRate”: “PCIe 5.0”,
“ConnectorType”: “UBC”,
“Ports”: [
{
“Name”: “Port2”,
“ID”: 32,
“Offset”: 0,
“Width”: 8
}
]
},
“BusinessConnector_103”: {
“Name”: “Up_3”,
“Direction”: “Upstream”,
“Slot”: 2,
“LinkWidth”: “X8”,
“MaxLinkRate”: “PCIe 5.0”,
“ConnectorType”: “UBC”,
“Ports”: [
{
“Name”: “Port3”,
“ID”: 33,
“Offset”: 0,
“Width”: 8
}
]
}

{
“UID”: “00000008040302012601”,
“Index”: 0,
“SrcPortName”: [
“A3a”,
“C4a”,
“C5a”,
“C6a”,
“C7b”,
“A2a”,
“A2c”,
“A1a”,
“A1c”,
“B3a”,
“B3c”,
“B4a”,
“B4c”,
“D7a”,
“D6a”,
“D5a”,
“D4b”,
“B2a”,
“B1a”
],
“TargetPortID”: [
16,
32,
33,
48,
49,
64,
65,
80,
81,
96,
97,
112,
113,
128,
129,
144,
145,
161,
160
],
“Slot”: [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
],
“Device”:
},

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

  • 硬件配置:[如 CPU、内存等]

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

配置riser槽位slot1 slot2 portid正常,知道产生重复的原因

实际结果

[实际发生了什么,包含错误信息]

尝试过的解决方案

[列出您已经尝试过的解决方案及结果]

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

:white_check_mark: 六、总结与建议

项目 建议
根本原因 缺少基于 Slot 的拓扑白名单规则,导致多个 Slot 匹配到相同的 SerDes 资源
解决方向 使用 UnitConfiguration.Configurations 实现 Slot 级精确匹配
最佳实践 避免滥用 ID=255 自动匹配;优先使用白名单机制
配置原则 SrcPortNameTargetPortIDSlot 三者联合构成唯一拓扑指纹
点击此处查看详细分析解答

Riser槽位配置中Slot1与Slot2 PortID重复问题分析与解决方案

根据您提供的配置信息、日志输出以及系统架构背景,当前存在 Riser卡槽位Slot1和Slot2的SerDes资源识别冲突,导致PortID分配重复 的问题。以下将从问题分析、根本原因、排查建议、解决方案及配置优化四个方面进行系统化说明。


:magnifying_glass_tilted_left: 一、问题描述

  • 现象
    在配置Riser卡时,Slot1与Slot2均识别到了相同的SerDes资源(如日志中均映射到SerDes_0_0 B),进而导致PortID重复的问题。

  • 日志证据

    [BizTopo] PCIEBizConnector: Slot=2, position=010105 serdes_name=SerDes_0_0 B
    [BizTopo] PCIEBizConnector: Slot=1, position=01010105 serdes_name=SerDes_0_0 B
    

    两个不同的Slot(1和2)均绑定到了同一个SerDes资源 SerDes_0_0 B,说明拓扑匹配逻辑未能正确区分两个下行端口(Down_1 和 Down_2)对应的上游资源

  • 配置观察

    • BusinessConnector_1 (Down_1)BusinessConnector_2 (Down_2) 均使用了 UpstreamResourcesID=255 的占位符。
    • 实际上游资源 Up_1(Port ID: 16)、Up_2(Port ID: 32)、Up_3(Port ID: 33)已正确定义。
    • SrcPortNameTargetPortID 映射完整,但未体现Slot级别的区分。

:bullseye: 二、根本原因分析

结合 知识图谱文档内容(如《PCIe配置》《板卡适配指南》等),核心问题在于:

:cross_mark: 1. UpstreamResourcesID = 255 表示“自动匹配”,但未通过 拓扑白名单(UnitConfiguration) 明确约束对应关系

  • BusinessConnector.DownstreamUpstreamResources 中:
    "UpstreamResources": [ { "Name": "Up_1", "ID": 255 } ]
    
    • 这里的 ID = 255 是一种通配符机制,表示由系统在运行时动态匹配正确的上游资源。
    • 风险:若没有足够精确的 SrcPortNameTargetPortID 组合用于匹配,则多个下游端口可能匹配到同一组物理资源,造成冲突。

:cross_mark: 2. 缺少明确的 Slot级拓扑白名单匹配规则

  • 根据《CSR配置字典之UnitConfiguration类》文档,应通过 Configurations 字段设置白名单规则,以实现精准拓扑匹配。
  • 当前配置中未体现如下关键字段:
    "Configurations": [
      {
        "SrcPortName": ["A3a"],
        "TargetPortID": [16],
        "Slot": 1
      },
      {
        "SrcPortName": ["C4a", "C5a"],
        "TargetPortID": [32, 48],
        "Slot": 2
      }
    ]
    
    缺少该配置会导致系统无法根据 Slot + SrcPortName + TargetPortID 三元组进行唯一性匹配,从而引发歧义。

:cross_mark: 3. ActualResourceOrderPorts 数组未严格一一对应

  • 知识图谱中指出:

    ActualResourceOrderPorts 必须保持一一对应关系,确保物理连接顺序正确。

  • 若缺失或配置错误,可能导致 SerDes 映射错乱。

:toolbox: 三、排查建议与验证步骤

请按以下顺序逐一排查:

:white_check_mark: 1. 检查 UnitConfiguration 是否配置了基于 Slot 的白名单规则

  • 必须UnitConfiguration 中配置如下结构:
    "Configurations": [
      {
        "Name": "Config_Slot1",
        "SrcPortName": ["A3a"],
        "TargetPortID": [16],
        "Slot": 1
      },
      {
        "Name": "Config_Slot2",
        "SrcPortName": ["C4a", "C5a"],
        "TargetPortID": [32, 48],
        "Slot": 2
      }
    ]
    

    :pushpin: 这是实现多Slot独立拓扑匹配的核心机制。不配置则默认使用通用规则,易出现冲突。

:white_check_mark: 2. 验证 SrcPortNameTargetPortID 是否真实存在物理连接

  • 从日志中可见:
    name=A3a, port=16 → 应映射到 Up_1
    name=C4a, port=32 → 应映射到 Up_2
    name=C5a, port=48 → 应映射到 Up_3(若支持)
    
  • 需确认:
    • A3a 是否物理连接至 Up_1
    • C4a 是否物理连接至 Up_2
    • 若拓扑连接错误,即使配置正确也会映射失败。

:white_check_mark: 3. 确认每条 UpstreamResources 的名称是否准确指向真实的 BusinessConnector_Up_x

  • 示例:
    "UpstreamResources": [ { "Name": "Up_1" } ] → 必须存在名为 "Up_1" 的上游对象
    
  • 建议避免使用 ID=255 的自动模式,尤其是在复杂Riser场景下,推荐显式指定 ID 值(如 16、32 等 PortID)。

:white_check_mark: 4. 检查 ActualResourceOrderPorts 的一致性

  • 若使用了 ActualResourceOrder,其长度和顺序必须与 Ports 数组完全一致:
    "ActualResourceOrder": ["SerDes_0_0_B", "SerDes_0_5_B"],
    "Ports": [ { "ID": 16 }, { "ID": 32 } ]
    
    否则会导致 SerDes 映射错位。

:hammer_and_wrench: 四、解决方案

:white_check_mark: 方案一:【推荐】完善 UnitConfiguration 白名单规则(精准匹配)

"UnitConfiguration_Riser": {
  "Slot": 1,
  "SrcPortName": ["A3a", "C4a", "C5a"],
  "TargetPortID": [16, 32, 48],
  "Configurations": [
    {
      "Name": "Slot1_Config",
      "Slot": 1,
      "SrcPortName": ["A3a"],
      "TargetPortID": [16]
    },
    {
      "Name": "Slot2_Config",
      "Slot": 2,
      "SrcPortName": ["C4a", "C5a"],
      "TargetPortID": [32, 48]
    }
  ]
}

:white_check_mark: 效果:系统将依据 Slot 区分不同路径,避免交叉匹配。


:white_check_mark: 方案二:显式绑定 UpstreamResources.ID 而非使用通配符 255

将原配置:

"UpstreamResources": [
  { "Name": "Up_1", "ID": 255, "Width": 8 }
]

改为:

"UpstreamResources": [
  { "Name": "Up_1", "ID": 16, "Width": 8 }  // 显式指定 PortID
]

:warning: 注意:此方式牺牲灵活性,适用于固定拓扑结构。


:white_check_mark: 方案三:引入 RelativeSlotGroupPosition 实现 Slot 隔离

可在 ComponentPcieAddrInfo 中使用变量替换机制区分槽位:

"PcieAddrInfo_1": {
  "SlotID": "${Slot}",
  "PortID": 16,
  "Device": [0]
},
"PcieAddrInfo_2": {
  "SlotID": "${Slot}",
  "PortID": 32,
  "Device": [1]
}

并在加载时传入正确的 Slot=1Slot=2 上下文。


:books: 五、相关知识点参考(来自知识库)

概念 说明
UpstreamResources 定义下游连接器所依赖的上游资源列表,需与 BusinessConnector_Up_x 对应
SrcPortName 源端口号,如 "A3a",用于拓扑匹配的关键标识
TargetPortID 对应的逻辑 PortID,如 16,用于建立物理与逻辑映射
UnitConfiguration.Configurations 拓扑白名单规则,支持按 Slot、PortName、PortID 进行精细匹配
ActualResourceOrderPorts 必须保持一一对应,否则 SerDes 资源映射错误

:white_check_mark: 六、总结与建议

项目 建议
根本原因 缺少基于 Slot 的拓扑白名单规则,导致多个 Slot 匹配到相同的 SerDes 资源
解决方向 使用 UnitConfiguration.Configurations 实现 Slot 级精确匹配
最佳实践 避免滥用 ID=255 自动匹配;优先使用白名单机制
配置原则 SrcPortNameTargetPortIDSlot 三者联合构成唯一拓扑指纹

:white_check_mark: 最终目标:每个 BusinessConnector_Down_x 独立匹配唯一的上游 SerDes 资源,实现 PortID 的非重复分配。

如完成上述修改后仍存在问题,建议提供完整的 UnitConfigurationPcieAddrInfo 配置片段以便进一步分析。

还需要分析一下BCU的CSR,烦请发一下一键收集日志。