PCIE协议-2-事务层规范-Transaction Ordering

2.4.1 事务排序规则

表2-40定义了PCI Express事务的排序要求。此表中定义的规则适用于PCI Express上的所有事务类型,包括内存、I/O、配置和消息事务。在单个流量类别(Traffic Class,TC)内,这些排序规则适用。不同TC标签之间的事务没有排序要求。请注意,这也意味着通过不同虚拟通道传输的流量之间也没有排序要求,因为具有相同TC标签的事务不允许被映射到任何PCI Express链路上的多个虚拟通道上。

对于表2-40,列代表首次发出的事务,行代表随后发出的事务。表中的条目指示两个事务之间的排序关系。表项定义如下:

Yes   第二个事务(行)必须被允许通过第一个(列),以避免死锁。(当发生阻塞时,第二个事务需要通过第一个事务。必须理解公平性以防止饥饿。)

Y/N   没有要求。第二个事务可以选择性地通过第一个事务,或者被它阻塞。

No  第二个事务不得被允许通过第一个事务。这是为了支持生产者/消费者强排序模型所必需的。

表2-40中行列标题的解释:

  • A Posted Request(转发请求)是指内存写请求或消息请求。
  • A Read Request(读请求)是指配置读取请求、I/O读取请求或内存读取请求。
  • An NPR (Non-Posted Request) with Data(带有数据的非转发请求)是指配置写请求、I/O写请求或原子操作请求。
  • A Non-Posted Request(非转发请求)是指读取请求或带有数据的非转发请求。

表2-40中条目的说明:

  • A2a:转发请求不得通过另一个转发请求,除非A2b适用。
  • A2b:如果设置了RO,则允许转发请求通过另一个转发请求。如果设置了IDO,并且两个请求者的ID不同,或者两个请求都包含PASID TLP前缀且两个PASID值不同,则允许转发请求通过另一个转发请求。
  • A3, A4:为了避免死锁,转发请求必须能够通过非转发请求。
  • A5a:转发请求被允许通过完成事务,但除非A5b适用,否则不必能够通过完成事务。
  • A5b:在PCI Express到PCI/PCI-X桥接器中,如果PCI/PCI-X总线段以传统PCI模式运行,对于PCI Express到PCI方向的事务,为了避免死锁,转发请求必须能够通过完成事务。
  • B2a:除非B2b适用,读取请求不得通过转发请求。
  • B2b:如果设置了IDO,并且两个请求者的ID不同,或者两个请求都包含PASID TLP前缀且两个PSID值不同,则允许读取请求通过转发请求。
  • C2a:除非C2b适用,带有数据的非转发请求不得通过转发请求。
  • C2b:设置了“RO”的带有数据的非转发请求(NPR)被允许通过转发请求。如果设置了“IDO”,并且两个请求者的ID不同,或者两个请求都包含PASID TLP前缀且两个PASID值不同,则允许通过转发请求。

  • B3, B4, C3, C4:非转发请求被允许通过另一个非转发请求。

  • B5, C5:非转发请求被允许通过完成事务。

  • D2a:除非D2b适用,完成事务不得通过已转发请求。

  • D2b:允许I/O或配置写入完成事务通过转发请求。如果设置了RO,则允许完成事务通过转发请求。如果设置了IDO,并且完成事务的完成者ID与转发请求的请求者ID不同,则允许完成事务通过转发请求。

  • D3, D4:为了避免死锁,完成事务必须能够通过非转发请求。

  • D5a:具有不同事务ID的完成事务被允许相互通过。

  • D5b:具有相同事务ID的完成事务不得相互通过。这确保了与单个内存读取请求关联的多个完成事务将保持地址升序排列。

  • 附加规则:

    • 允许PCI Express Switch去允许设置了宽松排序位的内存写入或消息请求通过任何之前转发的、在同一方向前进的内存写入或消息请求。Switch必须不修改转发宽松排序属性。也允许根复合体去允许请求中的数据字节以任何顺序写入系统内存(字节必须写入正确的系统内存位置。只有写入它们的顺序是未指定的)。
    • 对于根复合体和Switch,禁止内存写入合并(如[PCI]中定义)。
      • 请注意:这是必要的,以便设备可以优化其接收缓冲区和控制逻辑,以匹配它们自然预期的内存写入大小,而不是必须支持最大可能的内存写入负载大小。
    • 禁止合并内存读取请求和/或不同请求的完成事务。
    • 不监听位不影响所需的排序行为。
    • 对于根端口和Switch下游端口,接受转发请求或完成事务不得依赖于同一流量类别内非转发请求的传输。
    • 对于Switch上游端口,接受转发请求或完成事务不得依赖于下游端口内同一流量类别的非转发请求的传输。
    • 对于端点(Endpoint)、桥接器(Bridge)和交换机上游端口(Switch Upstream Ports),接受转发请求(Posted Request)不得依赖于同一上游端口(Upstream Port)内同一流量类别(Traffic Class)中传输的任何事务层包(TLP)。

    • 对于端点、桥接器和交换机上游端口,接受非转发请求(Non-posted Request)不得依赖于同一上游端口内同一流量类别中传输的非转发请求。

    • 对于端点、桥接器和交换机上游端口,接受完成事务(Completion)不得依赖于同一上游端口内同一流量类别中传输的任何TLP。

    • 请注意,端点(Endpoints)永远不允许阻止接受完成事务。

    • 针对非转发请求发出的完成事务必须返回与相应非转发请求相同的流量类别。

      • 支持点对点操作的根复合体(Root Complexes)和交换机必须对所有转发的流量强制执行这些事务排序规则。

      • 为确保无死锁操作,设备不应将流量从一个虚拟通道(Virtual Channel)转发到另一个虚拟通道。在设备转发或转换虚拟通道之间的事务时避免死锁的约束规范不在本文档范围内(有关相关议题的讨论,请参阅附录D)。

2.4.2 读取事务观察到的更新排序和粒度

如果请求者(Requester)使用单个事务从完成者(Completer)读取数据块,而完成者的数据缓冲区同时正在被更新,那么在读取返回的数据中反映的多个更新的排序和每个更新的粒度不在本规范的范围之内。这既适用于通过PCI Express写入事务执行的更新,也适用于通过其他机制(如主机CPU更新主机内存)执行的更新。

如果请求者使用单个事务从完成者读取数据块,而完成者的数据缓冲区同时正在被一个或多个不在PCI Express结构上的实体更新,那么在读取返回的数据中反映的多个更新的排序和每个更新的粒度也不在本规范的范围之内。

以更新排序为例,假设数据块位于主机内存中,主机CPU首先写入位置A,然后写入不同的位置B。使用单个读取事务读取该数据块的请求者不能保证按顺序观察这些更新。换句话说,请求者可能会观察到位置B的更新值和位置A的旧值,而不管位置A和B在数据块内的排列如何。除非完成者就更新排序作出自己的保证(在本规范之外),否则依赖于更新排序的请求者必须先通过一个读取事务观察位置B的更新,然后再发起对位置A的后续读取以返回其更新值。 以更新粒度为例,如果主机CPU向主机内存写入一个四字(QW),从主机内存读取该四字的请求者可能会观察到四字的一部分被更新,而另一部分包含旧值。

虽然本规范不要求,但强烈建议主机平台保证,当主机CPU向主机内存写入对齐的双字(DW)或对齐的四字(QW)时,PCI Express读取观察到的更新粒度不会小于双字。

2.4.3 写入事务提供的更新排序和粒度

如果完成者接受了包含多个双字(DWs)且清除了宽松排序位(Relaxed Ordering bit)的单个写入事务,那么在完成者的数据缓冲区内对位置的更新观察到的排序必须按递增地址顺序。如果路径上的PCI或PCI-X桥接器将多个写入事务合并为单个事务,这种语义是必需的。然而,对完成者数据缓冲区的更新观察到的粒度不在本规范的范围之内。

虽然本规范不要求,但强烈建议主机平台保证当PCI Express写入更新主机内存时,主机CPU观察到的更新粒度不会小于双字(DW)。

以更新排序和粒度为例,如果请求者向主机内存写入一个四字(QW),在某些情况下,主机CPU从主机内存读取该四字时可能会观察到第一个双字已更新,而第二个双字包含旧值。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5个不同类型的AI问答机器人你都用过吗?

在科技发达的今天,AI问答机器人已经深入我们的日常生活,各式各样的机器人应用在生活的方方面面。本文给大家推荐5个不同类型的AI问答机器人,看看你都用过哪些,或者有没有兴趣尝试一下呢? 1.高效知识库型:He…

论文解读:Matching Feature Sets for Few-Shot Image Classification

文章汇总 动机 将表示分解为独立的组件应该允许捕获图像的几个不同方面,然后可以有效地使用这些方面来表示新类别的图像。 解决办法 从卷积主干连接多尺度特征映射。在网络中以各种尺度嵌入浅层自关注模块(称为“映射器”)。 流程解读 (a)图中右边的灰色小正方…

C++ LeetCode 刷题经验、技巧及踩坑记录【三】

C LeetCode 刷题经验、技巧及踩坑记录【三】 前言vector 计数vector 逆序vector 删除首位元素vector二维数组排序vector二维数组初始化C 不同进制输出C 位运算C lower_bound()C pairC stack 和 queue 前言 记录一些小技巧以及平时不熟悉的知识。 vector 计数 计数 //记录与首…

面 试 题

过滤器和拦截器的区别 都是 Aop 思想的一种体现,用来解决项目中 某一类 问题的两种接口(工具),都可以对请求做一些增强 出身 过滤器来自 servlet 拦截器来自 spring 使用范围 过滤器 Filter 实现了 iavax.servlet.Filter 接口,也就是说…

【三家飞机制造商】

1.Boeing 波音 F-15战机 B-52轰炸机 阿帕奇攻击直升机 E-3 2 .Lockheed Martin 洛克希德马丁 F35 F22 F16 F117 C130 U2 3 Raytheon 雷神

高效协同,智慧绘制:革新型流程图工具全解析

流程图,作为一种直观展示工作过程和系统运作的工具,在现代办公和项目管理中发挥着不可或缺的作用。 其优势在于能够清晰、直观地呈现复杂的过程和关系,帮助人们快速理解并掌握关键信息。同时,流程图也广泛应用于各种场景&#xf…

NodeJS V8引擎内存和垃圾回收器

关于max_old_space_size max_old_space_size参数用于指定V8引擎的老生代内存的最大大小。通过增加max_old_space_size参数的值,我们可以提供更多的内存给V8引擎,从而提高应用程序的性能和稳定性。 既然提到了老生代,就不得不提下什么是垃圾&…

tensorrtx-yolov5-v6.0部署在windows系统

前言:最近几天一直在搞这个东西,现在跑通了,为了以后自己看和帮助他人,就记录一下。虽然是跑通了但是觉得怪怪的,感觉不是自己想要的效果,另外这个只能检测图片,不能摄像头实时监测(我暂时没找到…

python中cv2,等等如何修改为中文字体显示,这里以人脸表情识别中文标签为例

中文字体显示 首先下载字体包部署字体包代码实现部分 想必大家在使用python过程中都会遇到,想要显示中文的时候,但是py基本上都是英文字体,下面我将给大家提供一个比较好的解决方案: 首先下载字体包 方法: 我使用的是…

SuperBox设计出图的效率提升!新增内门自动开孔和垫高支架图纸输出功能

越来越多的配电箱项目要求带内门,内门不仅可以有效减少外界灰尘、异物进入配电箱内部,保障配电箱正常运行,还能够隔离操作人员意外触摸导电部件,减少触电事故的发生。但是配电箱在配置内门后,会给设计带来更多的要求&a…

Linux虚拟主机cPanel重置密码

我使用的Hostease的Linux虚拟主机产品默认带普通用户权限的cPanel面板,这边自购买后一直未重新设置过cPanel面板的密码,但是了解到要定期重置一下cPanel面板的密码,以确保主机数据安全,因此想要进行重置cPanel面板的密码&#xff…

Leecode热题100---3:无重复字符的最长子串

题目&#xff1a;给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度。 C&#xff1a; 指针法&#xff0c;使用at读取字符串中的值&#xff1b; #include <iostream> #include <string> #include <vector> #include <windows.…

数据结构【顺序表】

文章目录 1.顺序表的概念线性表物理结构逻辑结构 2.顺序表的分类2.1静态顺序表2.2动态顺序表 3.顺序表接口的实现头文件(SQList.h)如下源文件初始化顺序表销毁顺序表插入扩容尾插头插 封装扩容函数删除尾删头删 查找元素在指定位置前插入数据情况一(指定的位置不是首元素)情况二…

淘宝扭蛋机小程序开发:探索未知的惊喜世界

一、引言 在这个充满无限可能的数字时代&#xff0c;每一次点击都可能带来意想不到的惊喜。淘宝扭蛋机小程序&#xff0c;正是为了满足您对惊喜的渴望&#xff0c;将扭蛋的趣味与购物的便捷完美结合&#xff0c;带您进入一个充满未知与乐趣的惊喜世界。 二、产品介绍 淘宝扭…

Redis教程(二):Redis在Linux环境下的安装

Linux环境下安装&#xff1a; 下载地址&#xff1a;Downloads - Redis 安装步骤&#xff1a; 下载得到一个 tar.gz 压缩文件 上传到Linux的/opt/soft目录&#xff0c;使用以下命令解压 tar -zxvf redis-6.2.14.tar.gz Linux安装基本环境gcc&#xff0c;安装命令 yum insta…

Encoder——Decoder工作原理与代码支撑

神经网络算法 &#xff1a;一文搞懂 Encoder-Decoder&#xff08;编码器-解码器&#xff09;_有编码器和解码器的神经网络-CSDN博客这篇文章写的不错&#xff0c;从定性的角度解释了一下&#xff0c;什么是编码器与解码器&#xff0c;我再学习笔记补充的时候&#xff0c;讲一下…

什么是网络端口?为什么会有高危端口?

一、什么是网络端口&#xff1f; 网络技术中的端口默认指的是TCP/IP协议中的服务端口&#xff0c;一共有0-65535个端口&#xff0c;比如我们最常见的端口是80端口默认访问网站的端口就是80&#xff0c;你直接在浏览器打开&#xff0c;会发现浏览器默认把80去掉&#xff0c;就是…

dfs记忆化搜索,动态规划

动态规划概念&#xff1a; 给定一个问题&#xff0c;将其拆成一个个子问题&#xff0c;直到子问题可以直接解决。然后把子问题的答案保存起来&#xff0c;以减少重复计算。再根据子问题的答案反推&#xff0c;得出原问题解。 821 运行时间长的原因&#xff1a; 重复大量计算…

Cadence 16.6 绘制PCB封装时总是卡死的解决方法

Cadence 16.6 绘制PCB封装时总是卡死的解决方法 在用Cadence 16.6 PCB Editor绘制PCB封装时候&#xff0c;绘制一步卡死一步&#xff0c;不知道怎么回事儿&#xff0c;在咨询公司IT后&#xff0c;发现是WIN系统自带输入法的某些热键与PCB Editor有冲突&#xff0c;导致卡死。 …

融资融券最低利率4.0!,融资融券利息计算公式,怎么开通?

融资融券的费率&#xff1a; 融资融券的费率主要包括融资利率和融券费率&#xff0c;这些费率的高低主要取决于证券公司的成本、政策倾向以及投资者的资金量大小。 融资利率方面&#xff0c;多数券商的优惠融资利率在5.5%到7.5%之间&#xff0c;与券商的成本和政策有关。一些…