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从主机内存读取该四字时可能会观察到第一个双字已更新,而第二个双字包含旧值。

 

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

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

相关文章

双向RNN和双向LSTM

双向RNN和双向LSTM 一、双向循环神经网络BiRNN 1、为什么要用BiRNN 双向RNN,即可以从过去的时间点获取记忆,又可以从未来的时间点获取信息,也就是说具有以下两个特点: 捕捉前后文信息:传统的单向 RNN 只能利用先前的上下文信息…

张驰咨询:六西格玛黑带项目的成功关键

六西格玛黑带项目通常被认为是比较难的,因为它们涉及的问题通常比较复杂,可能需要较长时间的分析、实验和协调。然而,通过遵循一定的步骤和方法,可以有效地实施六西格玛黑带项目。 以下是实施六西格玛黑带项目的基本步骤&#x…

搭建Prometheus+grafana监控系统

1. 项目目标 (1)熟练部署安装node_exporter (2)熟练部署安装prometheus (3)熟练部署安装grafana 2. 项目准备 2.1. 规划节点 主机名 主机IP 节点规划 prometheus-server 10.0.1.10 server prome…

【MySQL数据库开发设计规范】之SQL使用规范

欢迎点开这篇文章,自我介绍一下哈,本人姑苏老陈 ,是一名JAVA开发老兵。 本文收录于 《MySQL数据库开发设计规范》专栏中,该专栏主要分享一些关于MySQL数据库开发设计相关的技术规范文章,定期更新,欢迎关注&…

3-3 基于RYU的流量风暴事件原理与响应策略

在传统网络中,存在着一定的广播流量,占据了一部分的网络带宽。同时,在有环的拓扑中,如果不运行某些协议,广播数据还会引起网络风暴,使网络瘫痪。 如有以下的一个网络拓扑结构(3_2_topoplus.py) …

eMMC和SD模式速率介绍

概述 在实际项目开发中我们常见的问题是有人会问,“当前项目eMMC、SD所使用模式是什么? 速率是多少?”。这些和eMMC、SD的协议中要求的,要符合协议。接下来整理几张图来介绍。 eMMC 模式介绍 一般情况下我们项目中都是会支持到H…

踩坑小结:Linux安装python环境 、安装OpenSSL

一、查看python版本 查看发现,linux上自带了python,不过是2.x版本的。 二、下载python3 2.1 下载 www.python.org/downloads/s… 可在当前目录下找到相对应的版本或者最新版本下载 也可以直接下载 Python 3.10.4 下载完在服务器上选择一个目录存放…

2024 Google I/O大会:全方位解读最新AI技术和产品

引言: 2024年的Google I/O大会如期举行,作为技术圈的年度盛事之一,谷歌展示了其在人工智能领域的最新进展。本次大会尤其引人注目,因为它紧随着OpenAI昨天发布GPT-4o的脚步。让我们详细解析Google此次公布的各项新技术和产品&…

matlab使用教程(71)—控制坐标区布局

1.与位置相关的属性和函数 有几个属性和函数可用于获取和设置坐标区的大小与位置。下表摘要显示了这些属性和函数。 函数或属性描述 OuterPosition 属性 使用此属性可以查询或更改坐标区的外边界,包括标题、标签和边距。要更改外边界,请将此属性指定为…

制造企业数据管理:从数据到价值的转化

在数字化浪潮席卷全球的今天,制造企业面临着前所未有的机遇与挑战。如何从海量的数据中提取有价值的信息,将其转化为企业的核心竞争力,成为了每一个制造企业必须面对的问题。而数据管理,正是实现这一转化的关键所在。制造企业数据…

618值得入手的数码好物如何选?热门爆款数码好物清单分享

618购物节即将到来,作为年中最重要的购物狂欢盛会之一,各大电商平台将推出众多优惠活动。如果你正准备购买数码产品,那么不要错过这个机会。在本文中,我们将为你介绍几款值得关注的热门数码产品,帮助你在618购物节中做…

从丢失到找回:手机相册恢复实战教程

“之前因为手机延迟把三千多张相片都删了,花了几个小时找文档,最后也没找到。对于爱拍照的朋友来说,照片被误删或不见真的会超级难过!请问大家有什么好方法能够恢复照片吗?” 在数字时代,手机相册成为了我…

AI作画算法详解:原理、应用与未来发展

随着人工智能技术的不断发展,AI作画逐渐成为了一个热门话题。AI作画,即利用人工智能算法生成绘画作品,不仅仅是技术的展示,更是艺术与科技结合的创新体现。本文将深入探讨AI作画的核心算法原理,并通过实例帮助读者更好…

《海峡科技与产业》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《海峡科技与产业》期刊是什么级别? 答:国家级 主管单位:中华人民共和国科学技术部 主办单位:科技部海峡两岸科学技术交流中心 问:《海峡科技与产业》影响因子? 答:…

【C语言每日题解】用函数来模拟实现strlen()、strcpy()、strcmp()、strcat()

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 学习了函数后,老师让我们用函数来实现上面这四个字符串函数。 我们首先来了解一下这四个字符串函数: 1.strlen函数 用于获取字符串长度(不包括末尾…

Python 渗透测试:反弹 shell (反弹 后门 || 程序免杀)

什么叫 反弹 shell 反弹 shell (Reverse Shell) 是一种常见的渗透测试技术,它指的是受害者主机主动连接攻击者的主机,从而让攻击者获得对受害者主机的控制权。在一个典型的反弹 shell 攻击中,攻击者会在自己的主机上监听一个特定的端口,然后诱使目标主机主动连接到这个端口。当…

Vue3实战笔记(22)—路由Vue-Router 实战指南(路由传参)

文章目录 前言一、路由router-link二、路由传参1.query方式2.params方式3.props传参 总结 前言 vue-router 是 Vue.js 官方路由管理器。它和 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得易如反掌。 前面提到过简单的使用路由,直到上文使用404界面…

【找到所有数组中消失的数字】leetcode,python

很菜的写法: class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:nlen(nums)#存1-Nnum_1[i for i in range(1,n1)]#预存数num_2[]nums.sort()for i in nums:num_1[i-1]0for i in num_1:if i!0:num_2.append(i)return num_2能过但是…

使用可接受gitlab参数的插件配置webhook

jenkins配置 安装Generic Webhook Trigger 配置远程触发令牌 勾选Print post content和Print contributed variables用于打印值 配置gitlab 选择新增webhook 配置webhook http://JENKINS_URL/generic-webhook-trigger/invoke,将JENKINS_URL修改成自己的jenkins地址 先保存…

基于网络爬虫技术的网络新闻分析(二)

目录 2 系统需求分析 2.1 系统需求概述 2.2 系统需求分析 2.2.1 系统功能要求 2.2.2 系统IPO图 2.2 系统非功能性需求分析 3 系统概要设计 3.1 设计约束 3.1.1 需求约束 3.1.2 设计策略 3.1.3 技术实现 3.3 模块结构 3.3.1 模块结构图 3.3.2 系统层次图 3.3.3…