chip访问插件PluginRequestEx是否支持配置超时时间

问题背景

现象描述

跑OS reboot测试的时候ipmitool sdr list概率性出现读取网卡温度失败(FR:1/200)
PCIe NIC3 Temp | ns | No Reading
PCIe NIC1 Temp | ns | No Reading

拓扑结构

Hisport_12
├─Eeprom_3_9_010101
└─Pca9545_PCA9545_01010109
  ├─Channel_2
  │ └─Chip_RaidChip_0101010901
  └─Channel_3
    ├─Pca9555_IO_01010109
    └─Chip_MCU1_01010109
      └─Channel_0
        └─Eeprom_IEU_01010109
Hisport_18
├─Eeprom_3_3_010101
└─Pca9545_PCA9545_01010103
  ├─Channel_0
  │ └─Chip_TempChip_0101010301
  ├─Channel_1
  │ └─Chip_I2c_0101010302
  ├─Channel_2
  │ └─Chip_TempChip_0101010303
  └─Channel_3
    ├─Pca9555_IO_01010103
    ├─Chip_MCU1_01010103
    │ └─Channel_0
    │   └─Eeprom_IEU_01010103
    └─Lm75_LM75_01010103

初步分析

日志分析

查看app.log可以发现两张RAID卡对应的chip访问插件超时都很严重

2026-04-21 21:49:04.342799 storage WARNING: init.lua(767): service[bmc.kepler.storage] request timeout: remote service[bmc.kepler.hwproxy], path[/bmc/kepler/Chip/Complex/Chip_RaidChip_0101010901], interface[bmc.kepler.Chip.BlockIO], method[PluginRequestEx], used time[116s]
2026-04-21 21:49:04.662633 storage WARNING: init.lua(767): service[bmc.kepler.storage] request timeout: remote service[bmc.kepler.hwproxy], path[/bmc/kepler/Chip/Complex/Chip_RaidChip_0101010901], interface[bmc.kepler.Chip.BlockIO], method[PluginRequestEx], used time[116s]
2026-04-21 21:49:04.671878 storage WARNING: init.lua(767): service[bmc.kepler.storage] request timeout: remote service[bmc.kepler.hwproxy], path[/bmc/kepler/Chip/Complex/Chip_RaidChip_0101010901], interface[bmc.kepler.Chip.BlockIO], method[PluginRequestEx], used time[114s]

2026-04-21 21:53:54.556930 storage WARNING: init.lua(767): service[bmc.kepler.storage] request timeout: remote service[bmc.kepler.hwproxy], path[/bmc/kepler/Chip/Complex/Chip_I2c_0101010302], interface[bmc.kepler.Chip.BlockIO], method[PluginRequestEx], used time[91s]

查看hw_stream.log也有很多Riser Pca9545切换通道失败和Scanner扫描周期延长的情况

2026-04-22 10:13:20.671196 storage_plugin ERROR: scan_context.lua(123): bus: Hisport_18, chip: Pca9545_PCA9545_01010103 open channel(0) failed, error: ./opt/bmc/apps/hwproxy/lualib/chip.lua:656: ./opt/bmc/apps/hwproxy/lualib/stream/hisport.lua:94: response error, ioctl(HISPORT_CMD_WRITE) failed: Unknown error 274[times:3]
2026-04-22 10:13:20.690183 storage_plugin ERROR: scan_context.lua(123): bus: Hisport_18, chip: Pca9545_PCA9545_01010103 open channel(2) failed, error: ./opt/bmc/apps/hwproxy/lualib/chip.lua:656: ./opt/bmc/apps/hwproxy/lualib/stream/hisport.lua:94: response error, ioctl(HISPORT_CMD_WRITE) failed: Unknown error 274[times:2]
2026-04-22 10:14:04.253037 storage_plugin ERROR: scan_context.lua(123): bus: Hisport_18, chip: Pca9545_PCA9545_01010103 open channel(1) failed, error: ./opt/bmc/apps/hwproxy/lualib/chip.lua:656: ./opt/bmc/apps/hwproxy/lualib/stream/hisport.lua:94: response error, ioctl(HISPORT_CMD_WRITE) failed: Unknown error 306[times:1]

2026-04-22 09:15:30.105787 storage_plugin INFO: scanner.lua(408): chip: Chip_TempChip_0101010301 change scan period of scanner: Scanner_Temp_0101010301 from 2000 ms to 4000 ms
2026-04-22 09:15:34.116699 storage_plugin INFO: scanner.lua(408): chip: Chip_TempChip_0101010301 change scan period of scanner: Scanner_Temp_0101010301 from 4000 ms to 8000 ms
2026-04-22 09:15:42.194168 storage_plugin INFO: scanner.lua(408): chip: Chip_TempChip_0101010301 change scan period of scanner: Scanner_Temp_0101010301 from 8000 ms to 16000 ms
2026-04-22 09:15:58.209892 storage_plugin INFO: scanner.lua(408): chip: Chip_TempChip_0101010301 change scan period of scanner: Scanner_Temp_0101010301 from 16000 ms to 32000 ms

总的来看Riser的I2C链路阻塞严重

求助内容

我想到的解决思路是:配置PluginRequestEx超时时间,丢弃超时严重的任务,及时释放对链路的占用
当前是否有接口支持配置该参数

答案内容由AI生成,仅供参考:

总结

项目 结论
PluginRequestEx是否支持配置超时? :white_check_mark: 支持
默认超时时间是多少? 120秒(2分钟)
如何配置自定义超时? 通过传入包含 ctx.timeout = N 的上下文对象
您的解决思路是否合理? :white_check_mark: 合理且推荐:配置较短超时 + 主动丢弃故障任务
是否能缓解I2C阻塞问题? :white_check_mark: 可有效缓解,防止任务堆积导致总线死锁

建议立即实施超时控制策略,并监控后续ipmitool sdr list的稳定性提升情况。

点击此处查看详细分析解答

chip访问插件PluginRequestEx是否支持配置超时时间

问题背景

在执行OS reboot测试时,ipmitool sdr list 命令概率性出现读取网卡温度失败的现象(失败率约1/200),表现为:

PCIe NIC3 Temp   | ns  | No Reading
PCIe NIC1 Temp   | ns  | No Reading

现象分析与日志证据

主要日志现象

根据app.log日志显示,系统中存在严重的chip访问插件超时问题:

2026-04-21 21:49:04.342799 storage WARNING: service[bmc.kepler.storage] request timeout: remote service[bmc.kepler.hwproxy], path[/bmc/kepler/Chip/Complex/Chip_RaidChip_0101010901], interface[bmc.kepler.Chip.BlockIO], method[PluginRequestEx], used time[116s]
2026-04-21 21:49:04.662633 storage WARNING: service[bmc.kepler.storage] request timeout: ... method[PluginRequestEx], used time[116s]
2026-04-21 21:49:04.671878 storage WARNING: ... method[PluginRequestEx], used time[114s]
2026-04-21 21:53:54.556930 storage WARNING: ... method[PluginRequestEx], used time[91s]

同时,hw_stream.log中还发现了以下异常:

  • Riser上的Pca9545 I2C多路复用器切换通道失败
  • 温度传感器扫描周期被逐步延长至 32秒

这表明整个Riser的I2C通信链路处于严重阻塞状态。

PluginRequestEx 超时配置支持情况

:white_check_mark: 支持配置超时时间

是的,chip访问插件PluginRequestEx支持配置超时时间。这一能力由 hwproxy插件机制本身提供,具体如下:

1. 默认超时策略

  • 默认超时时间为 120 秒(2分钟)
  • 这是硬件代理插件执行的全局默认值,适用于所有类型的插件访问请求
  • 来源:《硬件代理插件使用指南》

2. 可自定义超时时间

可以通过设置 上下文对象(context)中的timeout字段 来显式修改超时时间:

-- 示例代码逻辑结构
local ctx = {
    timeout = N  -- 单位:秒,可自定义设置
}
chip:PluginRequestEx(pluginName, cmd, params, ctx)

关键说明:通过传入包含 timeout 字段的上下文对象,可以覆盖默认超时值,从而实现对单个任务的超时控制。

建议解决方案

:check_mark: 推荐做法:配置短超时 + 任务丢弃策略

针对您提出的“配置PluginRequestEx超时时间,丢弃超时严重的任务”的思路,该方案完全可行且符合设计规范

步骤 操作 说明
1 修改调用逻辑 在调用PluginRequestEx前传入自定义ctx.timeout = X(如30秒)
2 设置合理阈值 避免长时间阻塞I2C总线,防止影响其他设备通信
3 实现降级机制 当请求超时时记录日志并主动放弃,避免无限重试

:warning: 注意事项

  1. 独占式访问风险
    插件执行期间会独占I2C总线,若未设置合理超时,可能导致其他设备(如温度传感器)无法访问,进而引发SDR读取失败。

  2. 避免雪崩效应
    多个长耗时任务堆积会导致扫描任务周期不断退避(如日志中从2s→32s),必须通过主动超时+放弃来打破循环。

  3. Pca9545通道切换失败
    这可能是I2C总线拥塞或电平异常的表现,建议结合硬件检查是否存在信号完整性问题。


总结

项目 结论
PluginRequestEx是否支持配置超时? :white_check_mark: 支持
默认超时时间是多少? 120秒(2分钟)
如何配置自定义超时? 通过传入包含 ctx.timeout = N 的上下文对象
您的解决思路是否合理? :white_check_mark: 合理且推荐:配置较短超时 + 主动丢弃故障任务
是否能缓解I2C阻塞问题? :white_check_mark: 可有效缓解,防止任务堆积导致总线死锁

建议立即实施超时控制策略,并监控后续ipmitool sdr list的稳定性提升情况。