【问题求助】网卡概率出现mctp超时,获取温度失败

// 此模板仅供参考,如果不适用可以修改

问题描述

网卡概率出现mctp超时,获取网卡温度或光模块温度失败

如果连续获取光模块温度失败超3次,光模块在位会被置为0,导致web界面光模块信息不显示,通信恢复后又能显示–概率出现,环境静置就有可能出现,如果出现后现象基本能一直存在,bmc重启或os重启可能能恢复

2026-03-14 21:13:43.810086 network_adapter WARNING: init.lua(767): service[bmc.kepler.network_adapter] request timeout: remote service[bmc.kepler.mctpd], path[/bmc/kepler/Systems/1/Mctp/Endpoint/65/2], interface[bmc.kepler.Systems.Mctp.PCIeEndpoint], method[Request], used time[521s]
2026-03-14 21:13:45.609870 network_adapter WARNING: init.lua(1129): Requestor Skynet message queue scheduling delay is 1760 ms (threshold: 500 ms), service_name=bmc.kepler.network_adapter, path=/bmc/kepler/persistence, interface=bmc.kepler.persistence, method_name=Save
2026-03-14 21:13:47.129308 network_adapter WARNING: init.lua(1129): Requestor Skynet message queue scheduling delay is 517 ms (threshold: 500 ms), service_name=bmc.kepler.network_adapter, path=/bmc/kepler/persistence, interface=bmc.kepler.persistence, method_name=Save
2026-03-14 21:13:48.251421 network_adapter WARNING: harbor_client.lua(386): Receiver Skynet message queue scheduling delay is 549 ms (threshold: 500 ms), service_name=bmc.kepler.network_adapter, path=/bmc/kepler/Systems/1/NetworkAdapters/NetworkAdapter_1_0101010302/Ports/NetworkPort_2_0101010302/OpticalModule, interface=bmc.kepler.Metric, method_name=GetData [repeated 18 times in 315s from 2026-03-14 21:08:33.589930 to 2026-03-14 21:13:48.251421]
2026-03-14 21:14:12.487976 network_adapter NOTICE: network_adapter.lua(1997): PCIeCard2(BCM957414A4142CC) update firmware version to 234.0.150.0 by ncsi
2026-03-14 21:14:13.406014 network_adapter NOTICE: network_adapter.lua(1997): PCIeCard3(BCM957412A4120AC) update firmware version to 234.0.150.0 by ncsi
2026-03-14 21:14:16.008806 network_adapter WARNING: init.lua(1129): Requestor Skynet message queue scheduling delay is 1017 ms (threshold: 500 ms), service_name=bmc.kepler.network_adapter, path=/bmc/kepler/persistence, interface=bmc.kepler.persistence, method_name=Save
2026-03-14 21:15:08.934731 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout [repeated 27 times in 309s from 2026-03-14 21:09:59.516712 to 2026-03-14 21:15:08.934731]
2026-03-14 21:15:38.961288 network_adapter ERROR: optical_module.lua(319): PCIeCard1(BCM957508-P2100G) optical_module_1 update optical temp by ncsi on_error [repeated 4 times in 243s from 2026-03-14 21:10:11.396496 to 2026-03-14 21:14:14.024439][flush]
2026-03-14 21:15:38.961491 network_adapter ERROR: optical_module.lua(319): PCIeCard1(BCM957508-P2100G) optical_module_0 update optical temp by ncsi on_error [repeated 4 times in 256s from 2026-03-14 21:09:58.462459 to 2026-03-14 21:14:14.184955][flush]
2026-03-14 21:15:38.961599 network_adapter NOTICE: optical_module.lua(325): unable to get op info after 3 times, set Presence to 0 (stack traceback:  ...s/network_adapter/lualib/device/class/optical_module.lua:326: in function <...s/network_adapter/lualib/device/class/optical_module.lua:300>  [C]: in function 'pcall'  ./opt/bmc/libmc/lualib/mc/signal.lua:93: in function 'run_slot'  ./opt/bmc/libmc/lualib/mc/signal.lua:113: in function <./opt/bmc/libmc/lualib/mc/signal.lua:103>  [C]: in function 'pcall'  ./opt/bmc/libmc/lualib/mc/signal.lua:293: in function 'emit'  ./opt/bmc/lualib/libmgmt_protocol/transport/scheduler.lua:43: in function ''  /opt/bmc/skynet/lualib/skynet.lua: in function </opt/bmc/skynet/lualib/skynet.lua:0>  [builtin#21]: at 0xffffb09f2d28  [C]: in function 'pcall'  ./opt/bmc/libmc/lualib/mc/context.lua:212: in function 'with_context'  ./opt/bmc/libmc/lualib/mc/app_preloader.lua:97: in function ''  /opt/bmc/skynet/lualib/skynet.lua: in function </opt/bmc/skynet/lualib/skynet.lua:0>) [repeated 8 times in 256s from 2026-03-14 21:09:58.464853 to 2026-03-14 21:14:14.186262][flush]

如果持续次数较少,温度还能维持上一正常值,但有以下日志刷屏–这个基本是必现

2026-03-17 21:37:04.177956 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout
2026-03-17 21:37:24.182987 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout
2026-03-17 21:37:35.250016 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout
2026-03-17 21:37:35.253244 network_adapter ERROR: optical_module.lua(319): PCIeCard3(BCM957508-P2100G) optical_module_1 update optical temp by ncsi on_error
2026-03-17 21:37:55.290603 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout
2026-03-17 21:38:05.669149 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout
2026-03-17 21:38:05.671441 network_adapter ERROR: optical_module.lua(319): PCIeCard3(BCM957508-P2100G) optical_module_0 update optical temp by ncsi on_error
2026-03-17 21:38:21.192924 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout
2026-03-17 21:38:21.228375 network_adapter ERROR: optical_module.lua(319): PCIeCard3(BCM957508-P2100G) optical_module_1 update optical temp by ncsi on_error
2026-03-17 21:38:24.773828 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout
2026-03-17 21:38:24.778880 network_adapter ERROR: optical_module.lua(319): PCIeCard3(BCM957508-P2100G) optical_module_0 update optical temp by ncsi on_error
2026-03-17 21:38:56.809959 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout
2026-03-17 21:39:00.371169 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout
2026-03-17 21:39:27.351330 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout

环境信息

  • 软件版本:OpenUBMC LTS SP1

问题环境上使用BC83PRUO Riser插了3张PCIe网卡,只有槽位3 BCM957508-P2100G会上报获取温度失败;

另外一张BCM957508-P2100G在另外一个环境上也会出现以上现象,环境上只有这1张网卡

在另一环境上使用BC83PRUO Riser插了以下2张卡,槽位3的网卡也会时不时刷获取温度失败的日志

Slot | Vendor Id  | Device Id  | Sub Vendor Id   | Sub Device Id   | Bus Number   | Device Number  | Function Number  | Card Desc
3    | 0x8086     | 0x57b0     | 0x8086          | 0x0002          | 0x16         | 0x00           | 0x00             | E610XT2M5
2    | 0x1000     | 0x0017     | 0x1000          | 0x9440          | 0x16         | 0x04           | 0x00             | PCIe RAID

2026-02-03 02:50:30.410256 mctpd ERROR: mctp_engine.lua(376): [System1]mctp_engine: request timeout
2026-02-03 02:50:30.412569 network_adapter ERROR: network_adapter.lua(2022): PCIeCard3(E610XT2M5) update chip temp by ncsi on_error
1 个赞

KunLun5280V2_2102315HMJ10R9100007_20260314-2105.part2.rar.txt (1.1 MB)
KunLun5280V2_2102315HMJ10R9100007_20260314-2105.part1.rar.txt (9 MB)

可能是博通raid卡过多的占用了i2c,如果有两张riser卡,建议把网卡和raid卡分开到不同的riser卡上
还有是不是博通raid卡管理了很多张硬盘

没有跟博通RAID插在一张riser上时也出现了这个问题,上面的日志就是没有跟RAID在一个riser上的

可以通过tracemctp看下是网卡没返回还是返回了但数据不对

这个问题有最新进展吗,我们也是LTS SP1版本,也遇到这个问题了

可以通过mdbctl命令追踪网卡对应Endpoint的报文数据,看下网卡是否成功返回数据或者返回的数据格式是否正确。

命令格式
tracemctp “ObjectName” “Action”

使用示例:

Endpoint可以通过资源树里面的ObjectName值来确定,如下面的Endpoint是Endpoint_144_2

/bmc/kepler/Systems/1/Mctp/Endpoint/144/2  bmc.kepler.Object.Properties
.ClassName
  signature:  s
  value:      "Endpoint"
  flags:      emits-change
  readonly:   true
.ObjectIdentifier
  signature:  (ysss)
  value:      [0,"","",""]
  flags:      emits-change
  readonly:   true
.ObjectName
  signature:  s
  value:      "Endpoint_144_2"
  flags:      emits-change
  readonly:   true
.TraceSamplingRate
  signature:  d
  value:      0
  flags:      emits-change
  readonly:   true

trace的时候一般会抓到多条命令,如何解析这个报文呢,比如如何能确认哪条命令是对应代码里如下命令的

        OpticalTemp = {
            protocol = 'ncsi_huawei',
            action = 'on_schedule',
            period_in_sec = 5,
            request = { huawei_cmd_id = 0x00, sub_cmd_id = 0x0B },
            response = function(data)
                ...
            end
        }

获取网卡第4个光模块BMC发送的报文:
============= PCIe capture [SEND] =============

7F 30 00 83 08 10 00 72 CA 0D 09 01 B4 1A 00 90

02 00 01 00 63 50 03 00 08 00 00 00 00 00 00 00

00 00 00 07 DB 00 00 0B 03 FF FF 9C B3 00 00 00

获取网卡第4个光模块BMC接收的报文:
============= PCIe capture [RECV] =============

0A 00 00 12 00 30 00 90 B4 1A 00 83 C2 09 0D 01

02 00 01 00 63 D0 03 00 10 00 00 00 00 00 00 00

00 00 00 00 00 00 00 07 DB 00 00 0B 03 00 28 00

00 FF FF 1C 83 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

解释:
0B是获取光模块的子命令
03是第4个光模块的编号,光模块编号从0开始,第1个光模块编号是0,第4个光模块编号是3.

@baominmin 有最新的mctp抓包结果吗?

mctp抓包看下能否接收到报文

NCSI报文解析:

请求:

1、报文中前16个字节为pcie和mctp报文头,此内容可以不关注,

2、第二行的02表示mctp承载的message type为NCSI报文

3、02后面的16个字节即(00 01 00 38 50 01 00 10 00 00 00 00 00 00)为NCSI报文头

50 (第五个字节): Control Packet Type,对应代码中的packet_type

01 (第六个字节) :对应代码中channel id,也就是port id;

10 (第8个字节) :对应代码中data的长度;

4、NCSI报文头后面紧跟着为PayLoad内容,即代码中的data,长度不固定(即data长度可变)

此处可以看到data为00 00 11 3D 00 14 00 04 00 00 00 00 00 00 02,长度16个字节。

5、PayLoad后面的四个字节即FF FF 9E 5F,为Checksum校验位,自动计算而成,不必太关注;

6、最后三个字节即 00 00 00为Message Integrity Check,不必关注;

返回:

1、同上,报文中前16个字节为pcie和mctp报文头;

2、同上,第二行的02表示mctp承载的message type为NCSI报文

3、同上,02后面的16个字节即为NCSI报文头,此内容着重关注如下:

AB (第五个字节): Control Packet Type,对应代码中的expect_rsp_packet_type;

00 (第六个字节) :对应代码中channel id,也就是port id;

2A (第8个字节) :对应响应Payload的长度,对应代码中response解析的内容长度(此处长度即为42个字节);

4、NCSI报文头后面的42个字节对应协议中从Resonse Code开始的内容,此处就按照response定义的bitstring解析对应字段并赋值;

5、PayLoad后面的内容同上,不必太关注;