偶现固件包升级超时和Raid卡与BMC通信异常问题分析
更新时间: 2026/06/02
在Gitcode上查看源码

问题背景

  • 单板类型:920BS;
  • 软件版本:openUBMC 26.4.0.B001;
  • 涉及功能:存储;
  • 触发条件:博通RAID卡,产线接入30+希捷硬盘。
  • 业务表现:预期正常升级且RAID与BMC正常通信;实际固件包升级超时且RAID卡与BMC通信异常。

问题复现步骤

环境上接入博通的RAID卡,并且接上33个希捷硬盘。

关键日志信息

app.log日志信息:

定位过程

  1. 从日志上看,RAID卡通信超时,确认博通RAID卡管理链路(i2c over localbus)正常;
  2. 尝试更换希捷硬盘,查看问题是否仍然存在。更换后问题消失,查看硬盘资料确认希捷硬盘的日志会收集大量的SMART日志,带外获取数据量大,获取SMART日志的过程中,会独占i2c总线。
  3. 确认当前的BMC定义标准的接口用于扩展i2c功能,按当前发送和接收流程,均采用10 BYTE寄存器表示命令帧定义,其中的2BYTE还要用于读取数据,由于传输速率较低,会导致频繁的硬件访问和阻塞。

问题原因

storage代码仓博通卡管理大量硬盘的情况下,遇到硬盘周期收集日志时,会长时间占用总线,导致东芝riser卡固件升级时,无法占用总线进而升级超时;

解决方案

  • 硬件层面:BCU(BC83HBBJ)支持两路i2c master并行,多个博通raid卡需要接在多个riser下。
  • 软件层面:对于SML调用,如果dbus返回的错误为请求超时,将不产生raid卡通信丢失的告警;硬盘日志收集有多个硬盘由多个硬盘任务并行触发改为串行触发,减轻插件队列阻塞的情况,且每个硬盘日志之间收集间隔为10s;硬盘日志收集改为指定周期收集(24h);每次i2c交互后的等待时间由3ms增加到5ms,发送过快导致错误报文影响通信效率;将storlib库中的poll interval修改为30分钟,减少该任务对总线的占用。

PR链接

gitcodegitcodegitcode