按Spec定义的原则和内容,前面讲的所有错误类型,包括不可修复错误(Uncorrectable Errors)和可修复错误(Correctable Errors)。这些错误的错误检测,都是由各个硬件设备制造商按照协议内容实现的。这些错误是如何通知上报呢?

error reporting In a broad context, the general notification of errors. In the context of the Device Control register, sending an Error Message. In the context of the Root Error Command register, signaling an interrupt as a result of receiving an Error Message.
error signaling One agent notifying another agent of an error either by (1) sending an Error Message, (2) sending a Completion with UR/CA Status, or (3) poisoning a TLP.

协议里还是蛮(咬)严(文)谨(嚼)的(字),对于错误上报和错误通知机制定义的很详细。本篇文章,我们仅讨论上报(通知)的几种机制。这里的所谓上报,是指上报给相关的对象,如请求者、RootComplex等。对于上报之后的处理我们后续再展开。

PCIe Spec规定了3种错误上报机制:

  • 对于Non-Post请求,通过完成报文的状态上报。如UR/CA/CRS。

  • 通过错误消息(Error Message),包括三种类型的错误消息:ERR_COR/ERR_NONFATAL/ERR_FATAL。

  • 对于链路中间的Switch,检测到的报文错误,使用错误转发(Error Forwarding),也称为数据中毒(Data Poisoning)。

完成状态


对于Non-Post事务,完成者(Completer)通过在完成报文头里面置位完成状态(Completion Status),来告诉请求者(Requester)本次请求事务的完成情况。具体的状态包括如下表的几种:只要完成包的状态不是SC(Successful Completion),就代表对应的请求失败了。

注意:完成者在完成报文里报告自己的完成状态以外,也有可能直接通过错误消息(Error Message)向系统报告一条错误。另外,在完成报文不一定能够正常返回的情况下,依赖请求者的完成超时机制(Completion Timeout)来识别错误。

错误消息


对于Post事务,例如Memory Write、Message等,是没有完成报文的。如果有错误,是无法通过完成报文上报的。这种情况下,Spec定义需要通过错误消息(Error Message)上报。上报给谁呢?上报给PCIe领域的老大:Root Complex。小弟搞不定了,但一定要告诉老大,让他来处理好咯。

错误消息的报文头里面,包含请求者的ID和错误消息码,以告诉Root Complex是谁报告了错误,以及报告了什么类型的错误。错误类型包括ERR_COR/ERR_NONFATAL/ERR_FATAL,跟昨天讲的错误类型是对应的。

错误转发(数据中毒)


在有Switch的地方,还会有另外一种场景,就是错误转发。考虑如下场景:Requester发起读请求到Completer,Completer收到请求,把对应的包含完成数据的报文返回。在这条路径的中间,多了一个Switch。当Switch收到完成报文的时候,假设这个数据报文的CRC校验失败,Switch需要置位报文头的EP(Error Poisoning)bit。并继续向请求者返回这个报文。

出现Data poisoning时,TLP的EP比特会置1。

注意:Switch即使判断出数据中毒,也不能修改数据报文的CRC!它只能告诉请求者数据中毒这个状态。中间转发者就是转发者,对经过它的内容没有修改的权利。另外,如果Switch支持DPC或者在Multicast等场景下,错误转发(数据中毒)的处理会有一些不一样。这里不展开讨论。

错误上报_PCIe错误的上报方式相关推荐

  1. 你正在使用GPU进行CNN类模型训练,突然发生了内存溢出的错误,你可以通过哪些方式来进行解决?

    你正在使用GPU进行CNN类模型训练,突然发生了内存溢出的错误,你可以通过哪些方式来进行解决? 在GPU内存发生溢出(memory overflow)的时候.我们首先想到的肯定是增加GPU的资源,比如 ...

  2. javadoc: 错误 - 无效的标记: --source-path 解决方式

    错误一 出现编码GBK的不可映射字符 解决方式 添加 -encoding UTF-8 -charset UTF-8 错误二 javadoc: 错误 - 无效的标记: --source-path 解决方 ...

  3. [错误解决]centos中使用kubeadm方式搭建一个单master的K8S集群

    安装步骤 参考该大佬博客 --------- [ningan@k8s-master pv]$ kubectl get pod The connection to the server localhos ...

  4. java连接oracle报错ora-12505,JDBC连接ORACLE中的ORA-12505错误以及相关问题和解决方式...

    问题描述:重装系统和oracle 11g,实例名orcl,输入以下代码 import java.sql.*; public class TestJDBC { public static void ma ...

  5. python返回错误提示_python 错误处理

    在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返回文件描 ...

  6. python语法错误怎么办_python错误处理详解

    在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返回文件描 ...

  7. 前端错误监控与错误日志

    平时工作中没怎么接触到这部分,对它的了解也零零碎碎的.今天看了几篇文章,算是有个完整的认识了,在这里总结记录一下. 项目上线之后肯定无法避免所有的bug,有些bug出现后开发人员并不知道,有的知道了缺 ...

  8. 《探错笔记》之挂载NFS时提示:mount: 文件系统类型错误、选项错误、有坏超级块

    记一次同事服务器共享磁盘挂载不上报错的问题 linux系统进行磁盘挂载时,报错显示: # mount 172.19.4.12:/data/nfs /data/nfs mount: 文件系统类型错误.选 ...

  9. 什么是错误的幻数错误?

    本文翻译自:What's the bad magic number error? What's the "Bad magic number" ImportError in pyth ...

最新文章

  1. 《jQuery UI 开发指南》——1.3 什么是CSS主题
  2. 风云编程python-动态排名可视化——带你领略编程语言20年风云变化
  3. Java爬虫之利用Jsoup自制简单的搜索引擎
  4. 使用docker commit 来扩展一个image
  5. java面向对象程序设计(jdk1.6)第三版 目录页数_Java面向对象程序设计/普通高等教育计算机规划教材简介,目录书摘...
  6. 不管你挣多少钱永远都是问题
  7. PhpSpreadsheet 电子表格(excel) PHP处理笔记
  8. php 转发邮件,PHP Email();我不接收转发的电子邮件
  9. 认证杯网络挑战赛C题破局共享汽车
  10. c语言汉字转拼音,c语言汉字转拼音函数源码
  11. 【前端工具】实用的代码生成器
  12. Eclipse中Folder和SourceFolder
  13. iOS面试一般性问题
  14. ckfinder 2.3 破解
  15. UE4 Atmospheric Fog组件问题记录(未解决)
  16. python默认安装目录在哪_怎么查看python的安装目录
  17. 对于阿里云手机 OS 大家都怎么看?
  18. 借笑傲江湖学习Git,让Git不在枯燥乏味,还能让你笑傲Git
  19. 2022-12-09 Ubuntu16.4中访问另一台Ubuntu samba共享出来的目录方法
  20. python国际化课程capstone(ML预测ACM队员获奖概率)

热门文章

  1. 开源 免费 java CMS - FreeCMS1.5-数据对象-guestbook
  2. 有效利用番茄工作法提高效率--XorTime的使用方法
  3. fedora 19 gnome 3.8 关闭笔记本盖子的动作
  4. (二)、WCF通道模型
  5. Golang sync.Once 简介与用法
  6. Linux 命令(21)—— cd 命令(builtin)
  7. chkconfig: command not found
  8. tensorflow学习5----GAN模型初探
  9. GotoAndPlay 图论
  10. JS缺失错误- Uncaught SyntaxError: Unexpected token