PCI Express桥接 PCI 的读取性能
PCI Express 是目前 PC 芯片集及嵌入式处理器的普遍互连标准。尽管之前的PCI标准由PCIe所取代,但 FPGA 和I/O设备仍使用 PCI。当前基于 PCI 的设计均采用未集成 PCIe 接口的组件,因此若要升级系统,需使用 PCIe 桥接器。例如,PCIe桥接器将用于采用I/O设备的嵌入式视频录音机,通过PCI连接至具有PCIe 端口的嵌入式处理器。
在系统中添加桥接器将会带来一定的设计难题,本文旨在研究通常受引入桥接器影响的 PCI 读取性能问题,以及相应的解决方法。
引入桥接器带来的性能挑战
PCI 总线上的设备主要依赖有关系统从主机处理器读取大量的数据。PCI I/O 设备通常控制系统中的数据移动,并将读写循环传入主机内存。例如,主机处理器可通过写入外围设备上的寄存器设置外围设备中的 DMA,即可设置和配合数据移动,但为了专注于其他任务,处理器会将自身从数据移动中删除。然后,外围设备将读取或写入数据以服务 DMA。在其他时间,处理器可读取状态信息并写入寄存器以进行控制。通常,此通信量不会涉及高带宽,且不会对系统整体性能带来重大影响。
对于安全数字视频录像机(DVR)等嵌入式处理系统,将捕获并压缩视频数据,通过磁盘控制器写入磁盘存储器,且磁盘控制器通过 PCI 总线读取主机内存中的数据即可实现上述结果。
从 PCI 外围设备写入桥接器通常传送至内部写入缓冲器,以解决桥接器带来的内在性能影响。然而,PCIe 桥产品需要重试外围设备,直至它从主机内存中获得所需的数据。这通常意味着试图读取许多小型 PCIe 数据包,从而增加时延。通过使用分割式传输方式,PCI-X 协议可避免此问题,但传统的 PCI 协议并不具备此特点。此外,一些 PCI 设备在收到一条或两条数据缓冲行后就自动释放总线,这将成为 PCI 读取的性能挑战。
例如,在使用嵌入式 DVR 的普通情况下(图1),系统需要将持续的压缩视频数据流写入磁盘,以便存储及随后检索或分析。在此系统中,一个或多个磁盘控制器(SATA 控制器)将读取系统主内存中的视频数据,以存储在相关磁盘阵列。上述系统还可以令以太网控制器等其他外部设备共享 PCI 总线。
如上所述,引入 PCI 桥接器可能导致性能下降。此读取性能如下所示(参考图 2):
1.SATA 设备"A"开始从主内存读取。桥接器从内存中预取数据。然后,SATA设备"A"读取部分预取数据。
2.SATA 设备"B"开始从主内存读取。桥接器从内存中预取数据。然后,SATA设备"B"读取部分预取数据。
3.SATA设备后续读取将要求桥接器丢弃缓冲的数据,并从主内存中重取数据。
在此示例中,第 3 步会在读取事务之间带来重大时延,从而极大影响读取性能。对读取性能的实际影响,可能指实现的性能比直接使用 PCI 总线最初实现的性能下降许多倍。由于总线断开及多次重试和重取数据后,将持续读取数据,导致总线效率受到重大影响。此过程如图 3 所示。
查看说明实际数据读取点的 PCI_TRDYn(PCI 目标准备)轨迹可看到,首次读取(第 3 步)与下次读取(第 6 步)之间存在较大间隔。这意味着视频数据写入磁盘的最大速度大幅降低,从而限制了系统的性能。在此情况下,最大程度地提高写入视频数据的速度对于最终产品至关重要--可存储监测最高质量视频所需的诸多信道。
解决问题 - 短期高速缓存
Tundra 的 PCI Express桥接器(Tsi381、Tsi382和 Tsi384)具有短期高速缓存 (STC) 的功能,可有助于克服上述性能难题。短期高速缓存允许在最初 PCI 读取循环期间从相关 PCI Express 设备中预取数据,并临时存储在桥接器中以便在后续读取循环期间迅速周转。当所要求的设备停止此事务时,在后续过程中读取的数据不会立即丢弃。
与最初情况相比,它对性能的改变比较大,以一个采用 Tsi381 桥接器的嵌入式 DVR 系统为例(参考图4)。在此情况下,启用 STC 后,后续读取不会延迟,原因是有关读取仍保留在 Tsi381 的高速缓冲存储器中,且桥接器在首次读取后无需从内存中重新读取数据,可确保有效地使用总线。
启用STC前后PCI 总线的计时见图5,它可清楚地反映出性能的差异。在此示例中,系统执行每台设备32位的读取,两台设备无STC时执行2次读取的相同期间,在使用STC后可进行7次读取。可见,在使用STC的情况下,系统的整体吞吐性能可提高三倍以上。对于通过一台设备执行读取的系统而言,性能将获得更大的提高。
Tundra PCI Express 桥接器可确保开发人员调整下列其他参数,从而进一步调谐系统: 调整数据保留在高速缓冲存储器内的时间。此特点确保设计人员
- PCI9656型64位PCI总线接口电路及其应用(01-18)
- PCI9054芯片接口设计中若干问题的深入研究(01-18)
- TM1300 PCI-XIO口的UART和USB接口设计(01-17)
- 什么是PCI总线?其接口芯片的应用(01-26)
- PCI总线数据输出板驱动程序的开发(05-16)
- 基于PCI9054和LTC4240的CPCI总线接口设计(05-13)