需求背景:外购PCIe卡/支持standby独立供电/不支持热插拔
加载方式选择:
"IdentifyMode": 1
--需要在BIOS启动前即加载该网卡,以满足散热需求,识别方式为BoardId可读类型组件,不依赖BIOS上报信息
问题1 BMC启动后,概率出现卡对象加载,但卡相关的传感器值都为0,查看framework.log相关加载日志,出现网卡加载后卸载又加载,提示传感器读值关联的Scanner
对象均加载失败,报错信息为error: kepler.class.ClassDuplicateDefined
原因 网卡在位寄存器的Scanner默认配置成了在位,在进行在位信号防抖处理时网卡状态默认配置为不在位,造成卡会出现误加载后卸载再加载现象,该过程间隔时间过短,导致卸载过程未完全结束又进行了下一次加载,概率出现网卡温度监控相关对象重复加载报错
解决方案
1.由于该网卡不支持热插拔,将网卡的在位信号扫描周期调整为8s,避免出现卡卸载或加载过程被异常中断的现象;
2.将网卡在位默认值修改为不在位(9555指示在位时,有低电平指示在位的场景,不可无脑将对应Scanner默认值设置成0),避免出现iBMC启动时误加载的问题。
问题2 BMC复位后,概率出现网卡未加载
原因 智能网卡在业务场景下,会虚拟出一些PCIe端口,导致网卡槽位下的四元组信息不再是网卡本身的信息,而虽然我们已经将连接器的"IdentifyMode"
设置为1,PCIe卡加载仍会受到带内四元组信息的影响;
因此BMC重启时,如果从持久化数据中解析完BDF信息并计算四元组的时间早于从硬件信息读取网卡在位信号的时间,则网卡连接器的加载信息会被修改成业务场景不准确的四元组信息,使得网卡配置加载失败
解决方案 PCIe设备模块中调整逻辑:"IdentifyMode"
为1的卡配置加载不受BIOS上报BDF和四元组的影响,如果硬件在位则加载配置