问题背景
- 单板类型:NA;
- 软件版本:NA;
- 涉及功能:raid;
- 触发条件:使用mctp协议的raid卡。
- 业务表现:预期raid卡信息正常显示;实际使用mctp协议的3152,8204都出现无法显示详细信息,os下lspci能够查询到。
问题复现步骤
- 使用mctp协议的3152,8204都出现无法显示详细信息。
- os下lspci能够查询到详细信息。
- 组件storage根据测试结果,9560-8i在tag 1.80以下版本能够正常显示全部信息,1.80以上显示都存在问题。
关键日志信息
bios已经返回正常的bdf号后,继续定位日志,发现mctpd能够添加switch芯片的eid,但是3152该卡的eid还是没有正常添加。 重启OS,发现mctpd其实是有发出 TargetPhyAddr=131请求
定位过程
根据raid卡适配指导,使用"busctl --user introspect bmc.kepler.mctpd /bmc/kepler/Systems/1/Mctp/MctpBinding"命令,查看bmc.kepler.Systems.Mctp.MctpBinding.PCIe接口下的.BmcEid和.BmcPhyAddr均不为0,bmc.kepler.Systems.Mctp.MctpBinding.SMBus下的.BmcEid和.BmcPhyAddr均为0 。
通过代码跟踪storage组件mctp_service.lua日志打印提示卡在了[Storage] Get BMC Mctp info failed,但是mctp_lib.get_mctp_pcie_binding部分涉及闭源包。
luafunction mctp_service:prepare() log:notice('mctp_service:prepare') if not self.os_state then log:notice('not self.os_state') return end local obj = mctp_lib.get_mctp_pcie_binding(self.bus) if not obj then log:notice('[Storage] Get BMC Mctp info failed') return end -- 将BMC的mctp信息传递给C库的线程 sml.mctp_infos.set_bmc_mctp_info(obj.BmcEid, obj.BmcPhyAddr) self.mctp_state = true log:notice('[Storage] mctp prepare finished. bmc_eid = %s bmc_phy = %s state = %s', obj.BmcEid, obj.BmcPhyAddr, self.mctp_state) end查看日志在/var/log/app.log中有没有如下的打印:
在/var/log/app.log里面搜索目标raid的SR名称,发现没有加载的日志。
定位出问题:是卡在下面代码处,设备BDF出现问题,需要在sr手动写死该配置。
luaif self.DevBus == 0 and self.DevDevice == 0 and self.DevFunction == 0 thenbios已经返回正常的bdf号后,继续定位日志,发现mctpd能够添加switch芯片的eid,但是3152该卡的eid还是没有正常添加.
重启OS,发现mctpd其实是有发出 TargetPhyAddr=131请求 该请求实际是Storage向mctp发起的注册请求,代表软件层识别到此raid卡,但mctp并未在路由中查找到131(从图中mctp_routing_table: del日志可以看到只有13 17 138),可能的原因:
- 此raid不支持mctp
- IMU与该raid卡未建链或建链失败
PAE协助排查后,发现是switch板固件屏蔽mctp导致
问题原因
switch板固件屏蔽mctp导致。
解决方案
更换解决问题后的switch固件或替换支持MCTP的switch。