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-DMA是一种基于PCIe接口的直接内存访问技术,能够实现高速数据传输。在我的学习笔记中,我详细记录了与PCIE-DMA相关的知识和学习心得。 首先,我了解到PCIE-DMA技术的基本原理和作用。PCIE-DMA可以通过PCIe总线直接访问系统内存中的数据,而不需要过多的CPU干预,提高数据传输的速度和效率。这种技术在需要大量数据传输的场景下非常有效,比如高性能计算、数据采集等。 其次,我深入学习PCIE-DMA的工作原理。PCIE-DMA的核心是DMA控制器,它负责管理和控制数据传输的流程。当设备需要读写内存中的数据时,它通过DMA控制器发送请求,然后DMA控制器生成一个事务,将数据直接传输到或从内存中。这样就大大减少了CPU的参与,提高了数据传输的效率。 另外,我还学习PCIE-DMA的配置和编程方法。PCIE-DMA的配置主要包括硬件配置和软件配置两个部分。硬件配置通常涉及到DMA控制器和PCIe接口的初始化和配置,软件配置则需要编写驱动程序来驱动DMA控制器和处理数据传输过程中的事件和异常。这部分内容对于我来说还比较新颖,需要更多的实践和实践。 最后,我总结了PCIE-DMA的应用场景和发展前景。PCIE-DMA在高性能计算、数据采集等领域具有广阔的应用前景。随着数据量的不断增加和传输速度的要求越来越高,PCIE-DMA技术的需求也将越来越大。因此,对于我来说,学习掌握PCIE-DMA技术非常有价值。 通过学习和记录PCIE-DMA的相关知识和经验,我对这项技术有了更深入的理解和掌握。希望将来能通过应用PCIE-DMA技术解决实际问题,为科研和工程项目的顺利进行做出贡献。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值