PCIe网卡适配问题

问题描述

需要适配两张网卡,分别是Intel I350 和 Intel x710,两张网卡都没有和bmc在物理链路上有任何连接。网卡位置不固定,在Slot1-Slot7位置可选插。



请问按照上图,如下配置是否正确,目前无法收到bios bdf信息。
“PcieAddrInfo_NIC_1”: {
“Segment”: 0,
“GroupID”: 1,
“SlotID”: 1,
“SocketID”: 0,
“PortID”: 0,
“Bus”: 4,
“Device”: 24,
“Function”: 0,
“Location”: “CpuBoard${Slot}”,
“ComponentType”: 8,
“ContainerSlot”: “${Slot}”,
“ControllerIndex”: 0,
“ControllerType”: 1,
“ContainerUID”: “00000001020302064399”,
“ContainerUnitType”: “BCU”,
“GroupPosition”: “PcieAddrInfo_NIC_1_${GroupPosition}”
},
“PcieAddrInfo_NIC_2”: {
“Segment”: 0,
“GroupID”: 1,
“SlotID”: 2,
“SocketID”: 0,
“PortID”: 0,
“Bus”: 4,
“Device”: 16,
“Function”: 0,
“Location”: “CpuBoard${Slot}”,
“ComponentType”: 8,
“ContainerSlot”: “${Slot}”,
“ControllerIndex”: 0,
“ControllerType”: 1,
“ContainerUID”: “00000001020302064399”,
“ContainerUnitType”: “BCU”,
“GroupPosition”: “PcieAddrInfo_NIC_2_${GroupPosition}”
},
“PcieAddrInfo_NIC_3”: {
“Segment”: 0,
“GroupID”: 1,
“SlotID”: 3,
“SocketID”: 0,
“PortID”: 0,
“Bus”: 0,
“Device”: 8,
“Function”: 0,
“Location”: “CpuBoard${Slot}”,
“ComponentType”: 8,
“ContainerSlot”: “${Slot}”,
“ControllerIndex”: 0,
“ControllerType”: 1,
“ContainerUID”: “00000001020302064399”,
“ContainerUnitType”: “BCU”,
“GroupPosition”: “PcieAddrInfo_NIC_3_${GroupPosition}”
},
“PcieAddrInfo_NIC_4”: {
“Segment”: 0,
“GroupID”: 1,
“SlotID”: 4,
“SocketID”: 0,
“PortID”: 0,
“Bus”: 0,
“Device”: 12,
“Function”: 0,
“Location”: “CpuBoard${Slot}”,
“ComponentType”: 8,
“ContainerSlot”: “${Slot}”,
“ControllerIndex”: 0,
“ControllerType”: 1,
“ContainerUID”: “00000001020302064399”,
“ContainerUnitType”: “BCU”,
“GroupPosition”: “PcieAddrInfo_NIC_4_${GroupPosition}”
},
“PcieAddrInfo_NIC_5”: {
“Segment”: 0,
“GroupID”: 1,
“SlotID”: 5,
“SocketID”: 0,
“PortID”: 0,
“Bus”: 4,
“Device”: 28,
“Function”: 0,
“Location”: “CpuBoard${Slot}”,
“ComponentType”: 8,
“ContainerSlot”: “${Slot}”,
“ControllerIndex”: 0,
“ControllerType”: 1,
“ContainerUID”: “00000001020302064399”,
“ContainerUnitType”: “BCU”,
“GroupPosition”: “PcieAddrInfo_NIC_5_${GroupPosition}”
},
“PcieAddrInfo_NIC_6”: {
“Segment”: 0,
“GroupID”: 1,
“SlotID”: 6,
“SocketID”: 0,
“PortID”: 0,
“Bus”: 4,
“Device”: 20,
“Function”: 0,
“Location”: “CpuBoard${Slot}”,
“ComponentType”: 8,
“ContainerSlot”: “${Slot}”,
“ControllerIndex”: 0,
“ControllerType”: 1,
“ContainerUID”: “00000001020302064399”,
“ContainerUnitType”: “BCU”,
“GroupPosition”: “PcieAddrInfo_NIC_6_${GroupPosition}”
},
“PcieAddrInfo_NIC_7”: {
“Segment”: 0,
“GroupID”: 1,
“SlotID”: 7,
“SocketID”: 0,
“PortID”: 0,
“Bus”: 0,
“Device”: 4,
“Function”: 0,
“Location”: “CpuBoard${Slot}”,
“ComponentType”: 8,
“ContainerSlot”: “${Slot}”,
“ControllerIndex”: 0,
“ControllerType”: 1,
“ContainerUID”: “00000001020302064399”,
“ContainerUnitType”: “BCU”,
“GroupPosition”: “PcieAddrInfo_NIC_7_${GroupPosition}”
},

环境信息

  • 软件版本:OpenUBMC2512 LTS SP1

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

总结

当前问题的核心是使用了静态BDF配置方式,而openUBMC要求的是基于SocketID+PortID的动态发现机制。请按上述建议修改配置后重新测试,通常即可解决BDF信息无法接收的问题。若仍存在问题,请提供app.log中关于biospcie_device的相关日志片段以便进一步分析。

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

PCIe网卡适配问题分析与解决方案

根据您提供的详细信息,针对在OpenUBMC环境中适配Intel I350和x710网卡时遇到的"BDF信息无法收到"问题,结合系统架构和日志流程进行综合分析。

问题诊断

当前配置存在关键性错误

您提供的PcieAddrInfo_NIC_x配置存在原则性错误,主要问题在于手动指定了固定的Bus和Device值

"PcieAddrInfo_NIC_1": {
  "Bus": 4,
  "Device": 24,
  ...
},
"PcieAddrInfo_NIC_2": {
  "Bus": 4, 
  "Device": 16,
  ...
}

此配置方式违反了openUBMC动态加载PCIe设备的设计原则。在该架构中:

  • Bus/Device(即BDF地址)由BIOS在启动阶段动态分配
  • BMC应通过监听BIOS上报的BDF信息来动态识别设备位置
  • 预先固化Bus/Device值会导致设备匹配失败

正确的配置方法

正确的PcieAddrInfo配置应仅提供物理槽位的映射关系,而非具体的BDF地址

:white_check_mark: 推荐配置方案

"PcieAddrInfo_NIC_1": {
  "Segment": 0,
  "GroupID": 1,
  "SlotID": 1,
  "SocketID": 0,
  "PortID": 0,  // 关键:代表CPU端口号
  "Location": "CpuBoard${Slot}",
  "ComponentType": 13,  // NIC的标准类型码(非8)
  "ContainerSlot": "${Slot}",
  "ContainerUID": "00000001020302064399",
  "ContainerUnitType": "BCU"
},
// 同样模式配置 Slot 2-7

重点修改项

  • 移除 Bus, Device, Function 字段:这些由BIOS运行时确定
  • 修正 ComponentType:NIC的标准值为 13,而非 8
  • 确保 PortID 准确对应CPU PCIe控制器输出端口

BIOS BDF上报流程验证

上报机制原理

根据文档和知识图谱,完整流程如下:

sequenceDiagram
    participant BIOS
    participant BMC
    participant PCIe_Dev

    BIOS->>BIOS: 系统启动,发现PCIe设备
    BIOS->>BMC: 发送 IPMI 命令 WritePcieCardBdfToBmc
    BMC-->>BIOS: ACK响应
    BMC->>pcie_device组件: 更新资源树中的BDF信息
    pcie_device->>IMU/PMU: 查询四元组信息
    pcie_device->>D-Bus: 加载对应CSR配置

日志排查步骤

请依次检查以下日志以定位问题:

1. 检查BIOS是否尝试上报BDF

# 查看bios组件日志
grep -i "writepciecardbdftobmc" dump_info/LogDump/app.log
# 或搜索相关关键字
grep -i "pcie\|bdf\|bios" dump_info/LogDump/app.log | grep -v "silk"

预期应看到类似:

bios: Received WritePcieCardBdfToBmc command for Slot 3, BDF=0000:0b:00.0

2. 验证PCIeAddrInfo信息获取

# 检查bios是否成功读取PcieAddrInfo
grep "get_pcie_silk_config" dump_info/LogDump/app.log

成功日志示例:

bios: get_pcie_silk_config: Found 7 PCIe slots, generating silkconfig.json

3. 检查BMC侧是否接收并处理BDF

# 使用mdbctl查看当前PCIe状态
mdbctl -e 'select * from bmc.kepler.Systems.PcieAddrInfo'
# 或检查D-Bus对象
busctl tree xyz.openbmc_project.EntityManager

可能原因及解决方案

问题原因 检查方式 解决方案
PcieAddrInfo配置错误 mdbctl查看对象属性 移除手动设置的Bus/Device,使用SocketID+PortID定位
ComponentType错误 对比ComponentType=8 vs 13 修改为标准NIC类型13
BIOS未正确读取丝印信息 检查silkconfig.json是否存在 确保所有PcieAddrInfo配置完整且path正确
IPMI命令未注册/禁用 查看bios组件接口 确认WritePcieCardBdfToBmc接口可用
热插拔场景支持不足 热插拔时无反应 实现OCP卡热插拔方案中建议的在位信号检测机制

建议操作清单

  1. 立即修正配置
    • 删除所有手动指定的Bus, Device, Function
    • ComponentType改为 13(表示NIC)
  2. 重启系统并抓取日志
    journalctl -f -u xyz.openbmc_project.EntityManager > boot.log
    
  3. 确认silkconfig.json生成
    ls -l /data/opt/bmc/conf/bios/silkconfig.json
    cat /data/opt/bmc/conf/bios/silkconfig.json
    
  4. 验证BIOS能否获取信息
    • 检查是否包含您配置的Slot 1-7信息
  5. 联系BIOS团队确认
    • BIOS是否启用了WritePcieCardBdfToBmc上报功能
    • 是否存在机型限制或白名单机制

总结

当前问题的核心是使用了静态BDF配置方式,而openUBMC要求的是基于SocketID+PortID的动态发现机制。请按上述建议修改配置后重新测试,通常即可解决BDF信息无法接收的问题。若仍存在问题,请提供app.log中关于biospcie_device的相关日志片段以便进一步分析。

14060876_BCU_0.zip (9.8 KB)
sr配置和一键收集日志请见附件。
openUBMC_20380103-1806.tar.gz (7.8 MB)

docs/docs/zh/development/develop_guide/feature_development/pcie_device_topo_create.md-代码预览-docs:基于 Node.js 的社区文档中心项目 - AtomGit | GitCode
建议先依照这个排查,关于拓扑建立也可以参考 docs/docs/zh/development/develop_guide/feature_development/pcie_device_load_device.md-代码预览-docs:基于 Node.js 的社区文档中心项目 - AtomGit | GitCode

另外从带内看似乎是有PCIeSwitch特征,这边是用什么链路连接的?