PCIe锁定事务(Locked Transactions)介绍

简介: PCIe锁定事务(Locked Transactions)介绍

✨ 1. 锁定事务背景介绍



有些CPU在执行指令的过程中有可能误触发锁定而进入锁定访问模式。比如,一些传统的软件并不需要exclusive访问,但由于错误地使用了现如今会导致锁定的事务而对PCIe链路产生了锁定。由于锁定访问IO设备会潜在引入死锁、恶化传输性能,故(纯粹的)PCIe EP被禁止使用锁定访问,新的软件也不允许使用含有锁定访问IO设备操作的指令。


为避免使用传统软件的系统访问IO设备造成死锁,在PCIe系统中常采用RC代替主机CPU发起锁定事务。


 锁定事务是非转发事务,有三种:锁定存储器读请求(MRdLk)、与锁定存储器读请求对应的不带数据的完成(CplLk)及与锁定存储器读请求对应的带数据的完成(CplDLk)。PCIe系统中只允许RC发起锁定访问,不允许EP及bridge发起锁定访问,支持锁定访问的传统EP也仅用于兼容已有的旧版本软件。


这符合PCI协议exclusive访问中对锁定事务的限制条件。锁定存储器读事务协议示意图如图1所示。


29027806f5da4200be305ab814de2730.png


图1 锁定存储器读事务协议示意图





✨ 2. 锁定事务的发起及传输



锁定事务是在写请求事务之后由主机CPU发起的一笔或多笔读请求事务,读请求与写请求的目标地址相同。锁定存储器读请求TLP利用包头标里的信息向下游路由,通过交换开关,到达目标完成者。该请求的完成者只能是传统EP。一旦锁定建立,在被锁定的RC到传统EP或桥之间的路径上,所有其他请求都会被阻塞。


   📌  锁定事务的发起及传输遵循以下规则:


  •        锁定事务序列以MRdLk、CplDLk等锁定事务开始,以解锁消息结束。


  •        解锁消息用以指示锁定解除,由RC下发给完成者,也可以采用广播的方式广播给所有EP及桥,与锁定无关的设备会忽略该消息。


  •        解锁消息由交换节点将其传递给交换节点中锁定了的出端口。


  •        收到解锁消息后,传统EP及交换节点必须解除锁定。对于PCIe EP或桥等不支持锁定的接收者,解除锁定对齐无影响。


  •        所有违反锁定事务发起/传输规则的都有可能导致未知的设备/系统行为。


  •        以MRdLk开始的锁定事务,其接下来的存储器读请求也必须是锁定访问,收到CplDLk表示读成功,CplLk表示失败。若锁定读请求请求失败,意味着锁定访问的原子性被破坏,请求者与完成者之间的锁定也不复存在。


  •        没有存储器写的锁定请求,只有正常的存储器写请求。




✨ 3. 各PCIe组件的锁定访问规则


👉3.1 交换节点的锁定访问规则



交换节点必须对锁定事务及非锁定事务进行区分,防止锁定事务影响到非锁定事务,导致潜在的死锁。交换节点应遵循以下规则:


  •    交换节点从入端口到出端口传递MRdLk请求时,需阻塞住所有送往出端口的映射到VC0的访问请求。若接下来交换节点入端口收到了另一笔送往其他出端口(不同于上一MRdLk出端口),目前尚无相关规范。PCIe不支持出端口不同的锁定访问,软件也不能产生这种锁定请求。一旦出现这种情况,系统极有可能被死锁。


  •    在发出MRdLk请求后并收到CplDLk后,若完成状态为成功,交换节点需阻塞住所有传输在锁定访问相关端口上的非锁定请求。当然,出端口上映射到VC0的请求事务不受此影响。


  •    交换节点与锁定访问相关的入端口与出端口应保持锁定状态,直到当初收到锁定请求的入端口收到解锁消息之后才能解除锁定。解锁消息必须转发至出端口,也可以广播至所有其他端口。跟锁定访问无关的端口不受解锁消息的影响。


 📌 注:以上锁定访问事务仅限于TC0




👉3.2 PCIe-PCI桥的锁定访问规则


 PCIe-PCI桥的锁定访问规则与交换节点相似。由于PCIe-PCI桥仅适用于VC0/TC0,一旦开启了锁定访问,在PCIe-PCI桥上所有其他非锁定请求也都被阻塞住了。



👉3.3 RC的锁定访问规则


 RC允许作为锁定事务的请求者。若RC支持锁定事务,RC需遵循第2节的规则才能发起锁定访问。



👉3.4 传统EP的锁定访问规则


 传统EP支持锁定访问,但不建议使用。若传统EP支持锁定访问,其应按照如下规则处理锁定访问:


  • 传统EP在收到第一笔锁定读请求之后反馈一笔完成消息。若完成状态为不成功,传统EP不能锁定;若完成状态为成功,传统EP锁定。


  • 锁定以后,传统EP禁止发送任何TC映射到VC0的请求事务,但仍然可以采用其他TC(非映射到VC0)发送请求事务。


👉3.5 PCIe EP的锁定访问规则


PCIe EP不支持锁定,PCIe EP将MRdLk请求当作UR处理。


📚参考


   PCI Express Base Specification Revision 5.0 Version 1.0 (22 May 2019)


   PCI Express Technology - Comprehensive Guide to Generation1.x, 2.x and 3.0. Mike Jacson, Ravi Budruk, MindShare, Inc.


   PCI、PCI-X和PCI Express的原理及体系结构,马锦明,朱剑冰 等著



目录
相关文章
|
缓存 移动开发 JavaScript
PCIe 参考时钟架构 (Refclk Architecture)
PCIe 参考时钟架构 (Refclk Architecture)
6470 0
PCIe 参考时钟架构 (Refclk Architecture)
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
1048 0
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
|
缓存 异构计算 Perl
【毅力挑战】PCIe 每日一问一答(2022.04 归档)
【毅力挑战】PCIe 每日一问一答(2022.04 归档)
3788 3
【毅力挑战】PCIe 每日一问一答(2022.04 归档)
|
存储
PCIe VPD (Vital Product Data) 介绍
PCIe VPD (Vital Product Data) 介绍
3782 0
PCIe VPD (Vital Product Data) 介绍
|
安全 调度 数据安全/隐私保护
PCIe访问控制服务(ACS)
PCIe访问控制服务(ACS)
6683 0
PCIe访问控制服务(ACS)
|
Linux API C++
PCI-E配置MSI中断流程解析
<div id="article_content" class="article_content" style="margin: 20px 0px 0px; font-size: 14px; line-height: 26px; font-family: Arial;"> <p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0
7553 0
|
缓存 Linux
PCIe地址转换服务(ATS)详解2
PCIe地址转换服务(ATS)详解
2820 0
PCIe地址转换服务(ATS)详解2
|
存储 开发者
PCIe事务排序(Transaction Ordering)
PCIe事务排序(Transaction Ordering)
2167 0
PCIe事务排序(Transaction Ordering)
|
Linux Windows 内存技术
PCIe初始化枚举和资源分配流程分析
本文主要是对PCIe的初始化枚举、资源分配流程进行分析,代码对应的是alikernel-4.19,平台是arm64 ## 1. PCIe architecture ### 1.1 pcie的拓扑结构 在分析PCIe初始化枚举流程之前,先描述下pcie的拓扑结构。 如下图所示: ![11.png](https://ata2-img.oss-cn-zhangjiakou.aliyuncs
8566 1
PCIe初始化枚举和资源分配流程分析
|
算法
PCIe原子操作(Atomic Operation)
PCIe原子操作(Atomic Operation)
2473 0
PCIe原子操作(Atomic Operation)