3.9 最大化PCIE性能
PCIe性能对上游读写(读和写事务从一个PCIe的代理到主机端存储器的发布)的大小与对齐会有出乎意料的影响。作为一个通用规则,就带宽和延迟而言,最佳性能通过对上游读写的起始地址在64字节边界处对齐并确保请求大小是64字节的倍数,当引入更大倍数(128,192,256字节)时适当地在带宽中增加,来获得。特别地,一个部分写将会导致后面请求(读或写)的延迟。
第二个规则是要避免对一单条Cache行的多个并发未决的访问。这会导致一个冲突,该冲突依次会引起访问的串行化,而原本是可以被流水化的,而这就导致了更高的延迟以及/或更低的带宽。
违背这条规则的模式包括不是64字节倍数的串行访问(读或写),以及对同一Cache行地址的显式访问。那些具有不同起始地址但具有导致请求叠交的请求长度的叠交请求会具有相同的效果。比如,对地址0x00000200的一次96字节的读,后面跟着对地址0x00000240地址的一次64字节的读[译者注:从地址0x00000240到地址0x00000260为两次读的叠交部分]将会导致一个冲突——并且可能是一个延迟——对于第二次读来说。
一个64字节倍数但没有对齐的上游写将会有一连串的部分和完整的顺序写的性能。比如,对长度为128字节到地址0x00000070的写将执行类似于3个串行写,长度分别为16,64和48,然后分别写到地址0x00000070,0x00000080和0x00000100。
对于实现多功能设备的PCIe卡,比如双端口或四端口的网络接口卡(NICs)或双GPU图形卡,通过那些设备的其中之一会影响由卡上其它设备所观察到的带宽和/或延迟来注意非优化行为是很重要的。关于本小节所描述的行为,在一个所给的PCIe端口上所有的交通被对待为好比从一单个设备和功能所发起的那样。
对于最好的PCIe带宽:
1、在64字节边界处对齐上游读写的起始地址。
2、使用64字节倍数的读写请求。
3、消除或避免串行以及随机的部分行上游写。
4、消除或避免相冲突的上游读,包括串行的部分行读。
避免性能缺陷的技术包括Cache行对齐所有描述符以及数据缓存,填充上游被写的描述符到64字节对齐,缓存正要进来的数据来实现更大的上游写负载,为了通过PCIe设备以这种方法来允许使用64字节读(的倍数)的串行读而分配数据结构。未被优化的读和写的负面影响依赖于特定的负载和产品所基于的微架构。