// 此模板仅供参考,如果不适用可以修改
问题描述
PCIe卡概率出现LinkWidthAbility、LinkWidth、LinkSpeed、LinkSpeedCapability值为NA
环境信息
- 软件版本:OpenUBMC LTS SP1
数据源来自imu,求助是否有类似问题
// 此模板仅供参考,如果不适用可以修改
PCIe卡概率出现LinkWidthAbility、LinkWidth、LinkSpeed、LinkSpeedCapability值为NA
数据源来自imu,求助是否有类似问题
答案内容由AI生成,仅供参考:
当前问题主要归因于 PCIe BDF 映射异常 与 CSR/pcie_device 初始化流程不完整,导致链路能力字段未能正确读取。虽然设备已识别(FirmwareVersion、Model 正常),但动态性能属性缺失。
建议优先修复 BDF 地址异常问题,并核查 CSR 中关于 LinkWidth 和 MaxLinkRate 的配置完整性。
如有需要,可提供完整日志供进一步分析。
根据您提供的问题描述和上下文信息,部分 PCIe 网络适配器(如 Broadcom BCM957508-P2100G)在特定条件下出现 LinkWidth、LinkSpeed、LinkSpeedCapability、LinkWidthCapability、MaxPCIeType 等关键属性值为 "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 连接CPU10000:41:00.0,实际 RootBDF 显示为 0000:0f:00.0数据来源:IMU 提供 PCIe 设备信息
软件版本:OpenUBMC LTS SP1
结合知识图谱信息与文档内容,导致上述字段为 "N/A" 的主要原因可能包括以下几点:
BCM957508-P2100G PCIe卡在BMC升级或重启后,其Bus Number异常地显示为
0xf (15)而非预期的0x40。
0000:0f:00.0,不符合系统预期地址 0000:41:00.0。PSR、CSR 和 Topology 建立失败。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"。“BCM957508-P2100G 是 newly adapted network card model that may not be fully supported by the current Smart Provisioning software.”
PcieAddrInfo 对象未正确配置;Connector 的 ID 和 AuxID 未通过四元组(VendorID + DeviceID + SubVendorID + SubDeviceID)正确设置;BusinessConnector 中缺少 LinkWidth 和 MaxLinkRate 定义。
特别说明:PCIe 卡(尤其是 OCP/标卡)需通过 IdentifyMode=2 加载方式,由 BMC 查询 IMU 获取 BDF 四元组信息,并动态填充
Connector.ID和Connector.AuxID。若此流程中断,将导致后续链路信息无法加载。
# 在 OS 层使用 lspci 命令验证设备真实 BDF
lspci | grep -i broadcom
# 正常应显示类似:41:00.0 Ethernet controller: Broadcom BCM57508
若显示为 0f:00.0,则说明:
登录 BMC 查看 pcie_device 是否正常运行:
systemctl status pcie_device
# 或检查日志:
journalctl -u pcie_device --since "1 hour ago"
查看是否存在以下错误:
failed to initialize PCIe cardtimeout reading topology informationBDF mismatch detected请确认以下 CSR 对象已正确配置:
PcieAddrInfo 配置示例:"PcieAddrInfo_BCM957508": {
"SlotID": "PCIeRiser1",
"RootBDF": "0000:41:00.0",
"FunctionTypes": ["Net Card"]
}
PCIeCard 与 PCIeDevice 配置:"PCIeDevice_1": {
"DeviceName": "BCM957508-P2100G",
"FunctionClass": 2,
"DeviceType": "PCIe Card",
"SlotType": "x16"
}
BusinessConnector 设置链路能力:"Connector_PCIE_Riser1": {
"Name": "PCIeRiser1",
"Direction": "Downstream",
"Slot": 1,
"LinkWidth": "X16",
"MaxLinkRate": "PCIe 4.0",
"ConnectorType": "PCIe CEM"
}
必须确保
LinkWidth和MaxLinkRate明确设置,否则系统无法填充LinkWidthCapability等字段。
由于数据源来自 IMU,请确认以下接口返回值是否完整:
# 示例:查询 PCIe 设备函数信息
GET /redfish/v1/Systems/1/FabricAdapter/PCIeCard1/PCIeFunction
预期输出中不应包含 "N/A",而应为:
"LinkSpeed": "16.0GT/s",
"LinkWidth": "x16",
"MaxPCIeType": "GEN4"
如果仍为 "N/A",需进一步确认:
在知识图谱中,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
| 措施 | 说明 |
|---|---|
升级 BIOS 或调整 UEFI 设置,确保 BCM957508-P2100G 分配到正确的 Bus 0x40 及 BDF 41:00.0 |
|
补全 PcieAddrInfo、BusinessConnector.LinkWidth、MaxLinkRate 等字段 |
|
| 清除异常状态,重新触发设备枚举 | |
| 使用支持 BCM957508-P2100G 的新版 Provisioning 工具进行适配 | |
在 pcie_device 中启用 debug 模式,跟踪 getLinkSpeed()、getLinkWidth() 流程 |
当前问题主要归因于 PCIe BDF 映射异常 与 CSR/pcie_device 初始化流程不完整,导致链路能力字段未能正确读取。虽然设备已识别(FirmwareVersion、Model 正常),但动态性能属性缺失。
建议优先修复 BDF 地址异常问题,并核查 CSR 中关于 LinkWidth 和 MaxLinkRate 的配置完整性。
如有需要,可提供完整日志供进一步分析。
可以在pcie_device组件中找get_pcie_lang_info函数,在里面将debug日志级别调整为notice以上,看一下获取imu的返回,确实imu是否能读通以进一步判断
在带内确定一下这张卡的这些属性呢?
带内是什么命令可以获取这些属性呢,而且在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)