【博文连载】PCIe扫盲——PCIe总线性能评估(有效数据速率估算) 2024-05-07 04:16:46 前面的文章提到过PCIe总线(Gen1&Gen2)采用了8b/10b编码,因此其有效数据速率为物理线路上的速率的80%。即Gen1的有效速率为2.0Gbps=2.5Gbps*80%,而Gen2的有效速率为4Gbps=5Gbps*80%。如果以数据包的Data Payload为真实有效数据,来计算得话,实际应用中的有效速率会更低。因为,数据包的包头、包尾(LCRC和ECRC等)、数据链路层添加的包编号等等;用于Ack/Nak和Flow Control等的DLLP;用于链路训练和Skip的Order Sets等都会影响真实的有效速率。这一篇文章,将来详细地聊一聊,如何粗略地估算一个PCIe总线的真实有效速率。注:由于设备反应时间、数据处理时间、不确定的插入等待时间等等原因,无法从理论上,准确无误地计算出一个PCIe总线的真实有效速率。注:关于8b/10b编码,前面的文章中已经详细地介绍过了,这里就不再重复了。对于任意的一个TLP来说,除了Data Payload,还有物理层添加的包头(1 Byte)、数据链路层添加的包编号(2 Bytes)、事务层添加的包头(12 or 16 Bytes)、事务层添加的ECRC(4Bytes,可选的)、数据链路层添加的LCRC(4Bytes)和物理层添加的包尾(1 Byte)。具体如下图所示:如果以3DW的事务层包头来计算,且不添加ECRC,则该TLP至少含有20 Bytes的额外数据(除了Data Payload之外的)。我们姑且称之为TLP Overhead。注:32bits地址的TLP是3DW包头,而64bits地址的TLP是4DW包头,具体请参考前面的文章。如果只从TLP Overhead考虑的话,显然每个TLP包含的Data Payload的量越大,真实有效速率越高。然而,实际应用中却并非如此,因为链路上的其他因素也在影响实际的真实有效速率。PCIe Spec规定,任何TLP都不允许被Order Sets或者DLLP打断。也就是说,Skip Order Sets和FC DLLP、Ack/Nak DLLP都只能在两个TLP之间发送。换一句话说,Data Payload越大,TLP的也就越长,为了保证正常通信,两个TLP之间的时间间隔也就越大。这就是为什么Data Payload越大,但真实有效速率却未必会越高的原因。除了TLP Overhead之外,前面文章介绍的Ack/Nak机制和Flow Control机制都是需要花费时间的。这里我们分别称其所消耗的时间为Link Protocol Overhead和Flow Control Protocol Overhead。具体这里就不详细,介绍了,请参考之前的文章。注:显然,更低频率的Flow Control Update,会一定程度上提高真实有效速率,但这需要更大的Rx Buffer,从而带来更高的硬件成本开销。一般情况下,PCIe设备都应当遵循Spec所定义的FC Update周期计算方式,具体可可参考前面的文章:http://blog.chinaaet.com/justlxy/p/5100053465-----------------------------------------------------------------------------------------------------除了前面介绍的TLP Overhead、Link Protocol Overhead和Flow Control Protocol Overhead之外,另一个影响真实有效速率的关键因素便是Max_Payload_Size,以及Read_Completion_Boundary(RCB)。虽然PCIe Spec规定,TLP的Data Payload最高可达4096 Bytes,但同时也规定了PCIe体系结构中,所有的设备,都必须使用相同的Max_Payload_Size值。换一句话说,整个总线的Max_Payload_Size值必须使用总线体系结构中所有设备所支持的最小的Max_Payload_Size值。具体如下图所示:注:每个设备中的Function的所支持的最大的Max_Payload_Size值应当是相同的。注:每个设备所支持的Max_Payload_Size最大值信息,存在于Device Capability Register中。Max_Payload_Size值的设置是在PCIe总线枚举和配置的过程中完成的,软件确定了Max_Payload_Size的值后,会将该值写入到每个设备的Device Control Register中。在不考虑Ack/Nak机制和Flow Control机制等因素的情况下,真实有效速率可以这样计算:则有:以128 Bytes的Max_Payload_Size为例,不考虑Ack/Nak机制和Flow Control机制等因素的情况下,理论极限真实有效速率如下:其中,1720Mb/s = 86% * 2000Mbps。(x1 Gen1)注:读操作还需要考虑RCB等因素,后面会详细介绍。表格里的数据是在假设RCB为64 Bytes的情况下得到的,因此其计算方法为:64/(64+20)=76%。-----------------------------------------------------------------------------------------------------针对读操作,还有一个Maximun Read Request Size(即最大读请求)的概念,在PCIe总线配置的过程中,该值会被写入到每个设备的Device Control Register中。PCIe Spec规定,Maximun Read Request Size的值可以超过Max_Payload_Size,例如,可以向Max_Payload_Size为128 Bytes的设备,一次请求读512 Bytes的数据。此时,一次请求会对应多个返回的Completion。然而,Maximun Read Request Size的值也并非越大越好,该值设置的过大,会导致某个PCIe设备独占整个系统带宽的时间过长。但是如果Maximun Read Request Size设置的过小,则需要发起多个读请求操作。Read Completion Boundary(RCB)确定了针对读请求返回的每个Completion的Data Payload的最大值,一般为64 Bytes或者128 Bytes(由系统或者软件设置)。当然,Completion的Data Payload值,是可以小于RCB的。以64 Bytes 的RCB和一次读256 Bytes的请求为例,可能的情况如下图所示:注:目前,大部分的Root都固定地使用64 Bytes的RCB,尽管Max_Payload_Size的值可能是128或者更大。-----------------------------------------------------------------------------------------------------最后,以几个例子,来回顾一下上面的内容。参考文献:1、Xilinx. Understanding Performance of PCI Express Systems 赞 (0) 相关推荐 PCIe 6.0时代即将到来,你准备好了吗? 新思专家Gary Ruggles发表在电子发烧友网的专业洞见 PCI Express(PCIe)6.0技术即将推出,对于高性能计算.AI和存储SoC开发者来说,理解并考虑如何最好地应对即将面对的关键变 ... 串行总线技术(二)-串行总线中的先进设计理念及SerDes/PMA介绍 字节分割/链路聚合下面以PCIe为例对字节分割加以讨论,如图所示.PCIe使用链路和线路来发送串行数据.链路是一个逻辑实体,能够具有单个线路或多个线路.当逻辑链路包括一个线路时,TLP和DLLP通过单 ... 高速串行技术(二)之(PCIe中的基本概念) 写在前面的话: 预备了前面的并行串行传输的基础知识,就是为了一个PCIe的项目,搞得头疼,一个例子都跑了一下,看到能够识别心里高兴了一把,但是打开代码一看 完全不懂 查找资料 很多 但是也很凌乱 比清 ... 【博文连载】PCIe扫盲——PCIe总线物理层入门 前面的文章简单的介绍了一些关于PCIe总线事务层(Transaction Layer)和数据链路层(Data Link Layer)的一些基本概念.这篇文章来继续聊一聊PCIe总线的最底层--物理层( ... 【博文连载】PCIe扫盲——PCIe总线数据链路层入门 前面的文章介绍过,数据链路层(Data Link Layer)主要进行链路管理(Link Management).TLP错误检测,Flow Control和Link功耗管理. 数据链路层不仅可以转发来 ... 【博文连载】PCIe扫盲——PCIe总线事务层入门(三) PCIe总线设计之初,主要是针对于音频和视频传输等这些对时间要求特别敏感的应用的.为了保证这些特殊应用的数据包能够得到优先发送,PCIe Spec中为每一个包都分配了一个优先级,通过TLP的Heade ... 【博文连载】PCIe扫盲——PCIe总线事务层入门(二) 前面的文章介绍了TLP的几种类型以及TLP的包结构.这篇文章来详细地聊一聊Non-Posted Transaction(包括Ordinary Read.Locked Read和IO/Configura ... 【博文连载】PCIe扫盲——PCIe总线事务层入门(一) 在介绍事务层之前,首先简单地了解一下PCIe总线的通信机制.假设某个设备要对另一个设备进行读取数据的操作,首先这个设备(称之为Requester)需要向另一个设备发送一个Request,然后另一个设备 ... 【博文连载】PCIe扫盲——PCIe总线体系结构入门 和很多的串行传输协议一样,一个完整的PCIe体系结构包括应用层.事务层(Transaction Layer).数据链路层(Data Link Layer)和物理层(Physical Layer).其中 ... 【博文连载】PCIe扫盲——PCIe总线怎样做到在软件上兼容PCI总线 前面的文章中多次说道,PCIe总线在软件上是向前兼容PCI总线的.因此,PCIe总线完整的继承了PCI总线中的配置空间(Configuration Header)的概念. 在PCIe总线中也有两种He ... 【博文连载】PCIe扫盲——PCIe总线基本概念 PCIe总线 - - - PCIe总线的提出可以算是代表着传统并行总线向高速串行总线发展的时代的到来.实际上,不仅是PCI总线到PCIe总线,高速串行总线取代传统并行总线是一个大的趋势.如ATA到SA ... 【博文连载】PCIe扫盲——PCI-X总线基本概念 PCI-X PCI-X总线在PCI总线的基础上发展而来,其在软件和硬件层面上都是兼容PCI总线的,但是却显著的提高了总线的性能.也就是说PCI-X的设备可以直接插到PCI的插槽中去,PCI的设备也可以 ...