PCI Express高性能参考设计

ID 683541
日期 10/13/2015
Public

1.1.3. 用于读的吞吐量

PCI Express通过分割处理(split-transaction)进行读取。请求器首先发送存储器读请求。然后完成器发送ACK DLLP以应答存储器读请求。接下来归还可被分割成多个完整数据包的完整数据。
读吞吐量稍低于写吞吐量,因为读完成数据会被分割成多个数据包而不是通过单个数据包归还。以下实例图示说明该情况。该实例使用一个 512字节读请求和一个为256字节的完成数据包。可能的最大吞吐量计算如下:

完成数据包的数量 = 512/256 = 2

无ECRC的3 dword TLP头( Header)消耗= 2*20 = 40字节

最大吞吐量% = 512/(512 + 40) = 92%。

这些计算中不考虑任何DLLP和PLP。PCI Express基础规范定义读完成边界(RCB)参数。RCB参数决定自然对齐的地址边界,在这些边界上读请求由多个完成处理。对于根复合,RCB不是64字节就是128字节。但对于所有其他PCI Express器件,RCB为128字节。

注: 未对齐读请求可能经历进一步的吞吐量减少。

读吞吐量取决于以下时间之间的双程延迟:

  • 应用逻辑发布一个读请求的时间
  • 全部完成数据被归还的时间

为了最大化吞吐量,应用必须发布足够的读请求和处理足够的数据完成。或者,应用必须发布足够的非后置头信用(non-posted header credits)以覆盖该延迟。

下图显示的是存储器读请求(MRd)和完成(CplD)的时序框图。请求器会等待一个完成后才在做出后续读请求,于是造成较少吞吐量。

图 3. 低性能读请求时序框图

以下时序框图消除了除首个读以外的完成延迟。此策略维持了高吞吐量。

图 4. 高性能读请求时序框图

请求器通过在RX缓冲中为完成选择适当的设置以确保维持完成数据包的最大吞吐量。所有版本的Altera PCIe IP内核提供5种RX Buffer credit allocation performance for requests参数的设置。此参数指定RX缓冲中流程控制头,数据,和完成信用的分配。应该使用此参数分配信用以优化预期工作量。

吞吐量中最后的约束是所支持的剩余读请求数。剩余请求受制于头标签(header tag)数和最大读请求大小。最大读请求的大小由PCIe配置空间device control寄存器(bits 14:12)控制。应用层将头标签分配到非后置请求以识别完成数据。Number of tags supported参数指定可用的标签数。要维持持续的读吞吐量有一个最低标签数要求。该数目取决于系统。Windows系统中,8个标签通常足够确保维持无间歇4字节读请求持续的读完成。High Performance Request Timing Diagram使用4个标签。首个标签复用为第五个读。