双CPU模组直连NPU卡加载时槽位信息匹配有误

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

[在这里详细描述您遇到的问题]

双核心槽位信息和rootbdf对应关系如下

现在卡插在核心1的Slot2下面,但是页面显示的却是卡在核心2的Slot4下面

加载卡的device_loader.lua日志如下:可以看到Slot2的Id-AuxId=19e51711-19e51711, load-Id-AuxId=19e5d500-02000110和Slot4的Id-AuxId=19e5d500-02000110, load-Id-AuxId=ffffffff-ffffffff合并起来才应该是完整的,现在Slot2有不知道哪里来的19e51711-19e51711这个,也没找到相关的sr,不清楚是从哪来的

1970-01-02 03:26:10.213552 pcie_device NOTICE: device_loader.lua(183): [BizTopoLoader] Connector is detected, Slot=2, path=/bmc/kepler/Connector/Connector_PCIe_2_01011F, Id-AuxId=19e51711-19e51711, load-Id-AuxId=19e5d500-02000110
1970-01-02 03:26:10.219981 pcie_device NOTICE: device_loader.lua(183): [BizTopoLoader] Connector is detected, Slot=3, path=/bmc/kepler/Connector/Connector_PCIe_3_01011F, Id-AuxId=-, load-Id-AuxId=ffffffff-ffffffff
1970-01-02 03:26:10.249221 pcie_device NOTICE: device_loader.lua(183): [BizTopoLoader] Connector is detected, Slot=4, path=/bmc/kepler/Connector/Connector_PCIe_4_01011F, Id-AuxId=19e5d500-02000110, load-Id-AuxId=ffffffff-ffffffff
1970-01-02 03:26:10.270494 pcie_device NOTICE: device_loader.lua(183): [BizTopoLoader] Connector is detected, Slot=5, path=/bmc/kepler/Connector/Connector_PCIe_5_01011F, Id-AuxId=-, load-Id-AuxId=ffffffff-ffffffff

因为之前单模组已经能够正常显示了,所以双模组套用了一下,加了BDFConfig_cpu1和UnitConfiguration_BCU2,更改了socketid等属性,

        "BDFConfig_cpu0": {
            "Type": "RootBDF",
            "SocketId": 0,
            "BDFConfigs": [
                {
                    "PortId": 12,
                    "ControllerIndex": 1,
                    "Bus": 0,
                    "Device": 12,
                    "Function": 0
                }
            ]
        },
        "BDFConfig_cpu1": {
            "Type": "RootBDF",
            "SocketId": 1,
            "BDFConfigs": [
                {
                    "PortId": 12,
                    "ControllerIndex": 1,
                    "Bus": 128,
                    "Device": 12,
                    "Function": 0
                }
            ]
        },
"UnitConfiguration_BCU1": {
            "SlotType": "BCU",
            "SlotNumber": 1,
            "SlotSilkText": "BCU1",
            "Configurations": [
                {
                    "UID": "00000001020302041496",
                    "Index": 1,
                    "Default": true,
                    "BCUIndex": 1,
                    "Slot": [
                        1,
                        2,
                        5,
                        6
                    ],
                    "Device": [
                        8,
                        12,
                        0,
                        4
                    ]
                }
            ],
            "Port1LinkInfo": ""
        },
        "UnitConfiguration_BCU2": {
            "SlotType": "BCU",
            "SlotNumber": 2,
            "SlotSilkText": "BCU2",
            "Configurations": [
                {
                    "UID": "00000001020302041496",
                    "Index": 2,
                    "Default": true,
                    "BCUIndex": 2,
                    "Slot": [
                        3,
                        4,
                        7,
                        8
                    ],
                    "Device": [
                        8,
                        12,
                        0,
                        4
                    ]
                }
            ],
            "Port1LinkInfo": ""
        }
    }

Slot2和Slot4配置如下,只有socketid和BDF不一样

"PcieAddrInfo_2": {
            "Segment": 0,
            "GroupID": 1,
            "SlotID": 2,
            "PortID": 12,
            "Bus": 0,
            "Device": 12,
            "Function": 0,
            "SocketID": 0,
            "Location": "RiserCard${Slot}",
            "ComponentType": 8,
            "ContainerSlot": "${Slot}",
            "ContainerUID": "00000001020302041496",
            "ContainerUnitType": "BCU",
            "GroupPosition": "PcieAddrInfo_2_${GroupPosition}"
        },
"PcieAddrInfo_4": {
            "Segment": 0,
            "GroupID": 1,
            "SlotID": 4,
            "PortID": 12,
            "Bus": 128,
            "Device": 12,
            "Function": 0,
            "SocketID": 1,
            "Location": "RiserCard${Slot}",
            "ComponentType": 8,
            "ContainerSlot": "${Slot}",
            "ContainerUID": "00000001020302041496",
            "ContainerUnitType": "BCU",
            "GroupPosition": "PcieAddrInfo_4_${GroupPosition}"
        },

请问下
1.出现上面日志的原因可能是什么?怎么定位?主要是没找到调用load_unload_device函数的地方
2.双模组直连NPU卡的配置是否是我理解的增加一份BDFConfig_cpu1和UnitConfiguration_BCU2配置即可,还是有其他新的配置需要注意(核心1的Slot2和核心2的Slot4的区别现在只有PcieAddrinfo中的scoketid和BDF)

答案内容由AI生成,仅供参考:
根据您的要求,从回答内容中查找明确标有“问题总结”或“结论”等字样的章节。经检查,原文中并没有以“总结”、“解决方案”或“结论”为标题的独立章节。原文中仅出现了“问题原因分析”和“问题解答”等段落,且正文中虽包含“结论”一词,但并非作为独立章节标题出现(例如“结论:您的Slot2连接器被错误地关联…”)。因此,返回空内容。

(空)

点击此处查看详细分析解答

好的,我们首先来分析您提供的上下文信息,然后结合您的问题,给出一个结构化的解答。

根据您提供的描述和日志,问题的核心在于双CPU模组下,PCIe设备的槽位信息(Slot ID)与实际的物理槽位和BDF(总线/设备/功能)对应关系匹配错误。具体表现为,物理上插在核心1的Slot2的NPU卡,在页面上被错误地显示为核心2的Slot4下的设备。

问题原因分析

从您的日志和配置来看,问题的主要原因很可能出在 “连接器(Connector)的身份识别信息(Id-AuxId)与设备加载信息(load-Id-AuxId)不匹配” 以及 “连接器与PcieAddrInfo对象之间的关联关系配置不完整或不正确”

让我们深入分析日志和您提供的配置:

  1. 日志异常点分析

    • Slot2: Id-AuxId=19e51711-19e51711, load-Id-AuxId=19e5d500-02000110
      • load-Id-AuxId=19e5d500-02000110 这是NPU卡正确的四元组(VendorId-DeviceId-SubVendorId-SubDeviceId 的组合)。
      • Id-AuxId=19e51711-19e51711 这是一个不认识的Id,您的日志中也提到“没找到相关的sr”。这表示 系统尝试将这个不匹配的Id(19e51711-19e51711)与Slot2关联起来,这可能导致系统在处理槽位信息时产生混乱。
    • Slot4: Id-AuxId=19e5d500-02000110, load-Id-AuxId=ffffffff-ffffffff
      • Id-AuxId=19e5d500-02000110 这个是您NPU卡正确的Id,但它却关联到了Slot4
      • load-Id-AuxId=ffffffff-ffffffff 表示没有设备被加载到这个连接器上。

    结论:您的Slot2连接器被错误地关联了一个不存在的设备ID,而Slot4连接器虽然正确关联了NPU卡的ID,但并没有成功加载设备。这直接导致了页面显示信息错乱。

  2. 配置关联性分析

    • 根据您提供的pcie_device.md文档片段:“PCIe设备加载与管理”功能是“接收带内Host上报的设备BDF信息,通过IMU获取设备四元组,自动触发框架自发现加载PCIe设备CSR”。
    • 您的PcieAddrInfo_2配置在核心0(SocketID: 0)的Slot2上,Bus: 0。而PcieAddrInfo_4配置在核心1(SocketID: 1)的Slot4上,Bus: 128
    • 日志显示,连接器Connector_PCIe_2(对应Slot2)的load-Id-AuxId与连接器Connector_PCIe_4(对应Slot4)的Id-AuxId完全相同。这说明 “带内上报的NPU卡BDF信息”同时关联到了Slot2Slot4这两个连接器上。但实际的BDF(核心0,Bus:0)只应匹配PcieAddrInfo_2SocketID: 0, Bus:0),所以设备只被加载到了Slot2(load-Id-AuxId有值),但错误的Id信息导致了槽位逻辑混乱。

问题解答

以下是针对您两个问题的具体解答和排查步骤:

问题1:日志异常的原因及定位方法

可能的原因:

  1. 连接器身份信息 (Id-AuxId) 配置错误或缺失:系统中存在一个错误的设备ID(19e51711-19e51711)被配置或关联到了Slot2的连接器上,导致其身份识别异常。这个ID的来源需要追查。
  2. PcieAddrInfo中的BDF信息与物理拓扑不匹配:虽然您配置了BDFConfig_cpu0BDFConfig_cpu1,但pcie_device组件在建立从CPU SerDes到PCIe槽位的“业务拓扑链路”时,可能因为PortIDDevice等值的配置,导致系统将NPU卡的BDF错误地解析,从而错误地关联了槽位。例如,PortID为12的设备,在系统看来可能被分到了Slot4对应的资源范围内。
  3. UnitConfiguration配置的“槽位-设备”映射与实际的PcieAddrInfo配置冲突:您的UnitConfiguration_BCU1UnitConfiguration_BCU2定义了SlotDevice的映射关系(例如BCU1的Slot对应Device 8,12)。如果这个映射关系与BDFConfigPcieAddrInfo中的PortIDDevice值不协调,会导致系统在拓扑映射时出错。

定位方法:

  1. 查找“幽灵”设备ID (19e51711-19e51711):在您的整个项目代码库(包括所有CSR、SR文件、配置模板)中全局搜索19e51711-19e5171119e51711。这可能是其他硬件(如Riser卡、背板上的一个芯片)的ID,或者在之前的调试/测试过程中遗留的错误配置。
  2. 验证BDF配置的准确性
    • 登录到OS,使用lspci命令确认NPU卡的BDF(Bus:Device:Function)。例如,如果是4:00.0,那么您配置的DeviceFunction应该是正确的。
    • 检查BDFConfig_cpu0BDFConfig_cpu1中的BusDevicePortId值。确保PortId=12的Port在物理拓扑上确实对应的是Slot2Slot4,而不是被分到了同一端口组或错误的端口上。
  3. 检查并分析设备加载流程日志
    • 定位load_unload_device函数调用:您说没找到调用的地方,可以在device_loader.lua文件中搜索load_unload_device函数。它很可能是在处理Connectorload-Id-AuxId属性变化时被触发的。可以搜索Connector loadSlot load相关的关键日志来跟踪调用链。
    • 增加调试日志:在pcie_device组件的device_loader.lua或其他相关处理拓扑的代码中,临时增加更详细的日志,打印出:
      • 每个ConnectorSlotId-AuxIdload-Id-AuxId是如何通过IMU或SR文件匹配上NPU卡的。
      • BDFConfig中的值与PcieAddrInfo是如何关联的。
      • 拓扑映射的核心决策逻辑(例如:为什么一个BDF最终被分配到Slot2而不是Slot4)。

问题2:双模组直连NPU卡配置的注意事项

您理解的基本方向是对的,需要为每个CPU模组(每个核心)增加一份BDFConfig和UnitConfiguration。但除了您提到的更改SocketIDBDF外,以下几点非常关键,需要特别注意:

  1. 确认UnitConfiguration的完整性
    • 您是否正确配置了UnitConfiguration_BCU2,并且其UIDBCUIndex等参数与BCU1区分开,且与硬件一致?
    • 您配置文件中的Slot: [3, 4, 7, 8]Device: [8, 12, 0, 4]对应关系至关重要。PcieAddrInfo_2Device是12,ContainerSlot是2。而PcieAddrInfo_4Device也是12,ContainerSlot是4。在UnitConfiguration_BCU2中,Device数组的第1个元素(8)对应Slot3,第2个元素(12)对应Slot4这个映射关系是否正确?如果BCU2的Slot4对应的Device索引不是12,那就会出错。
  2. 检查BDFConfigBus
    • 在PCIe拓扑中,连接到不同Socket的设备,其配置空间的总线号(Bus)范围是独立的。对于核心1(Socket 1)下的设备,其总线号通常不会从0开始。您将BDFConfig_cpu1Bus设为128,这是一个常见的做法(例如,系统会为每个Socket分配独立的64或128条总线地址空间)。请务必确认这个Bus=128在您的硬件平台上确实是核心1下的有效初值。可以查看BIOS或带内工具的输出确认。
  3. 检查PcieAddrInfo_4Bus
    • 您将PcieAddrInfo_4Bus设为128,与BDFConfig_cpu1Bus初值一致,这是合理的。但需要确保带内上报的NPU卡(插在核心1的Slot4)的BDF中的Bus值也等于128(或128+偏移量,如果系统初始化后分配了新的总线号)。需要登录OS,使用lspci工具确认核心1下Slot4的NPU卡的实际Bus是多少。
  4. 确保拓扑链路建立正确pcie_device组件会基于您所有的BDFConfigPcieAddrInfoBusinessConnector来建立“CPU SerDes → 连接器 → 槽位”的拓扑。如果PortID(端口ID)在BDFConfigPcieAddrInfo中不一致,或者ContainerUIDContainerUnitType等关联标识不匹配,就无法正确建立链路。

总结建议
您当前的配置(增加BDFConfig_cpu1UnitConfiguration_BCU2)是正确的思路。但必须确保配置中的BusDevicePortID值与OS下通过lspci等工具查到的硬件BDF完全一致,并且**UnitConfiguration中的“Slot-Device”映射关系必须精确无误**。同时,务必追查那个不正常的19e51711-19e51711设备ID的来源,这是导致问题的最直接线索。

建议您首先定位并解决设备ID异常的问题,然后再根据实际的BDF值仔细核对所有配置项(特别是BusPortID),以确保拓扑链路能正确建立。

docs/docs/zh/development/develop_guide/feature_development/pcie_device_load_device.md-代码预览-docs:基于 Node.js 的社区文档中心项目 - AtomGit

参考这篇文件定位一下,主要看两个部分:

  1. bios上报的bdf,看一下对应上报的槽位几是这个卡的bdf,找到对应的pcieaddrinfo的socketid是否符合预期
  2. 看生成的丝印,通过上一步的slotid来找对应pcieaddrinfo的portid,看是否符合硬件预期