记一次PCIe故障:多张网卡同时发包造成宕机

记一次PCIe故障:多张网卡同时发包造成宕机

排查思路1

重启后查看messages,在log中发现GHES报错error status block;
于是在grub中关闭GHES:ghes.disable=1,并进行重启;
重启后问题不再复现,传输速度更快且稳定。
经查阅资料,GHES作为固件的纠错方式之一,不能和Linux的EDAC纠错机制同时使用,因为BIOS和操作系统在读取error寄存器时会相互竞争.而海光服务器因为默认使用的mce无法适配,使用的正是edac_mce_amd模块。GHES与EDAC
但是GHES是一个通用硬件错误源,该方法属于关闭纠错机制,问题本身没有解决。

思路2

继续查看messages,发现服务器宕机前存在kernel打印,提示发包网卡存在timeout,且发生在Data Link Layer层;
查阅PCIe SPEC以及710网卡芯片手册,找到了针对replay timeout出现时的建议以及该位的含义:将extended_sync位置1后,该设备发送TLP后,等待ACK的时间会增加,具有更好的兼容性。
在这里插入图片描述
在这里插入图片描述

开启pcie配置空间中的extended_sync的命令:setpci -s B:D.F 0xB0.b=0xc0
提示:重启后设置失效,0xb0位恢复为0x40。需定制BIOS版本或通过OS补丁包保证生效。

Link Control Register[7],寄存器的第七位,:Extended Sync(扩展同步)

这是一个神奇的bit, 置上以后从L0s和L1退出时,Device会发超多的FTS和TS1,从而让双方有更多的时间谈人生,谈理想,最终”握手”成功。
这个mode是当链路中有额外设备(例如PCIe analyzer)时,为保证能够正常的achieve bit and symbol lock 用的。
但是遇到ASPM L1回不来或者开机找不到PCIe device的情况,也可以通过设置这个bit收集更多的参考数据。 PCIe SSD支持的ASPM是什么?

该bit用于在进入L0状态前,强制在L0s状态中发送4096个FTS(快速定向序列)有序集,然后在发送单个SKIP有序集,它还强制在进入恢复状态前发送1024个TS1有序集,该扩展同步允许外置工具监控链路时间,以便在链路进入L0或恢复状态并恢复正常的通信前实现比特和符号锁定。PCIe link training解析

也就是说,Extended Sync这一bit设置为1后,设备发送TLP(数据报文)时,等待ACK的时间会增长,具有更好的兼容性。

猜你喜欢

转载自blog.csdn.net/Sky777wdnmd/article/details/131275008