RootPort的completion timeout为什么不能防止MCE

news2025/2/25 12:44:58

PCIe split transaction协议

在解释completion timeout机制前,我们首先说一下PCIe split transaction协议是什么,以及为什么PCIe要选择split transaction?

Split transaction协议是从PCI-X总线的引入的一个重要特性,该传输协议替代了PCI总线的delayed 数据传输方式,提高了Non-Posted transaction的传输效率。

Split transaction交互过程,如果上图所示:

  1. requester 发起一个read transaction。

  1. read请求到达completer,但是completer不能马上返回data(completer需要准备对应的数据)。

  1. completer会记住这个transaction(address、transaction type、byte count、requester ID等)。

  1. completer 返回split的response(ACK或者NCK),此时对PCI-X总线而言, requester可以结束整个read request的bus cycle,其他的request可以继续占用总线了。

  1. completer准备好数据后,重新申请总线,初始化一个split completion bus cycle并使用split completion返回数据。

  1. requester收到completion with data,整个read request完成。

相对PCI而言,PCI-X这种completer准备好数据后,主动发起split completion的方式类似write bus cycle。在两个bus transaction(read request和split completion transaction直接)之间,bus可以被其他的transaction利用,这种处理方式有效提高了PCI-X总线的使用效率。PCIe总线继承了PCI-X的这种 splittransaction。

根据PCI Express SystemArchitecture的数据,相对PCI的50%-60%的传输效率,这种split的方式可以把PCI-X传输效率提高到85%。

Completion timeout机制

Split transaction带来效率提升的好处,也带来了风险:requester可能无法接受到期望的completion(可能是completion被错误地路由到别的地方导致requester永远不能收到completion,也可能是completer返回completion比较慢,超过了requester的等待时间)。为了让requester有一个恢复机制,因此,定义了completion timeout机制。

针对completion timeout机制,协议规定如下:

(1)PCIe设备如果会发出需要completion的request(Non-Posted request),就必现要实现completion timeout机制。

由于switch不会主动发出需要completion的请求,因此,completion timeout机制仅仅适用于RC、PCIe-PCI bridge和endpoint。

(2)Configuration software可以disable掉completion timeout机制。Completion timeout的大小可以通过Device ctrl 2 寄存器的completion timeout value字段设置。Completion timeout通过requester来报错,也就说了completion timeout的错误是requester发出的。

(3)对于memoryread request,可能需要多个completion,只有当requester收到了所有的completion后才认为request完成了。如果在completion timeout前,requester只收到了部分但不是全部的completion,requester可以保存或者丢弃completiontimeout前接收到的数据。

Completion timeout相关的reg

Device capabilities 2 reg 的bit[3:0] Completion Timeout Ranges Supported,这个字段规定device function支持的completion timeout value。值得注意的是It is strongly recommended that theCompletion Timeout mechanism not expire in less than 10 ms,也就说Range A 50us to 10ms的这个Range是不被推荐的。

Device capabilities 2 reg 的bit[4] Completion Timeout Disable Supported字段显示是否支持disable completion timeou机制。

对于RootPort来说,Completion Timeout Disable Supported是可选的。

Device control 2 reg 的bit[3:0] Completion Timeout Value,这个字段规定devicefunction等待completion的时间。该字段必须是Devicecapabilities 2 reg 的bit[3:0] Completion Timeout RangesSupported的range。

Software可以在任何时候改变completion timeout value字段。如果completion timeout字段被修改时,还有request是pending,对于outstanding的request,hardware使用新的或者旧的completion timeout value都是可以的。hardware计算completion超时的开始时间可以从completion timeout value被修改的时间点算,也可以从request发出的时间点算。

值得注意的是Spec再一次强调:Itis strongly recommended that the Completion Timeout mechanism not expire inless than 10 ms

Device control 2 reg 的bit4 Completion Timeout Disable用来disable completiontimet机制(必须要Device capabilities 2 reg 的bit[4] Completion Timeout Disable Supported字段为1b时,才能设置该bit)。

Completion timeout产生的场景

当requester发出Non-Posted request,并且超时没有收到对应的completion,允许requester通过发出新的请求来recover这个错误。允许requester尝试恢复0次,1次或者多次,但是次数必须是有限的。如果没有后续的recovery动作,requester必须通过uncorrectable error message来标识错误。

如果completion timeout的severity是non-fatal的,并且requester 选择了通过发送一个新的请求尝试recovery,requester必须首先把当前的错误当做Avisroy Non-Fatal的错误处理。支持AER的requester通过发送ERR_CORmessage来标识这个错误。

常见的CPU的Completion timeout value

CPU型号

Code name

Cap: Completion Timeout Ranges Supported

Ctrl: Completion Timeout Value

11th Gen Intel(R) Core(TM) i7-11700K

Rocket Lake

ABC

50us-50ms

12th Gen Intel(R) Core(TM) i5-12600K

Alder Lake

ABC

50us to 50ms

Intel(R) Xeon(R) Silver 4309Y

Ice Lake

ABC

260ms-900ms

Intel(R) Xeon(R) Gold 6130

Sky lake

BCD

260ms-900ms

Intel(R) Xeon(R) Gold 6430

Sapphire Rapids

ABC

260ms to 900ms

AMD Ryzen 7 5700G

ABCD

65ms-210ms

PCIe spec强烈推荐completion timeout的时间不要少于10ms。按照经验,intel CPU一般会设置在65ms-210ms(sandy bridge)或者下一档次260ms-900ms(Ivy bridge及其之后的微架构)。

Intel CPU的架构和timer

intel CPU不同代的CPU微架构改变很大,下面是sky lake的CPU架构。

TOR全称是 table of request了,是用来track pending CBo transaction。

在sky lake CPU中有非常多的timer,每个timer对应不同sub-modules的超时时间。RootPort的completion timeout只是IIO到PCIe/DMI的超时,IIO后面还有一个Cbo的TOR timeout和Core的3-strike。

由于CPU内部每个timer计算超时的时间点不同,再加上PCIe总线上大量的transaction的累积效应。因此,completion timeout是无法保证在外设异常时,CPU访问外设CPU不出现MCE的。

如果不管CPU架构和其他的几个timer的大小,贸然把RootPort的completion timeout改大。当外设异常时,可能会掩盖RootPort的completion timeout错误,但是这种做法可能会导致TOR timeout或者3-strike。

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

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

相关文章

微服务 分布式配置中心Apollo详解

微服务 分布式配置中心Apollo详解1. 配置中心概述1.1 配置中心简介1.2 配置中心特点1.3 配置中心对比2. Apollo概述2.1 Apollo简介2.2 Apollo特点3. Apollo设计实现3.1 基础模型3.2 架构设计3.3 Why Eureka3.4 模块说明4. Apollo安装部署4.1 部署说明4.2 环境准备3.3 下载安装包…

JavaScript奇技淫巧:隐形字符

JavaScript奇技淫巧:隐形字符 本文,分享一种奇特的JS编程技巧,功能是:可以使字符串“隐形”、不可见! 效果展示 如下图所示,一个字符串经物别的操作之后,其长度有621字节,但内容却…

[ 数据结构 ] 查找算法--------递归实现

0 前言 查找算法有4种: 线性查找 二分查找/折半查找 插值查找 斐波那契查找 1 线性查找 思路:线性遍历数组元素,与目标值比较,相同则返回下标 /**** param arr 给定数组* param value 目标元素值* return 返回目标元素的下标,没找到返回-1*/public static int search(…

ora-39083/01917报错

报错信息: Import: Release 11.2.0.4.0 - Production on Wed Dec 7 17:59:59 2022 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production …

1、Javaweb_HTMLtable布局

web概念概述 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端程序,在远程有一个服务器端程序 * 如:QQ,迅雷.…

Linux环境下安装 java / javac

目录 1、检查虚拟机或者服务器的位数 2、下载 jdk 3、解压jdk 4、添加全局环境变量 1、检查虚拟机或者服务器的位数 安装 java / javac 其实就是下载合适版本的 jdk,我们需要先确认虚拟机或者服务器的主机信息,来下载合适版本的 jdk。 输入 uname …

maven环境变量配置(超详细!)

下载地址: 官网地址 建议不要下载在C盘!! 配置过程 1.解压下载好的压缩包 2.此电脑–右键–属性–高级系统设置–环境变量 3.新建一个系统变量(点击系统变量的新建) 变量名:MAVEN_HOME 变量值&#x…

Python深度学习基础(八)——线性回归

线性回归引言损失函数解析解公式代码实例梯度下降理论随机梯度下降的手动实现代码torch中的随机梯度下降引言 我们生活中可能会遇到形如 yw1x1w2x2w3x3byw_1x_1w_2x_2w_3x_3byw1​x1​w2​x2​w3​x3​b 的问题,其中有y为输出,x为输入,w为权…

Java设计模式中工厂模式是啥?静态工厂、简单工厂与抽象工厂,工厂方法模式又是啥,怎么用,

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 4.3 工厂模式 4.3.1 背景 若创建对象时直接new对象,则会使对象耦合严重,更换对象则很复杂 4.3.2 简单工厂 4.3.3 特点 不是一种设计模…

c语言 文件处理2 程序环境和预处理

对比函数 sprintf(把一个格式化数据转化为字符串) sscanf (从一个字符串中读一个格式化数据) struct S {char arr[10];int age;float f; };int main() {struct S s { "hello", 20, 5.5f };//把这个转化为一个字符串s…

idea调试unity里面的lua代码

前言 本人一名java后端开发,看到前端同事调试lua代码无脑print,甚为鄙视,百度加实操写一份调试unity的lua脚本文档 操作 1.安装lua lua官网下载页面 最终下载页面 2.idea安装插件 emmylua 3.idea打开unity的lua脚本 idea->file->op…

【面试题】面试如何正确的介绍项目经验

大厂面试题分享 面试题库前端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库1、在面试前准备项目描述,别害怕,因为面试官什么都不知道面试官是人,不是神,拿到你的简历的时候…

ospf双向重发布,LSA优化综合

目录实验分析ip地址划分写公网缺省路由区域0公网MGRE搭建各个区域ospf的宣告改变ospf接口工作方式和更改接口优先级ospf多进程及双向重发布减少LSA的更新量1,减少特殊区域的LSA更新量2,骨干区域的优化域间汇总域外汇总防环nat的设置实验分析 如图实际的…

VS Code 为 Clang for MSVC 配置 cmake cmake tools

介绍 在windows平台上,由于平台API差异过大,一般为linux设计的项目(POSIX兼容)无法通过MSVC的编译,而是会报非常多的头文件错误。如果要修改,工程量将巨大。Windows平台上,主要有两个类POSIX兼容…

【JavaScript】事件--总结

千锋 1.Event 对象 代表事件的状态&#xff0c;比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。 div{width: 200px;height: 200px;background-color: yellow;} </style> <body><input type"text" id"username"&…

JavaScript 事件

文章目录JavaScript 事件HTML 事件常见的HTML事件JavaScript 可以做什么?JavaScript 事件 HTML 事件是发生在 HTML 元素上的事情。 当在 HTML 页面中使用 JavaScript 时&#xff0c; JavaScript 可以触发这些事件。 HTML 事件 HTML 事件可以是浏览器行为&#xff0c;也可以是…

babel做兼容处理 到底怎么使用?

1.背景 日常项目开发中总是避免不了对低版本浏览器做一些兼容处理&#xff0c;最常见的手段就是结合编译工具使用babel来处理一些语法的兼容&#xff0c;但是每次使用的时候其实Babel的配置和使用到的相关库总是云里雾里&#xff0c;网上的各种推荐方案眼花缭乱不知道到底应该…

自定义DotNetCore 项目模板

在进行代码开发时候&#xff0c;各自的团队或者公司都会有服务自己要求的项目代码模板&#xff0c;再创建新的项目时&#xff0c;都需要按照模板规范进行定义&#xff0c;NET支持自定义项目模板&#xff0c;这样在进行项目创建时就会高效很多。 官方参考文档&#xff1a;dotne…

软测复习01:软件测试概述

文章目录软件测试的目的软件测试的定义软件测试与软件开发软件测试发展软件测试的目的 基于不同的立场&#xff0c;存在着两种完全不同的测试目的 从用户的角度出发&#xff0c;希望通过软件测试暴露软件中隐藏的错误和缺陷&#xff0c;以考虑是否可接受该产品。从软件开发者的…

Java当中的定时器

目录 一、什么是定时器 二、Java当中的定时器 ①schedule()方法&#xff1a; ②TimerTask ​编辑 ③delay 三、实现一个定时器 前提条件: 代码实现: ①确定一个“任务”&#xff08;MyTask)的描述&#xff1a; ②schedule方法&#xff1a; ③需要一个计时器 属性…