目前碰到2个博通200G网卡(2和11槽位)在web界面的网络适配器和pcie卡界面总线信息显示不一致问题,排查为以下:
1.web界面的网络适配器的总线信息通过在os下lspci查看像是桥bdf,不是实际的rootbdf,实际的是Bus Device Function(BDF),NetworkAdapter为以下信息:
2.查看sr文件,网卡的BDF信息来源于PCIeDevice,与pciecard的bdf来源一致
3.查看network的lua代码发现rootBDF和Bus Device Function(BDF)应该是一样的:
4.查看日志没有发现rootbdf被修改的痕迹,一直是80:00.0,但是资源树和web上都显示a2:00.0
问题:
1.rootbdf有可能在哪个过程中被修改呢,有可能和pcie槽位有关吗?
2.网卡的rootBDF和Bus Device Function(BDF)有什么区别?
在pcie_device中,rootBDF是设备上一级(PCIe桥)的BDF,来自于持久化数据库或CSR。对应的字段是PCIeDevice资源树对象的Bus、Device、Function以及PcieAddrInfo对象的Bus、Device、Function。BDF对应的设备的BDF,对应的字段是PCIeDevice资源树对象的DevBus、DevDevice、DevFunction,来自于持久化数据库、BIOS上报或CSR。
网卡的对应属性可以参考其来源,如果是从资源树对象PCIeDevice上拿取的待Dev字段的BDF则为BDF,如果是从不带Dev字段拿取的BDF为rootBDF。
RootBDF随CSR配置在BDFConfig对象上,通过SocketId、PortId、ControllerIndex字段同步到对应位置的PcieAddrInfo上,同时BDFConfig本身也会被持久化。
我理解的是如果csr不做修改,pcie卡有bdf(桥bdf)和devbdf(设备bdf),网卡的话在其属性下多了一个rootbdf,从其来源看,它的值应该和其所在槽位的pcie的bdf一致,可在update_root_bdf上看到。可能来自pcieaddrinfo,所以pcie下的bdf和网卡的rootbdf的区别是?
rootBDF就是桥bdf,network_adapter组件中使用Bus Device Function三个属性拼接了RootBDF这个属性,来源是之前说的PCIeDevice上的Bus Device Function三个属性,也就是rootBDF,可以在代码中检索 self.RootBDF = val 。代码内部的rootBDF指的就是桥bdf。