一种网卡排障的实践方法

网卡是计算机中非常重要的组件之一,它负责计算机与网络之间的通信。然而,由于各种原因,网卡可能会出现不可用的情况。其中,固件错误和PCIE错误是导致网卡不可用的常见原因之一。为了方便能够做故障隔离,需要检测出网卡错误,这里针对PCIE错误导致的网卡不可用,提供一种可靠断定网卡不可用的实践方法。

PCEI Error Messages

PCI-Express错误信息是使用一种特定类型的TLP(事务层数据包)消息请求,它可以用于多种目的(PCI兼容性中断信号、电源管理、热插拔信号等等,除了错误信号),并与其他TLP类型(内存读请求、内存写请求、完成、配置读/写等)区分开来。

PCI Express或Legacy Endpoints发出的错误消息将发送到相应的根端口,而根端口本身发出的错误也将通过同一根端口报告,这是一种自下游向上游报告的RAS机制,如下图所示:

错误详细信息记录在特定设备的AER中(大多数PCI-E设备都实现了AER功能),然后发送一个报告错误的Msg向上游发送到root complex。任何中间组件(如交换机)都可以将TLP向上游转发到root complex,具体可以查看root port的下游,比如switch中capability id为10h处的绝对位置偏移08h的值即可。

PCIE错误检测步骤

用户态识别网卡EP所在的PCIE树,如下图所示,00:01.1 是第一级(root port),01:00.0 是第二级(switch upstream port),02:02.0和02:03.0是第三级(switch Downstream port)。

1. 首先,查看各级的AER,是否存在Uncorrectable error,如果任意一级(含网卡EP本身),通过读取其配置空间的Uncorrectable Error Status Register,对于相应bit置1的位,如果该位为Uncorrectable Error且Fatal,则网卡一定不可用 。

2. 其次,考虑到部分设备会向Linux注册AER_ISR中断,在AER_ISR中断中会清除Uncorrectable Error Status Register的相应bit,此时可以读取First Error Pointer register,可以达到相同的效果。

3. 最后,对于如固件错误或者需要根据网卡特性搭配使用的错误导致的网卡不可用问题,此时PCIE链路是正常的,这时可以读取网卡的寄存器和正常时做对比。关于网卡寄存器的读取,只需要把网卡BAR指向的memory space空间完整读出来保存即可。

Reference

Exploring sysfs and the PCI Buses

PCIe错误的Firmware first model和OS native model

PCIe RAS - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于顾而言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值