PCI Express学习篇---PCIe Ordering Rule

声明:此文章为原创,转载请注明 转自https://mp.csdn.net/editor/html/115790068

针对同一TC,PCIe有一套Ordering rules.

Ordering rule的作用:

  • 兼容传统的总线(PCI,PCI-X,AGP)
  • 确保Completion是确定的,顺序是可控的
  • 避免deadlock死锁
  • 通过最小化read latency和管理read write ordering以此来最大化性能和吞吐率

有三种模型:

  • Strong Ordering: 同一TC,需要采用强序(Producer/Consumer模型的前提下)。
  • Weak Ordering: 如果没有依赖关系(非Producer/Consumer模型),不需要采用强序,可以safely reorder.
  • Relaxed Ordering: 某些transactions可以通过软件控制,优点是可以像weak ordering一样提供性能,但是是由软件指定没有依赖关系.

同一TC采用一套PCIe Ordering rule, 但是为了设计简单,不同TC但是映射到同一VC时规则也采用同一套规则。

以下介绍PCIe Ordering Rule


注意:Y/N表示两种情况都不会违反PCIe Ordering Rule

Posted Request : Memory Write Request or a Message Request.

Read Request: Configuration Read Request, an I/O Read Request, or a Memory Read Request.

NPR (Non-Posted Request) with Data: Configuration Write Request, an I/O Write Request, or an AtomicOp Request.

正常条件下(无RO,无IDO)

A2a---P不能超越之前发起的P

B2a, C2a---NP不能超越之前发起的P

D2a---CPL不能超越之前发起的P

B3,B4,C3,C4---NP允许超越之前的NP

A5a---P允许超越之前的CPL

B5,C5---NP允许超越CPL

D5a---CPL允许超越CPL(不同的Transaction ID)

D5b---CPL不允许超越CPL(同一Transaction ID)

RO情况下:(与P相关)

A2b---RO,P可以超越之前的P

D2b---RO, CPL可以超越之前的P

C2b---RO, NPR with data可以超越之前的P

IDO情况下:(与P相关)

A2b---IDO,P可以超越之前的P

B2b,C2b---IDO,NP可以超越之前的P

D2b---IDO,CPL可以超越之前的P

可以避免死锁的情况:(与NP相关)

A3,A4---P可以超越之前NP;

D3,D4--CPL可以超越之前的NP;

A5b--P可以超越之前的CPL(只存在于PCI Express to PCI/PCI-X Bridge

以下介绍Producer/Consumer模型


1. Producer发起Posted Request给Memory;

2 and 3.  Processor发起NP轮询Flag=0,表示Producer没有写完;

4. Producer写完之后发起Posted Request, Flag=1

5 and 6.  Processor发起NP轮询Flag=1,表示Producer写完;

7. Consume发起MWr清除Flag;

8 and 9.Producer想继续传输数据,NP检查Status

10 and 11. Processer读Memory中的数据;

12. Processer读完之后MWr 把Status置为1;

13 and 14. Processor读到Status为1;

15. Producer发起MWr清除Status.

总结上述过程:Producer把数据都搬运到Mem后Consumer开始读数,Consumer读完所有数据后Producer才会继续搬数。

可能存在的问题:

如果Switch中的CPL超越了P,这种情况下Processor读到Flag=1,但是此时数据可能还没有搬完

所以PCIe Ordering rule“CPL must not pass P”这条规则保证了CPL和P之间的Ordering,避免了上述问题。

以下介绍提高性能的方式之一:Relaxed Ordering(RO)


设置RO的包允许在Switch或RC中,对Requester和Completer的通路上进行reorder,来改善性能。

比如如果没有设置RO,Posted buffer满了导致Posted包block,会block其他所有类型的包,如果软件知道后面的包与前面的包没有顺序上的依赖关系,可以设置RO,这样就不会block其他包了。

可以使用RO的包类型

除了上述表中,还有NPR with data可以超越Memory Write/Message Request

以下介绍提高性能的方式之一:ID based Ordering(IDO)


来自不同requester,顺序上不太可能有依赖关系。但是如果是PCIe Ordering rule也会block没有依赖关系的TLP Stream.

如果不同的TLP Stream, 即Requester ID(or Completion ID of CPL)不同的情况下, 可以允许packet re-ordering.

通过Device Control 2 register和TLP中的Attr[2]实现IDO 

什么时候用到IDO?

Spec强烈建议safely的情况下同时使用RO和IDO。

  • 例如EP“directly Communicating”with only one other entity, most commonly the RC(directly Communicatiing”是指DMA traffic, PIO traffic, and interrupt traffic),所有TLP都可以使用IDO,是安全的。
  • 如果EP与多个Agent通信(例如communicating with RCiEPs or communicating using P2P Root Port traffic)IDO不是安全的,

在上文的例子中,EP DMA写memory, 之后在Peer to Peer写Flag,如果Flag这个device也发起一个同样地址的DMA写,通常情况下两个DMA写是in order的,但是如果使能了IDO后,顺序不能保证。

RO也是同理,包含控制traffic用RO是不安全的。

对于Completer,如果使能IDO,建议所有的CPL都使能。

 

 

 

 

  • 8
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值