丝印上报总结分享

概述

  • BMC与BIOS通过IPMI命令交互是一种用途比较广泛的交互方式。在天池机型上,BIOS通过IPMI命令从BMC读取丝印信息就是其中一种

  • BIOS启动时,通过ReadFileFromBmc这条IPMI命令从BMC读取丝印文件silkconfig.json,解析丝印文件后,更新到BIOS人机界面、SMBIOS等

  • 丝印信息当前包括内存、PCIe设备、板载网卡、直通硬盘,即将实现CPU的丝印信息上报

  • ReadFileFromBmc的实现可见bios组件仓

  • silkconfig.json已支持一键收集时获取,路径为dump_info/AppDump/bios

MemSilk

  • 基于Memory对象实现,包含CpuId、ChannelId、LogicalChannelId、DimmId、DimmName属性。DimmName作为内存丝印信息,最终会体现到SMBIOS中

  • BIOS会通过WriteSmbiosData这条IPMI命令发送SMBIOS数据给BMC,BMC通过内存丝印信息来匹配Memory对象,从而更新内存静态信息

  • WriteSmbiosData的实现可见bios组件仓

  • SMBIOS_CONF已支持一键收集时获取,路径为dump_info/AppDump/bios

PCIeSilk

  • 基于ComponentType为NVMe(2)、PCIe(8)、OCP(83)的PcieAddrInfo对象实现,包含Segment、SocketID、PortID、SlotID以及类型属性

  • BIOS会通过WritePcieDiskBdfToBmc、WritePcieCardBdfToBmc、WriteOcpCardBdfToBmc将3种类型设备的BDF号传给BMC

  • BMC根据BDF号向BIOS查询对应PCIe槽位的四元组信息,从而加载对应的CSR

  • WritePcieDiskBdfToBmc、WritePcieCardBdfToBmc、WriteOcpCardBdfToBmc的实现可见bios组件仓

  • 加载PCIe设备CSR的流程可见pcie_device组件仓

NICSilk

  • 基于ComponentType为NIC(13)的PcieAddrInfo对象实现,包含SocketID、SlotID属性

  • 这种丝印类型针对的是板载网卡。BMC暂无应用场景

DiskSilk

  • 基于ControllerType为SAS(2)和SATA(3)的PcieAddrInfo对象实现,包含SocketID、PortID、SlotID、RootBDF等属性

  • 这种丝印类型针对的是CPU直出硬盘,不经过RAID卡管理,这些硬盘的信息需要通过BMA上报。有以下几个关键流程:

1、BMA基于rootBDF向BMC获取硬盘的丝印号

2、BMA将获取到的直通盘信息连同丝印号挂到BMC的资源协作路径上

3、storage组件通过丝印号来匹配Drive对象,匹配成功则将直通盘信息赋给对应的Drive对象

8 个赞

请教一个问题,关于DiskSilk,第一步 “BMA基于rootBDF向BMC获取硬盘的丝印号”,具体是通过什么方式呢,是ipmi命令吗,有什么方法能手动调试看是否配置正确?当前遇到的问题是配置了与带内一致的rootBDF,但BMA没有获取到丝印导致硬盘信息没有匹配上。

是的,通过IPMI命令。具体问题定位建议另外发帖求助,描述详细问题现象

bmc需要向bios提供nvme丝印文件,bios才能获取nvme的信息。请问nvme的丝印格式及数据来源是如何的呢?

你们用的是华为的bios吗

是的,bios也是通过ReadFileFromBmc获取bmc的silkconfig.json,但是nvme在silkconfig.json的格式不知道。

理论上NVMe应该也是PCIeSilk这种格式类型,ComponentType为NVMe(2)。来源也是PcieAddrInfo对象,格式可参考一键收集中的silkconfig.json。代码见bios仓的prepare_silk_config函数

是的,我看代码分析后,也是如您所说。

BMC 准备silkconfig.json又是怎么做的呢?
silkconfig.json如果没有生成,应该怎么定位呢

1、这部分代码在bios仓的prepare_silk_config。对于不同的丝印类型会访问不同的资源协作路径,具体的对应关系可以参考这篇总结
2、建议先通过增加打印的方式进行定位

CPU通过SerDes接UBC直出的NVMe盘,是走DiskSilk还是PCIeSilk?

ComponentType为NVMe(2),应当是 PCIeSilk

pcie槽和cpu portid的对应关系,在csr对象配置上,一般按下图连接 bcu—>psr—>ieu—>pcieaddrinfo来生成丝印信息。

那么对于从cpu直出nvme盘的情况,在csr文件配置上,是bcu–>pcieaddrinfo吗?即在bcu里描述pcieaddrinfo

如果没有Riser,那可以在BCU配

你好,请教下,我手上有块板子也是Serdes通过UBC直接 接的PCIe设备,请问下这个Serdes和BCU下行连接器的Port的对应关系是怎么确定的呀?如下图的PCIE控制器0,它被一分为二,当做两个X4再用,怎么确定Serdes和BCU下行连接器的关系呀?