半亩花草 发表于 2024-8-15 12:53:08

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不答应第二个事务通过第一个事务。这是支持生产者/消耗者强排序模子所必须的。
https://i-blog.csdnimg.cn/direct/ab396a696a6c40c0984bab4411fb6cbd.png
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必须不修改转发宽松排序属性。也答应根复合体去答应请求中的数据字节以任何次序写入系统内存(字节必须写入精确的系统内存位置。只有写入它们的次序是未指定的)。
•对于根复合体和交换机,内存写入归并(在中界说)是禁止的。
◦注意:这是必须的,以便装备可以被答应优化其吸收缓冲区和控制逻辑的内存写入大小匹配其天然预期的大小,而不是被要求支持最大可能的内存写入负载大小。
•禁止归并内存读请求和/或为不同的请求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包含旧值。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: PCIe学习笔记(22)