第2步 使用指标寄存器
对于这些情况,外部存储器延迟通常是吞吐率低的原因。我们将首先考察DDR读/写访问总数和离页DDR访问总数。
从图1可以看出,计数寄存器的读取和写入访问表明,访问只针对一个组(组0),页激活数占访问总数的25%。这意味着,由于缓存影射到组0的不同页,DMA访问在同一组中的空间位置很小。由于源缓存和目标缓存在不同的页上,每次DMA访问均存在一次离页访问。
第3步 提高性能
把缓存放在不同的DDR组中可减少离页访问。如果把缓存放在不同的组中,则仅当某个通道穿越页边界时才会发生离页访问。Blackfin BF54x的DDR控制器支持最多同时打开8个内部DDR组,因此可以把四个缓存分别映射到不同的组。
2 示例2
在上面的例1中,只有很少的资源(两个MDMA通道)访问单个DDR存储器组,系统行为在一段时间内不变。因此,可通过提取指标寄存器的快照来理解系统总线的活动并捕捉空间位置。在更为实际的系统中,可能有多个资源(内核、多个DMA通道)访问多个DDR存储器组和系统总线,致使在较小的时间区间内DDR数据访问模式迅速变化。在这些情况下,难以仅仅利用指标寄存器的一个快照来捕捉空间位置和系统行为。因此,必须捕捉在应用执行过程中在多个点的总线活动情况来探索空间位置。
为了说明这一点,考虑这样一个情况,总线在时间区间T的活动表明,对所有组的访问是均衡的,但离页访问比例较高,但在较小时间区间(T1、T2,其中T1+T2=T)中记录的总线活动表明对各组的访问是不均衡的,见图2。如果缓存布局可对时间区间T1和T2分别进行优化,则有可能显著改善系统性能。
图2 在时间区间T、T1和 T2的系统总线活动(T > T1+T2)
困难在于如何找到对系统资源的访问方式始终如一,进而可使用一组相同优化技术的时间区间。这可能需要对应用程序进行多次迭代分析。
定期捕捉指标寄存器数据的实验装置
在本节中,介绍定期记录指标寄存器数据的实验装置。如图3所示,一台PC用作主机,通过利用JTAG接口进行通信的后台遥测通道(BTC)收集来自Blackfin的数据。数据记录程序运行在PC上,并定期向Blackfin处理器发送BTC指令。作为回应,Blackfin处理器把指标寄存器的快照发送给主机。
图3 定期捕捉指标寄存器数据的实验装置
Blackfin处理器使用一个通用定时器定期地产生中断。在定时器发出中断时,指标寄存器的内容被读出并存储在存储器中。在主机发出请求时,存储的指标寄存器数据通过BTC通道发送到PC。BTC通道支持数据传输速率高达3Mbps。
Now consider an example program where multiple buffers are mapped in the DDR memory and memory DMA's are used to transfers data between these buffers.现在考虑一个示例程序,该程序有多个缓存影射到DDR存储器中,并使用存储器的DMA在这些缓存之间传输数据。
图4 在外部DDR存储器中多组数据传输的例子
在这个例子中,MDMA0从srcBuffer0向dstBuffer0传输4KB的数据,MDMA1从 srcBuffer01向dstBuffer1传输4KB的数据。最开始只启动MDMA0,在MDMA0数据传输完成后,MDMA1通道启用,反之亦然,这种方式导致在各个时间区间存储器组访问数发生变化。在这个例子中,指标寄存器一个快照显示了下面情况(见图5)。从这个数字无法看出哪个存储器组引起页错失,以及哪个数据流通道应对产生页错失负责。周期性地多次观测指标寄存器可帮助我们找到带宽利用率低的原因。
图5 例2指标寄存器数据的一个快照