当前位置: 首页 > news >正文

PCIe学习笔记(22)

Transaction Ordering

Transaction Ordering Rules

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

对于表2-40,列表示第一次发布的事务,行表示随后发布的事务。表项指示两个事务之间的排序关系。表项定义如下:

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

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

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

A Posted Request(转发请求)是指内存写请求或消息请求。

A Read Request(读请求)是指配置读取请求、I/O读取请求或内存读取请求。

An NPR (Non-Posted Request) with Data(带有数据的非转发请求)是指配置写请求、I/O写请求或原子操作请求。

表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必须不修改转发宽松排序属性。也允许根复合体去允许请求中的数据字节以任何顺序写入系统内存(字节必须写入正确的系统内存位置。只有写入它们的顺序是未指定的)。

对于根复合体和交换机,内存写入合并(在[PCI]中定义)是禁止的

◦注意:这是必需的,以便设备可以被允许优化其接收缓冲区和控制逻辑的内存写入大小匹配其自然预期的大小,而不是被要求支持最大可能的内存写入负载大小。

禁止合并内存读请求和/或为不同的请求Completion

No Snoop位不影响所需的排序行为

对于根端口和SW下游端口,Posted Request的接受或Completion必须不依赖于同一流量类中Non-Posted Request的传输。

•对于SW上游端口,Posted Request的接受或Completion必须不依赖于在同一流量分类中Non-Posted Request的下游端口的传输

对于EP、Bridge和SW上游端口,Posted Request的接受不能依赖于同一流量类中来自同一上游端口的任何TLP的传输。

•对于EP、Bridge和SW上游端口,Non-Posted Request的接受必须不依赖于来自同一流量类中同一上游端口的Non-Posted Request的传输。

•对于EP、Bridge和SW上游端口,Completion的接受必须不依赖于同一流量类别中来自同一上游端口的任何TLP的传输

请注意,EP永远不允许阻止Completion的接受。

•为Non-Posted Request发出的Completion必须以与相应的Non-Posted Request相同的流量类返回。

•支持点对点操作和SW的RC必须对所有转发的流量强制执行事务排序规则。

为了确保无死锁操作,设备不应该将流量从一个虚拟通道转发到另一个虚拟通道

无死锁操作取决于系统拓扑、支持的虚拟通道数量以及配置的流量类到虚拟通道的映射。

大内存读取vs.多个小内存读取?

例如,如果一个设备从位置1000h发出一个256字节的内存读请求,并且该请求使用两个128字节的Completions返回,可以保证这两个Completions将以以下顺序返回:

1 . Completion返回:数据从1000h到107Fh。

2 . Completion返回:1080h到10FFh的数据。

然而,如果设备发出两个内存读请求,每个128字节,首先到位置1000h,然后到位置1080h,两个完成可能以任意顺序返回

1 . Completion返回:数据从1000h到107Fh。

2 . Completion返回:1080h到10FFh的数据。

-或

1.Completion返回:从1080h到10FFh的数据。

2.Completion返回:数据从1000h到107Fh

由读事务观察到的更新顺序和粒度

作为更新排序的一个例子,假设数据块位于主机内存中,主机CPU首先写入位置a,然后写入另一个位置b。使用单个读事务读取该数据块的请求程序不能保证按照顺序观察这些更新。换句话说,无论位置A和B在数据块中的位置如何,请求者可能在位置B中观察到更新的值,而在位置A中观察到旧的值。除非Completer对更新顺序做出自己的保证(在本规范之外),否则依赖于更新顺序的Requester必须在启动对位置a的后续读取以返回其更新值之前,通过一个读事务观察对位置B的更新。

作为更新粒度的一个例子,如果主机CPU向主机内存写入一个四字(QW),那么从主机内存读取该QW的请求程序可能会看到QW的一部分更新了,而另一部分包含旧值。

虽然本规范没有要求,但强烈建议主机平台保证,当主机CPU将对齐的DW或对齐的qw写入主机内存时,PCI Express读取观察到的更新粒度不会小于DW

cacheline之间不需要排序

Root Complex作为单个内存读取的Completer,从主机内存请求多个cacheline,允许同时获取多个cacheline,以帮助促进多cacheline Completion,受Max_Payload_Size限制。这些缓存读取之间不需要排序关系

由写事务提供的更新顺序和粒度

如果完成者接受了包含多个双字(DWs)且清除了宽松排序位(Relaxed Ordering bit)的单个写入事务,则Completer数据缓冲区中对位置的更新的观察顺序必须是递增的地址顺序

如果路径上的PCI或PCI- x桥将多个写事务合并为一个事务,则需要这种语义。但是,观察到的对Completer数据缓冲区的更新的粒度超出了本规范的范围。

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

作为更新顺序和粒度的一个示例,如果请求程序将QW写入主机内存,在某些情况下,主机CPU从主机内存读取该QW可以观察到第一个DW已更新,第二个DW包含旧值。

相关文章:

PCIe学习笔记(22)

Transaction Ordering Transaction Ordering Rules 表2-40定义了PCI Express Transactions的排序要求。该表中定义的规则统一适用于PCI Express上所有类型的事务,包括内存、I/O、配置和消息。该表中定义的排序规则适用于单个流量类(TC)。不同TC标签的事务之间没有…...

Vue3 依赖注入Provide / Inject

在实际开发中,我们经常需要从父组件向子组件传递数据,一般情况下,我们使用 props。但有时候会遇到深度嵌套的组件,而深层的子组件只需要父组件的部分内容。在这种情况下,如果仍然将 prop 沿着组件链逐级传递下去&#…...

Python | Leetcode Python题解之第332题重新安排行程

题目: 题解: class Solution:def findItinerary(self, tickets: List[List[str]]) -> List[str]:def dfs(curr: str):while vec[curr]:tmp heapq.heappop(vec[curr])dfs(tmp)stack.append(curr)vec collections.defaultdict(list)for depart, arri…...

React状态管理:react-redux和redux-saga(适合由vue转到react的同学)

注意:本文不会把所有知识点都写一遍,并不适合纯新手阅读 首先Redux是一种状态管理方案,本身和react并没有什么联系,redux也可以结合其他框架来用。 react-redux是基于react的一种状态管理实现,他不像vuex那样直接内置在…...

刷题技巧:双指针法的核心思想总结+例题整合+力扣接雨水双指针c++实现

双指针法的核心思想是通过同时操作两个指针来遍历数据结构,通常是数组或链表,以达到优化算法性能的目的。具体来说,双指针法能够减少时间复杂度、空间复杂度,或者简化逻辑结构。以下是双指针法的几个核心思想: ps 下面…...

什么是前端微服务,有何优势

随着互联网技术的发展,传统的单体应用架构已经无法满足复杂业务场景的需求。微服务架构的兴起为后端应用的开发和部署提供了灵活性和可扩展性。与此同时,前端开发也经历了类似的演变,前端微服务作为一种新兴的架构模式应运而生。 一、前端微服…...

小论文写作——02:编故事

一篇论文,可以发水刊,也可以发顶刊顶会,这两者的区别就是一个故事编的好不好。 你的论文ABC,但不能之说有ABC。创新就是看你故事编的怎么样?创新是编出来的。 我们要说:我发现了问题,然后准备…...

GIT企业开发使用介绍

0.认识git git就是一个版本控制器,记录每次的修改以及版本迭代的一个管理系统 至于为什么会有git的出现,主要是为了解决一份代码改了又改,但最后还是要第一版的情况 git 可以控制电脑上所有格式的文档 1.安装git sudo yum install git -y…...

文件上传-前端验证

查看源代码(找验证代码) 1、源代码直接找到验证代码 示例: function checkFileExt(filename){var flag false; //状态var arr ["jpg","png","gif"]; //允许上传的文件//取出上传文件的扩展名var index f…...

ROT加密算法login-RESERVE

ROT算法(字母轮换加密) 也称为Caesar加密,是一种简单的字母替换加密算法。它通过将字母表中的每个字母向后(或向前)移动固定的位置来加密文本。 加密步骤: 选择一个固定的偏移量(通常是1到25之间的整数)&…...

C++ 新特性 | C++20 常用新特性介绍

目录 1、模块(Modules) 2、协程(Coroutines) 3、概念(Concepts) 4、范围(Ranges) 5、三向比较符(three-way comparison) C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https…...

Java设计模式之策略模式实践

1、策略接口 /*** 策略接口*/ public interface DemoStrategy {Result execute(); } 2、策略工厂 /*** 策略工厂*/ Component public class DemoFactory {Resourceprivate final Map<String, DemoStrategy> demoStrategy new ConcurrentHashMap<>();public Demo…...

C语言——结构体数组、结构体指针、结构体函数与二级指针

C语言中的结构体&#xff08;struct&#xff09;是一种用户自定义的数据类型&#xff0c;它允许你将不同类型的数据项组合成一个单一的类型。结构体数组则是一种特殊的数组&#xff0c;其元素为结构体类型。这意味着你可以在一个数组中存储多个具有相同结构的记录。 定义结构体…...

【4】策略模式

如上图所示&#xff0c;如果要加入一个新的货币&#xff0c;那么就需要对类中的Calculate函数进行修改&#xff0c;这违背了封闭开放原则。 上图中的方式更加合适&#xff0c;搞一个抽象类&#xff08;方法中可以用多态调用&#xff09;&#xff0c;然后每个货币自己是一个类&a…...

BGP 反射器联邦实验

要求&#xff1a; 1.如图连接网络&#xff0c;合理规划IP地址&#xff0c;AS 200内IGP协议为OSPF 2.R1属于AS 100&#xff1b;R2-R3-R4小AS 234 R5-R6-R7小AS 567&#xff0c;同时声明大AS 200&#xff0c;R8属于AS 300 3.R2-R5 R4-R7 之间为联邦EBGP邻居关系 4.R1-R8之…...

stm32入门学习13-时钟RTC

&#xff08;一&#xff09;时钟RTC stm32内部集成了一个秒计数器RTC&#xff0c;用于显示我们日常的时间&#xff0c;如日期年月日&#xff0c;时分秒等&#xff0c;RTC的主要原理就是进行每秒自增&#xff0c;如果我们知道开始记秒的开始时间&#xff0c;就可以计算现在的日…...

vuex properties of undefined (reading ‘getters‘)

前言&#xff1a; 最近打算用vue 写个音乐播放器&#xff0c;在搞 vuex 的时候遇到一个很神奇报错&#xff1b;vuex 姿势练了千百次了&#xff0c;刚开始的时候我一直以为是代码问题&#xff0c;反复检查了带了&#xff0c;依旧报错。 Error in mounted hook: "TypeError:…...

再谈表的约束

文章目录 自增长唯一键外键 自增长 auto_increment&#xff1a;当对应的字段&#xff0c;不给值&#xff0c;会自动的被系统触发&#xff0c;系统会从当前字段中已经有的最大值1操作&#xff0c;得到一个新的不同的值。通常和主键搭配使用&#xff0c;作为逻辑主键。 自增长的…...

认识一下测试策略与测试方案

目录 测试方案 测试策略 测试策略的内容主要包括 测试技术和工具 测试启动、停止和完成标准 风险分析和应对方案 测试范围 测试角色和职责 测试方法和类型 测试工具 测试层级 测试指标 测试可交付成果 测试方案的内容包括 测试目标 测试范围 测试环境 测试策略…...

Gradle 查看包的依赖关系

在 Terminal 中可以通过 gradle 的命令查看项目中使用的依赖库及其版本&#xff0c;并且可以更加直观的看到各个模块中库之间的依赖关系。同时也可以跟踪并解决与库版本冲突有关的问题。 工具查看 在 Android Studio 中选择 View > Tool Windoors > Gradle 或者直接选择…...

2006-2024年上市公司董事网络位置关系数据、中心度结构洞数据

1.资料名称&#xff1a;2024-2006年上市公司董事网络位置关系数据、中心度结构洞数据 2.测算方式&#xff1a;参考顶刊《会计研究》林钟高&#xff08;2023&#xff09;老师的做法&#xff0c;使用Pajek软件计算的董事所占据的结构洞数量&#xff0c;该值越大&#xff0c;表示…...

视觉检测项目中绕不开的基础操作就是圆心和直线测量。今天咱们就聊聊怎么用Halcon快速实现这两个核心功能,顺便分享些实际项目里踩坑攒出来的经验

视觉平台圆心和直线测量模块&#xff0c;依赖halcon先看圆心检测。工业场景里经常要定位金属零件上的定位孔&#xff0c;这种场景最怕的就是边缘不连续或者有毛刺。直接上代码&#xff1a; * 预处理不能少 median_image (Image, ImageMedian, circle, 3, mirrored) threshold (…...

python基于微信小程序的健身俱乐部信息管理系统的 功能多

目录系统架构设计核心功能模块扩展功能实现技术实现要点运维与安全项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统架构设计 采用前后端分离架构&#xff0c;前端基于微信小程序框架开发&#xff…...

基于微信小程序的大学生志愿银行管理系统[小程序]-计算机毕业设计源码+LW文档

摘要&#xff1a;大学生志愿银行作为一种创新性的志愿服务管理模式&#xff0c;对于激励大学生参与志愿服务、量化志愿服务成果具有重要意义。本文设计并实现了一个基于微信小程序的大学生志愿银行管理系统&#xff0c;该系统涵盖系统用户管理、新闻数据管理、变幻图设置、项目…...

Harmonyos应用实例90. 综合实践:旅游方案设计师

10. 综合实践:旅游方案设计师 知识点:综合运用小数计算、统计、方案选择等知识解决实际问题。 功能:设定一个旅游场景(预算、天数、人数)。学生需要选择交通方式、住宿、景点门票等,系统自动计算总费用,并与预算对比。提供方案对比功能,培养学生规划和决策能力。 //…...

Qwen3系统数据库设计:使用MySQL存储任务与字幕数据

Qwen3系统数据库设计&#xff1a;使用MySQL存储任务与字幕数据 今天咱们来聊聊怎么给一个智能字幕对齐系统——比如叫它Qwen3吧——设计一个靠谱的后端数据库。你可能已经用上了各种AI模型来处理视频和字幕&#xff0c;但生成的结果、处理的任务状态&#xff0c;这些数据总得有…...

3个超实用的窗口尺寸掌控技巧:让每个窗口都恰到好处

3个超实用的窗口尺寸掌控技巧&#xff1a;让每个窗口都恰到好处 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer WindowResizer是一款轻量级窗口尺寸调整工具&#xff0c;通过精准控…...

4个维度破解Switch系统局限:大气层稳定版技术突破与实践指南

4个维度破解Switch系统局限&#xff1a;大气层稳定版技术突破与实践指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 价值主张&#xff1a;重新定义Switch系统可能性 Switch玩家长期面…...

构建智能知识网络:MaxKB知识图谱关联检索技术全解析

构建智能知识网络&#xff1a;MaxKB知识图谱关联检索技术全解析 【免费下载链接】MaxKB &#x1f4ac; 基于 LLM 大语言模型的知识库问答系统。开箱即用&#xff0c;支持快速嵌入到第三方业务系统&#xff0c;1Panel 官方出品。 项目地址: https://gitcode.com/GitHub_Trendi…...

同步四开关升降压电源设计:MP28167-A 3A宽输入可编程DC-DC模块

1. 项目概述MPS升降压电源3A适配器是一款面向多场景供电需求的高集成度DC-DC转换模块&#xff0c;核心目标是解决输入源电压波动大、输出负载要求灵活可调的工程痛点。该设计不依赖固定输入电压等级&#xff08;如仅适配5V或12V&#xff09;&#xff0c;而是覆盖2.8V至22V宽范围…...