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的原理及体系结构,马锦明,朱剑冰 等著



目录
相关文章
|
数据库管理 Ruby
Transaction recovery: lock conflict caught and ignored
Transaction recovery: lock conflict caught and ignored环境:RAC 4节点、oracle 11.2.0.4、redhat 5.9 64bit 问题描述: 1.
1850 0
|
存储 开发者
PCIe事务排序(Transaction Ordering)
PCIe事务排序(Transaction Ordering)
1311 0
PCIe事务排序(Transaction Ordering)
|
算法
PCIe原子操作(Atomic Operation)
PCIe原子操作(Atomic Operation)
1657 0
PCIe原子操作(Atomic Operation)
|
Web App开发 关系型数据库 PostgreSQL
|
SQL Oracle 关系型数据库
ORACLE等待事件:enq: TX - row lock contention
enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待事件。enq是enqueue的缩写,它是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIFO)。
1720 0
|
SQL Oracle 关系型数据库