我们开始讨论一下有关于PCIe错误相关的内容。每种协议都有各自定义的错误。每种硬件也会有各种错误。从某种意义上来说,开发人员存在的价值不仅在于实现各种协议的实现,更多的是去解决这些千奇百怪的错误。错误的相关内容包括:错误分类、错误检测、错误记录、错误通知、错误报告、错误处理等等。

       Spec早期(1.0)沿用了很多PCI/PCI-X协议的内容,要求每种PCIe设备都必须实现基础的错误模式。在PCIe 1.1,新增了高级错误报告AER(Advanced Error Reporting),但协议并没有要求每个设备必须实现,属于可选项。

       首先,我们来看看错误的分类:

PCIe的错误可以分成两类:不可修复错误(Uncorrectable errors)和可修复错误(Correctable errors)。这些错误在PCIe协议的各个层次(物理层、数据链路层、事务层)都会存在。另外Internal error是PCIe 2.0之后新增的,是指PCIe设备硬件的内部错误。

很显然,所谓可修复错误,是指这类错误是有可能被修复的。注意,是有可能!当修复不了,就会变成不可修复错误。可修复错误往往由硬件自我修复,如重发报文、重协商等等。这类错误只对系统的性能有所影响。可修复错误由硬件修复不需要软件参与,并且修复行为不会导致任何信息的丢失。在软件处理上,可以记录错误发生的首次时间点、发生频率等,以便于后期定位追溯问题。

不可修复错误是指无法自我修复的错误,可能导致某次事务的失败。不可修复错误又可以细分为致命(Fatal)和非致命(Non-Fatal)两种。非致命错误往往只会影响单次PCIe事务的失败。而致命错误可能会导致系统的崩溃!

不可修复致命错误是链路或者硬件不可靠导致的,对于不可修复致命错误需要复位链路上的组件。不可修复致命错误,没有统一的修复方法,每家都有自己的处理方法。平台设计者需要根据硬件设计不同,PCIe器件承担的作用不同,业务流程不同进行不同的处理,原则上都需要复位链路上的组件。

我们再总结一下错误类型:

可修正错误不可修正错误
发生范围
物理层、数据链路层、事务层、设备内部
自我修复
系统影响影响性能影响功能
软件处理无需处理。可以考虑记录日志。建议处理。

        最后,需要提醒大家注意的是:对于PCIe错误,各个厂商和公司的要求不尽一致。很多厂商的设备,在生产基本都没有做任何的检测,就直接发货。这样会存在一定的隐患。对于个人PC领域,影响还属可控。如果是服务器、存储,就会存在业务性能降低、业务中断等重大影响。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注