PCIe学习笔记(26)

Error Forwarding(错误转发)

错误转发(也称为数据中毒),通过设置EP位表示。下面是一些使用错误转发的例子:

•例#1:从主存读取遇到不可纠正的错误

•例#2:PCI写到主存的奇偶校验错误

•例#3:内部数据缓冲区或缓存上的数据完整性错误

错误转发使用模型

•错误转发仅用于读取完成数据,AtomicOp完成数据,AtomicOp请求数据或写数据,从不用于错误在“头”(请求阶段,地址/命令等)的情况。

报头错误的请求/完成通常不能被转发,因为真正的目的地不能被确定,因此,转发可能会导致直接或副作用,如数据损坏,系统故障等。

•错误转发用于通过系统、系统诊断等控制错误的传播

•注意,错误转发不会导致链路层重试——只有当链路上存在传输错误时,才会重试中毒的TLP(由数据链路层中的TLP错误检测机制确定)。

◦中毒的TLP最终可能导致请求的发起者(在事务层或更高层)在读取操作的情况下重新发出它,或采取其他一些行动。

Rules For Use of Data Poisoning(数据中毒)

•对发射器的TLP中毒的支持是可选的。

•数据中毒仅适用于写请求(Posted或Non-Posted)、带有数据的消息、AtomicOp请求、读完成或AtomicOp完成中的数据

通过设置EP位表示TLP的中毒。

◦发射机被允许仅为包括数据有效载荷的TLPs设置EP位。如果为任何不包含数据负载的TLP设置了EP位,则不指定接收方的行为

•如果下游端口支持中毒TLP Egress Blocking,设置了“中毒TLP Egress Blocking使能”位,并且有一个中毒的TLP目标从出口端口发出,则端口必须将该TLP作为中毒TLP Egress Blocked错误处理,除非存在更高优先级的错误。进一步指出:

◦端口不能传输TLP。

◦如果DPC(数据包校验)没有被触发,并且TLP是一个Non-Posted Request,端口必须返回一个Completion with Unsupported Request Completion Status。

◦如果DPC被触发,端口必须按照章节2.9.3的描述行为

###(1、DPC(Downstream Port Containment):DPC 是一种用于处理PCIe链路中错误情况的机制。当PCIe链路上的一个设备发送错误信号时,DPC机制允许系统针对该错误进行处理,以避免错误的传播和影响其他设备。具体而言,DPC机制会隔离出故障设备,从而限制错误的影响范围,确保其他设备继续正常工作。

2、DPC则是一种用于处理PCIe链路中错误情况的机制。当PCIe链路上的一个设备发送错误信号时,DPC机制允许系统采取相应的措施来隔离故障设备,以限制错误的传播范围,确保其他设备继续正常工作。DPC机制依赖于AER提供的错误信息来进行错误处理。

在PCIe架构中,AER和DPC通常结合使用,以提供更全面的错误处理和容错机制。当PCIe设备发生错误时,AER会检测和报告错误的详细信息,而DPC则可以根据这些错误信息采取相应的措施,例如隔离故障设备,以维护整个PCIe系统的稳定性和可靠性。

所以,AER用于检测和报告PCIe设备的错误,而DPC用于处理错误情况并限制错误的传播范围,两者共同为PCIe系统提供了强大的错误处理和容错功能。

虽然AER和DPC在某种程度上可以协同工作,但它们是独立的机制,并不是逻辑上的包含关系。AER提供了错误的检测和报告,而DPC则是根据这些错误信息来采取相应的隔离措施,以维护系统的稳定性和可靠性

参考:【PCIE】AER和DPC解释_pcie dpc-CSDN博客)

•以下带有中毒数据的请求不能修改目标位置的值:

配置写请求

以下任何一个目标控制寄存器或控制结构在Completer: I/O写请求,内存写请求,或非供应商定义的消息与数据

◦AtomicOp请求

除非有更高优先级的错误,否则Completer必须将这些请求作为中毒TLP Received error来处理,并且如果请求是Non-Posted的,Completer还必须返回一个Completion Status为Unsupported Request (UR)的Completion。无论所报告的错误的严重程度如何,所报告的错误必须作为不可纠正的错误处理,而不是可咨询的非致命错误。

SW必须以与未中毒时相同的方式路由请求,除非请求的目标是交换机本身的位置,在这种情况下,SW是请求的完成者,必须遵循上述规则。

完成超时机制 (Completion Timeout Mechanism)

在任何split transaction协议中,都存在与请求者未能收到预期的完成相关的风险。为了允许请求者以标准的方式尝试从这种情况中恢复,定义了完成超时机制。该机制仅在没有合理预期完成将被返回时激活,并且不应在正常操作条件下发生。注意,这里指定的值不反映预期的服务延迟,并且不能用于估计典型的响应时间。

P发出要求完成的请求的CI Express设备功能必须实现完成超时机制。配置请求例外(见下文)。在传输请求时,完成超时机制会为每个需要一个或多个完成的请求激活。由于交换机不会自动发起需要完成的请求,因此对完成超时支持的要求仅限于RC、PCI Express-PCI桥和EP

完成超时机制可以通过配置软件禁用。完成超时限制在设备控制2寄存器的完成超时值字段中设置。完成超时是与请求函数相关的报告错误

注意:一个有多个完成的内存读请求,只有当所有的完成都被请求者收到才被认为是完成的。如果在Completion Timeout计时器到期之前返回了部分(但不是全部)请求的数据,则允许请求者保留或丢弃在计时器到期之前返回的数据。

配置请求的完成超时对PCI Express到PCI/PCI Express桥的支持有特殊要求。默认情况下,PCI Express to PCI/PCI- x桥不启用向桥后的PCI/PCI- x设备返回配置请求的CRS (Configuration Request Retry Status)。这可能导致长时间的完成延迟,必须通过根复合体中的完成超时值来理解。根据[PCI -to-PCI-PCI- x -Bridge-1.0]中提到的限制,系统软件可以通过在设备控制寄存器中设置桥配置重试使能位,使PCI Express到PCI/PCI- x桥返回CRS。

完成超时前缀/报头日志功能

与完成超时相关联的请求TLP的前缀/报头可以由实现AER能力的请求者记录。对前缀/报头记录的支持由高级错误能力和控制寄存器中的完成超时前缀/报头日志能力位的值表示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【题目/训练】:双指针

引言 我们已经在这篇博客【算法/学习】双指针-CSDN博客里面讲了双指针、二分等的相关知识。 现在我们来做一些训练吧 经典例题 1. 移动零 思路: 使用 0 当做这个中间点,把不等于 0(注意题目没说不能有负数)的放到中间点的左边,等于 0 的…

在Ubuntu16.04里安装ROS Kinetic

1.设置apt的source list sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu$(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list 2.设置gpd keys sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365…

基于java的酒店管理系统设计与实现

系统分析与设计 需求分析 1.系统概要 根据餐饮系统的流程,完成从用户登录到开台点菜,到结账收银,到统计一条线的信息化管理,因此整个餐饮管理信息系统的研发内容就是开发一整套餐饮管理信息系统,实现餐饮业务的计算…

【Vue3】集成 Element Plus

【Vue3】集成 Element Plus 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的…

后端开发刷题 | 合并两个排序的链表

描述 输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。 数据范围: 0≤n≤1000,−1000≤节点值≤1000 如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},…

MySQL各个版本root账号没有最高权限的解决方法

一、详细报错 ERROR 1045 (28000): Access denied for user ‘root’‘localhost’ (using password: YES) 报错原因(分析过程): rootlocalhost用户密码修改导致 解决方法: 跳过权限验证启动数据库,并修改密码。如下…

怎么快速定位bug?如何编写测试用例?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员,那么在…

Windows系统命令

Windows系统命令 Windows 系统中的命令行工具是指令式编程语言,可以用来执行各种任务、管理文件和目录、监控系统状态等。下面是一个 Windows 命令应用实例: 1. 文件操作 cd:用于改变当前目录。例如,cd Documents 将当前目录更…

Ubuntu下通过Docker部署Synapse服务器技术博客

今天,我在阿贝云这个不错的免费云服务器上进行Synapse部署测试。这家免费云服务商太棒了,1核CPU、1G内存、10G硬盘、5M带宽,阿贝云的免费服务器性能超乎想象。 作为一个资深的IT技术爱好者,我简直爱不释手Docker这个神器。它可以轻松地帮我部署各种应用程序,包括今…

独立站PrestaShop安装

独立站PrestaShop安装 独立站PrestaShop安装系统需求下载PrestaShop浏览器下载命令行下载 解压PrestaShop创建数据库移动PrestaShop源码到web目录composer安装依赖包nginx配置访问域名进入安装页面选择语言许可协议系统兼容性店铺信息Content of your store系统配置数据库店铺安…

数据结构day03(栈 Stack 顺序栈、链式栈 )内含具体详细代码实现

目录 【1】栈 Stack 1》栈的定义 2》顺序栈 2》链式栈 4》顺序栈的链式栈的区别 【1】栈 Stack 1》栈的定义 栈:是只允许在一端进行插入或删除的线性表,首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。 栈顶&…

MySQL的查询排序、模糊查询及通配符

1. 查询排序 在MySQL中,使用ORDER BY子句可以对查询结果进行排序。以下是ORDER BY子句的基本语法: SELECT 列名 FROM 表名 ORDER BY 列名 ASC/DESC; 其中,ASC表示升序排序,DESC表示降序排序。例如,我们可以使用以下…

仿照ContentLoadingProgressBar 的特点在Android项目中自定义Loading对话框

ContentLoadingProgressBar 是 Android 中的一个控件,继承自 ProgressBar。它在 ProgressBar 的基础上添加了一些特殊功能,主要用于在加载内容时显示进度。它的一些主要特点如下: 自动隐藏和显示:ContentLoadingProgressBar 会在…

JavaScript_7_练习:随机抽奖案例

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>练习&#xff1a;随机抽奖案例</tit…

vue项目配置基础路由vue-router

1、运行以下命令安装vue-router yarn add vue-router 2、在src目录下的components中新建两个vue页面 3、在src目录下新建router文件夹&#xff0c;在router文件夹下面新建index.js文件 4、配置main.js文件 //引入Vue import Vue from "vue"; //引入App import App…

全新分支版本!微软推出Windows 11 Canary Build 27686版

已经很久没有看到 Windows 11 全新的分支版本了&#xff0c;今天微软发布 Windows 11 Canary 新版本&#xff0c;此次版本号已经转移到 Build 27xxx&#xff0c;首发版本为 Build 27686 版。 此次更新带来了多项改进&#xff0c;包括 Windows Sandbox 沙盒功能切换到 Microsof…

LearnOpenGL——SSAO学习笔记

LearnOpenGL——SSAO学习笔记 SSAO一、基本概念二、样本缓冲三、法向半球四、随机核心转动五、SSAO着色器六、环境遮蔽模糊七、应用SSAO遮蔽因子 SSAO 一、基本概念 环境光照是我们加入场景总体光照中的一个固定光照常量&#xff0c;它被用来模拟光的散射(Scattering)。散射应…

QT事件机制理解

事件和信号 从硬件层来看: 事件就是一种中断&#xff0c; 中断的产生形式: 1.用户操控硬件所产生的中断。 2.由系统自身所产生的中断&#xff0c;比如说定时器。 这种中断由系统内核监控&#xff0c;由系统内核接收到中断并向CPU发出的执行请求就叫信号。所以说事件是信号产生…

C++,std::bind 详解

文章目录 1. 概述2. 基本用法2.1 使用占位符2.2 示例 3. 总结 1. 概述 std::bind 是 C11 引入的一个功能&#xff0c;它允许你将函数&#xff08;或成员函数、函数对象&#xff09;与其参数绑定&#xff0c;生成一个新的可调用对象。这个功能在需要将函数及其参数一起传递给其…

[OC]萝卜圈玩行车记录仪

图1-1&#xff0c;你的手动小车 代码是 #机器人驱动主程序 #请在main中编写您自己的机器人驱动代码 import tkinter as tk import turtle v0 # 速度 accFalse;slowFalse;leftFalse;rightFalse # 按键状态 step0.5 # 一次速度变化量 def keyup_press(event):global acc;accTru…