【问题求助】PCIe卡出现LinkWidth、LinkSpeed值为NA

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

问题描述

PCIe卡概率出现LinkWidthAbility、LinkWidth、LinkSpeed、LinkSpeedCapability值为NA

环境信息

  • 软件版本:OpenUBMC LTS SP1

数据源来自imu,求助是否有类似问题

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

结论

当前问题主要归因于 PCIe BDF 映射异常CSR/pcie_device 初始化流程不完整,导致链路能力字段未能正确读取。虽然设备已识别(FirmwareVersion、Model 正常),但动态性能属性缺失。

:wrench: 建议优先修复 BDF 地址异常问题,并核查 CSR 中关于 LinkWidth 和 MaxLinkRate 的配置完整性。

如有需要,可提供完整日志供进一步分析。

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

PCIe卡 LinkWidth、LinkSpeed 等值为“N/A”问题分析与排查建议

根据您提供的问题描述和上下文信息,部分 PCIe 网络适配器(如 Broadcom BCM957508-P2100G)在特定条件下出现 LinkWidthLinkSpeedLinkSpeedCapabilityLinkWidthCapabilityMaxPCIeType 等关键属性值为 "N/A" 的现象。该问题可能影响系统对硬件链路状态的监控、带宽告警判断及拓扑管理。


问题现象总结

  • 异常字段

    • LinkWidth = "N/A"
    • LinkSpeed = "N/A"
    • LinkSpeedAbility = "N/A"
    • LinkWidthAbility = "N/A"
    • LinkSpeedCapability = "N/A"
    • MaxPCIeType = "N/A"
  • 涉及设备

    • 型号:BCM957508-P2100G(即 NetXtreme-E Dual-port 100G QSFP56 Ethernet PCIe4.0 x16 Adapter)
    • 位置:通过 PCIeRiser1 连接
    • 关联 CPU:CPU1
    • 正常预期 BDF 地址应为 0000:41:00.0,实际 RootBDF 显示为 0000:0f:00.0
  • 数据来源IMU 提供 PCIe 设备信息

  • 软件版本:OpenUBMC LTS SP1


根本原因分析

结合知识图谱信息与文档内容,导致上述字段为 "N/A" 的主要原因可能包括以下几点:

1. PCIe Bus Number 异常导致硬件枚举失败

  • 在知识库中明确指出:

    BCM957508-P2100G PCIe卡在BMC升级或重启后,其Bus Number异常地显示为 0xf (15) 而非预期的 0x40

  • 实际 BDF 地址为 0000:0f:00.0,不符合系统预期地址 0000:41:00.0
  • 此类异常会导致:
    • BMC 无法正确通过标准 PCI 配置空间读取设备能力(如 Link Speed/Width);
    • pcie_device 组件在初始化时无法完成设备发现,导致关键属性缺失;
    • 依赖 BDF 正确映射的 PSRCSRTopology 建立失败。

2. pcie_device 组件初始化失败或数据获取异常

  • pcie_device 是 OpenUBMC 中负责管理 PCIe 拓扑、链路信息的核心模块。
  • pcie_device 服务未能正常启动或与 BIOS/IPMI 通信异常,则无法获取链路能力信息。
  • 知识图谱中提到:

    pcie_device reported a failure while initializing the PCIe card.
    pcie_device plays a role in discovery, configuration, and initialization of PCIe devices.

  • pcie_device 无法从 BIOS 成功读取拓扑信息时,系统将默认填充 "N/A"

3. Smart Provisioning 或 CSR 配置不完整

  • 文档显示 BCM957508-P2100G 是一种 新适配型号

    “BCM957508-P2100G 是 newly adapted network card model that may not be fully supported by the current Smart Provisioning software.”

  • 若 CSR(Control and Status Register)配置中缺失如下配置,会导致链路能力字段无法解析:
    • PcieAddrInfo 对象未正确配置;
    • ConnectorIDAuxID 未通过四元组(VendorID + DeviceID + SubVendorID + SubDeviceID)正确设置;
    • BusinessConnector 中缺少 LinkWidthMaxLinkRate 定义。

:pushpin: 特别说明:PCIe 卡(尤其是 OCP/标卡)需通过 IdentifyMode=2 加载方式,由 BMC 查询 IMU 获取 BDF 四元组信息,并动态填充 Connector.IDConnector.AuxID。若此流程中断,将导致后续链路信息无法加载。


验证与排查建议

:white_check_mark: 1. 检查 PCIe BDF 地址是否正常

# 在 OS 层使用 lspci 命令验证设备真实 BDF
lspci | grep -i broadcom
# 正常应显示类似:41:00.0 Ethernet controller: Broadcom BCM57508

若显示为 0f:00.0,则说明:

  • BIOS 或 PCIe 总线重映射异常;
  • Root Complex 设置错误;
  • SerDes 或 Riser 卡链路协商异常。

:white_check_mark: 2. 确认 pcie_device 服务运行状态

登录 BMC 查看 pcie_device 是否正常运行:

systemctl status pcie_device
# 或检查日志:
journalctl -u pcie_device --since "1 hour ago"

查看是否存在以下错误:

  • failed to initialize PCIe card
  • timeout reading topology information
  • BDF mismatch detected

:white_check_mark: 3. 核查 CSR 配置完整性

请确认以下 CSR 对象已正确配置:

(1)PcieAddrInfo 配置示例:

"PcieAddrInfo_BCM957508": {
  "SlotID": "PCIeRiser1",
  "RootBDF": "0000:41:00.0",
  "FunctionTypes": ["Net Card"]
}

(2)PCIeCardPCIeDevice 配置:

"PCIeDevice_1": {
  "DeviceName": "BCM957508-P2100G",
  "FunctionClass": 2,
  "DeviceType": "PCIe Card",
  "SlotType": "x16"
}

(3)BusinessConnector 设置链路能力:

"Connector_PCIE_Riser1": {
  "Name": "PCIeRiser1",
  "Direction": "Downstream",
  "Slot": 1,
  "LinkWidth": "X16",
  "MaxLinkRate": "PCIe 4.0",
  "ConnectorType": "PCIe CEM"
}

:warning: 必须确保 LinkWidthMaxLinkRate 明确设置,否则系统无法填充 LinkWidthCapability 等字段。


:white_check_mark: 4. 检查 IMU 数据接口是否正常返回

由于数据源来自 IMU,请确认以下接口返回值是否完整:

# 示例:查询 PCIe 设备函数信息
GET /redfish/v1/Systems/1/FabricAdapter/PCIeCard1/PCIeFunction

预期输出中不应包含 "N/A",而应为:

"LinkSpeed": "16.0GT/s",
"LinkWidth": "x16",
"MaxPCIeType": "GEN4"

如果仍为 "N/A",需进一步确认:

  • IMU 是否能正确访问 PCIe 配置空间;
  • 是否因权限或寄存器访问超时导致读取失败。

:white_check_mark: 5. 参考类似案例处理方式

  • 在知识图谱中,zybwh(openUBMC 核心维护者)曾建议:

    “verify visibility of Connector_PCIE_6 in hwdiscovery resource tree”
    “analyze system logs to resolve errors”

  • 建议执行命令检查硬件自发现树:

    dbus-send --print-reply --system --dest=org.openbmc.DeviceInventory /bmc/kepler/pcie_device org.freedesktop.DBus.Properties.Get string:org.openbmc.pcie_device string:DeviceInfo
    

解决方案建议

措施 说明
:wrench: 修正 BDF 地址映射 升级 BIOS 或调整 UEFI 设置,确保 BCM957508-P2100G 分配到正确的 Bus 0x40 及 BDF 41:00.0
:package: 完善 CSR 配置 补全 PcieAddrInfoBusinessConnector.LinkWidthMaxLinkRate 等字段
:counterclockwise_arrows_button: 重启 pcie_device 服务 清除异常状态,重新触发设备枚举
:hammer_and_wrench: 更新 Smart Provisioning 使用支持 BCM957508-P2100G 的新版 Provisioning 工具进行适配
:test_tube: 增加日志调试 在 pcie_device 中启用 debug 模式,跟踪 getLinkSpeed()getLinkWidth() 流程

附加说明:硬件兼容性

  • 该卡已在如下平台部署:
    • :white_check_mark: Taishan2280_5280
    • :white_check_mark: KunLun2280V3
  • 建议核对目标服务器型号是否在其兼容列表中。

结论

当前问题主要归因于 PCIe BDF 映射异常CSR/pcie_device 初始化流程不完整,导致链路能力字段未能正确读取。虽然设备已识别(FirmwareVersion、Model 正常),但动态性能属性缺失。

:wrench: 建议优先修复 BDF 地址异常问题,并核查 CSR 中关于 LinkWidth 和 MaxLinkRate 的配置完整性。

如有需要,可提供完整日志供进一步分析。

可以在pcie_device组件中找get_pcie_lang_info函数,在里面将debug日志级别调整为notice以上,看一下获取imu的返回,确实imu是否能读通以进一步判断

加日志复现了,出问题时确实是从imu获取出来的数值是全0

image

在带内确定一下这张卡的这些属性呢?

带内是什么命令可以获取这些属性呢,而且在bmc是概率出现的值为NA,得在同一时间能抓到带内信息才有价值,比较难实现

带外实际上是从imu捞取的信息,带内通过指令lspci -s bb:dd.f -vv可以确定指定BDF的卡的pci配置空间,如果想直观看出速率、带宽等信息可以使用 | grep -E 'LnkSta|Speed|Width’过滤,这样能直接看到带内识别到的这张卡的协商速率和带宽

复现日志,复现时带内lspci查询数据正常,BMC查询为N/A
ipmi.txt (1.7 MB)
dump_2102315HMJ10R9100011_20260326-1541.tar.gz (9.0 MB)

由于imu调用比较频繁,出于防止刷屏的考虑,不开启debug级别日志的情况下基本不会打印。因此日志没有可用于定位的信息。

当前推测还是调用的时候概率性通道不同,可以在PCIeCard捞取速率的时候打印日志,观察ipmi命令返回值,根据出错时的返回值确定实际错误。

针对PCIe Card 2 (9540-8i)的link信息等字段显示NA,对ipmi.txt中的命令进行解析,ipmi中关键词为“7C 00”,完整请求命令记录为“44 00 07 db 00 7c 00 80 01 03”
但是日志收集时间为0226/03/26 15:43,ipmi.txt中第一条有效响应的相关命令是15:42。就是在一键收集后抓的ipmi,导致ipmi分析结果和日志对不上。麻烦重新复现一下。
复现要求:
1、复现后不要再重启BMC(看到日志中固定间隔复位BMC)
2、ipmi trace要和复现场景产生交集窗口(trace完后一键收集)
3、打开对应组件的debug日志(增加日志可定位性)

新复现日志
KunLun2280V2_2102315QRX10S1100003_20260602-0646.tar.gz (9.1 MB)
ipmi.txt (349.8 KB)


06:41:53.923888 sync_pcie_addr_info, name=SlotID, value=3, position=0101010303 

06:41:53.935449 sync_pcie_addr_info, name=SlotID, value=3, position=0101010303

看起来是一个网卡触发了2个get_pcie_lang_info的任务,导致内部竞争了

一个网卡只会有一个协程,这个后面再看一下吧

那针对PCIe卡出现LinkWidth、LinkSpeed值为NA或者错误的值的现象有什么结论或者建议的修复方案吗

从日志和相关代码来看,推测是sync_pcie_addr_info_to_device这个函数中两个fork的协程都进入了,由于当前只有这边这张raid卡,建议在其中加打印确定是否是这两个fork中二次进入(理论上sync_remaining_pcie_addr_info和sync_pcie_addr_info分支只会进入一个),如果后续确实存在问题社区会优化代码。

你好,我们这里也复现了类似的问题,看日志像是多张卡重复加载了多次的样子,不一定每次能复现,该卡是300I Duo
对应日志如下:
app.log.2.gz (226.9 KB)

单raid+双网卡,也复现了类似的问题。