现象:插上300I DUO 卡以后,Chip温度和功率获取不到,出风口和入风口温度低概率获取到。
我们在鲲鹏920B基础板上加了switch,I2C扩展通过smc forward的方案进行透传。我们的SMC forward是通过CPLD实现,每次向NPU发命令,都需要通过CPLD进行转发。查看文档后,NPU卡在获取温度等信息时,需要先写一个命令,再去读一个命令。才能拿到数据。
分析:
1. 首先通过tracechip命令查看读取NPU的数据,发现全是FF。
2. 接下来我们抓取I2C上的数据,看一下BMC读到的,和从NPU发出来的是否一致。在抓取后,我们发现在BMC发送写命令后,cpld会进行转发,但是由于读写的间隔比较小,大概率cpld还没有转发完成,新的命令就会又发下来了,这样就会造成异常。具体如图所示:
我们做了分析,因为这里采用软件实现smc forward方案,需要cpld转发,所以传输速率会比使用硬件方案慢很多,再加上NPU读取信息分为两步,这里就很容易会出问题。
3. 在将读写之间延时增长后,出风口,入风口温度可以显示,但是Chip温度还是没有,升级固件驱动后,全部正常。
1 个赞
YMQMKK
(wuzhou-xiaokaili)
2
想咨询一下 ,你们在switch上有使用过华为300ipro吗?我发现在AicoreTemp有些槽位很快就读到了 有些槽位很久才能读到该值。
我们没有使用,这个好像是华为已经适配了吧,这个是不是要问一下硬件,看看这些槽位是否有设计差异?再看一下在华为的机型上的读取情况
YMQMKK
(wuzhou-xiaokaili)
4
是的 华为已经适配了。我们再试试看用其他华为机器验证一下吧
你好,请问一下通过SMC转发NPU读写协议应该在哪里配置?如何配置?另外就是涉及到PCA9545这种连接多个NPU时需要通道选通要怎么处理?
我们是CPLD实现的转发,BMC这边发给CPLD ,cpld在发iic发给npu,npu返回给cpld,再打包成smc规范的包发回BMC
嗯,我们的流程基本上也是这样计划的。我了解到这种方案需要将访问NPU信息的i2c数据封装到SMC协议里面,然后CPLD去解析并转发。那BMC这边需要怎么去配置访问NPU信息走SMC协议,应该怎么封装数据,数据格式是怎么样的?这个有相关资料吗?
在你的switch板上只需要配置对Smc_EnclSMC就可以,具体你可以参考硬盘背板,硬盘背板使用的SMC forword