拔掉pcie网卡,有报错但是收不到fdm信息

问题描述

进入系统后,拔掉pcie网卡,dmesg有报错,收不到fdm信息

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2512]

  • bios中开启FDM上报开关

操作步骤

platform.sr中定义fdm信息上报命令字定义:

    "RestrictedIPMICmdList_WSetFdmInfoIPMICommand" : {
        "ReadWrite": "0x01",
        "NetFunction":"0x30",
        "Command": "0x92",
        "ChanProtocol" : "0x08",
        "Data" : ["0xdb", "0x07", "0x00", "0x17"],
        "ShiedFlag": 1
    },
    "RestrictedIPMICmdList_WSetFdmErInfoIPMICommand" : {
        "ReadWrite": "0x01",
        "NetFunction":"0x30",
        "Command": "0x92",
        "ChanProtocol" : "0x08",
        "Data" : ["0xdb", "0x07", "0x00", "0x18"],
        "ShiedFlag": 1
    },

打开ipmb调试日志:
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/Debug/IpmiCore/TraceIpmi bmc.kepler.Debug.IpmiCore.TraceIpmi Trace a{ss}bsyyss 0 true "ipmb" 0xff 0xff "" "file"

分析日志:
/tmp/ipmi.tx  中未收集到fdm基础信息和fdm错误信息,搜不到92 DB 07 00 18和92 DB 07 00 17



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

四、总结

目前知识库中没有直接针对“拔掉PCIe网卡收不到FDM信息”的根因结论,但结合FDM机制和IPMI命令链路信息,可以初步断定问题出在以下某一环节:BIOS未生成/未上报FDM记录命令通道与调试通道不匹配平台命令配置将命令屏蔽,或底层IPMI通信异常。建议按照上述步骤逐步排查,重点确认BIOS是否实际发送了命令,以及发送所走的通道。

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

根据您提供的问题描述和排查信息,结合知识库中的相关内容,对“拔掉PCIe网卡后有报错但收不到FDM信息”的问题进行如下分析。

一、FDM信息上报机制概述

  • FDM(Fault Detection and Management) 是BIOS级别的故障检测与管理组件,负责记录PCIe等硬件设备的错误事件,并在系统启动/重启时重置。
  • BIOS通过IPMI命令将FDM故障信息上报给BMC,相关命令包括:
    • Set FDM Info(设置故障诊断特性辅助信息):NetFn 30h,CMD 92h,子命令 17h
    • Set FDM errinfo(故障信息上报):NetFn 30h,CMD 92h,子命令 18h
    • Get FDM Info(读取FDM相关信息):NetFn 30h,CMD 90h,子命令 55h
  • 您已在 platform.sr 中正确配置了上述命令字,并打开了IPMB调试日志,但 /tmp/ipmi.txt 中未捕获到 92 DB 07 00 1792 DB 07 00 18 这两个命令请求,说明BMC侧没有收到BIOS上报的FDM信息。

二、可能原因分析

根据知识库中已有的相关信息,以下原因可能导致“收不到FDM信息”:

1. 监控通道不匹配

您打开的是 IPMB通道 的跟踪日志(traceipmi ... "ipmb"),但FDM信息上报可能并非通过IPMB通道传输。知识库中提到:

  • SetFDMInfoMultiSystemPCIeAddrInfo 命令是**通过带内通信(in-band)**在BIOS启动期间接收完整PCIe设备拓扑的;
  • traceipmi 命令可指定不同的通道(如 btkcs)进行跟踪。

因此,如果BIOS实际是通过带内通道(如KCS/BT)发送FDM命令,则在IPMB日志中自然搜索不到。

2. BIOS可能未触发FDM上报

  • FDM是BIOS级组件,在开机和重启过程中重置
  • 您描述的是进入系统后热拔插PCIe网卡,此时BIOS是否会产生FDM记录并主动上报,取决于FDM框架对该事件的处理逻辑。若该操作未触发BIOS的FDM错误上报流程,BMC就不会收到对应命令。

3. 命令被平台策略屏蔽

您在 platform.sr 中使用的是 RestrictedIPMICmdList(受限IPMI命令列表),且 ShiedFlag 字段值为 1。知识库中虽未明确说明该字段含义,但“受限命令列表”本身可能带有过滤或屏蔽机制,需确认该配置是否真正允许了这两个命令字,而非错误地将它们屏蔽。

4. 权限问题

知识库中提到,Get FDM InfoSet FDM Info 等命令需要 DiagnoseMgnt 权限。如果发起命令的会话或用户权限不足,BMC可能会拒绝处理。不过您的日志中连命令请求都未出现,说明命令可能未到达BMC或被更早的环节拦截。

5. 与已知IPMI命令失败现象的关联

知识库中存在类似问题的日志记录:

pcie_device ERROR: pcie_card.lua(190): get pci register info failed, error: 195
network_adapter ERROR: init.lua(83): get pci register info failed, error: 195

这说明在某些环境下,IPMI命令获取PCIe信息会失败(错误码195)。若FDM上报也依赖类似的IPMI链路,则可能因同一底层原因导致命令无法正常送达BMC。

三、建议的排查步骤

基于知识库中已有的方法,建议按以下方向继续定位:

  1. 扩大跟踪范围,确认命令是否走其他通道
    使用 mdbctltraceipmi 命令同时监控多个通道,例如:

    mdbctl traceipmi start file bt
    

    查看 /tmp/ipmi.txt 中是否有其他通道的IPMI消息记录。若命令确实存在但不在IPMB日志中,则说明通道判断有误。

  2. 主动查询BMC侧FDM记录
    使用 Get FDM Info 命令主动查询FDM故障记录条数,确认BMC中是否已有FDM数据:

    • NetFn 30h,CMD 90h,子命令 55h,Command Type 01h(获取故障记录编号)。
      如果主动查询也返回空,说明BIOS侧确实未产生FDM记录。
  3. 检查BIOS侧FDM上报条件
    确认BIOS中FDM上报开关是否真正生效,以及热拔插事件是否满足FDM记录生成条件。知识库指出“是否需要更换要根据实际故障类型、故障场景综合考虑”,并非所有故障都会留下FDM记录。

  4. 核查 platform.sr 配置
    核对 RestrictedIPMICmdList 中的 NetFunctionCommandData 数组是否与实际BIOS发送的命令完全一致,并确认 ShiedFlag 等字段不会屏蔽命令接收。

  5. 关注BMC侧相关组件日志
    查看 pcie_devicenetwork_adapter 等组件的日志,是否存在类似 get pci register info failed, error: 195 的报错,以判断IPMI通信链路是否异常。

四、总结

目前知识库中没有直接针对“拔掉PCIe网卡收不到FDM信息”的根因结论,但结合FDM机制和IPMI命令链路信息,可以初步断定问题出在以下某一环节:BIOS未生成/未上报FDM记录命令通道与调试通道不匹配平台命令配置将命令屏蔽,或底层IPMI通信异常。建议按照上述步骤逐步排查,重点确认BIOS是否实际发送了命令,以及发送所走的通道。

TraceIpmi无相关日志,说明BMC未接收到BIOS上报FDM信息,可向BIOS询问BIOS处前置动作(如开关等)是否完成