了解系統總線的活動情況可幫助開發工程師顯著改善嵌入式應用的性能。過去,由于嵌入式處理器缺乏復雜的軟硬件結合特性,因此監測系統總線的活動情況是一項挑戰性難題。在系統級了解應用程序的行為對于有效利用系統資源非常關鍵,這些資源包括外部存儲器、DMA控制器、仲裁、系統總線互連等。 Blackfin BF54x系列處理器提供性能計數器(指標寄存器),可幫助應用開發工程師在系統級別了解應用程序的行為。在掌握應用程序行為后,開發工程師可使用一些系統優化技術來提高性能和降低功耗。 在本文中,將介紹性能指標寄存器的各種配置,并提供在Blackfin處理器上利用它們的軟硬件接口實例。此外,還針對一些典型的應用情形給出了提高性能的方法。 指標寄存器的定義 在典型的實際應用中有多種資源,如內核處理器、外設DMA,以及可同時訪問外部存儲器和幾個系統總線的MDMA(存儲器到存儲器的DMA)。性能指標寄存器提供了一種捕捉外部存儲器組訪問數、頁錯失數、總線流量數和總線轉向數的方式,有效地利用從這些寄存器獲得的數據可顯著提高系統的資源利用率。 表1是Blackfin BF54x系列處理器提供的指標寄存器及其簡要說明。 我們可以使用存儲器組讀/寫寄存器、組激活計數寄存器和總線轉向寄存器來改善應用程序的代碼和數據外部存儲器布局。授權計數寄存器 (EBIU_DDRGCx)可幫助合理定義系統仲裁策略,還能實現高的系統吞吐率。 我們可以利用代碼和數據項映射到外部存儲器的時間區間和空間位置來減少外部存儲器的延遲。在通常情況下,要捕捉應用程序的空間位置和時間區間,需要記錄在程序執行期間的代碼和數據對象的蹤跡。然而,對于一些簡單的應用程序來說,利用指標寄存器的關鍵數據就可以揭示外部存儲器中的不良映射代碼和數據項。 下面探討一些應用情形,以及利用從這些指標寄存器得到的信息進行優化的一些簡單技術。 示例的使用 下面將介紹如何分析和解讀從指標寄存器獲得的信息,并在此基礎上討論如何運用簡單的優化技術來提高應用的性能。 1 示例1 在這個示例中,多個數據緩存映射到外部存儲器,并使用存儲器DMA通道把一組緩存的內容復制到另一組緩存。本實驗中共有4個緩存,規模均為32KB。所有緩存均映射到DDR的Bank0并從地址0×0開始連續放置。圖1顯示了映射到外部存儲器的四個緩存的默認布局。在這個例子中,兩個存儲器DMA通道采用自動緩沖模式不間斷地把兩個緩存的內容傳送到另外兩個緩存。下面介紹一個三步過程,利用從指標寄存器獲得的信息并相應地使用一些系統優化技術,該過程可把性能提高到原系統的1.5倍。 圖1 未優化時的指標寄存器數據 第1步 基本系統性能 我們使用系統的平均吞吐率來量化系統的性能。平均吞吐率按下式計算: 平均吞吐率=“讀出和寫入 DDR存儲器的數據字節總數”/秒 系統總線活動的時間區間使用內核計時器來設置。通過設置,該定時器在到達實驗設定的時間區間時產生一個中斷。該計時器在存儲器DMA通道開始啟用之前啟動,然后,在內核計時器ISR中禁用存儲器DMA通道。傳輸的數據量用相應的計數器在DMA通道的中斷服務程序中進行測量。每次緩存傳輸產生一個中斷,DMA ISR每調用一次則計數器加1。由于所有的存儲器DMA通道均運行在自動緩沖模式,在最終計算吞吐率時,通道中斷延時不需計算在內。對于這個測量,定時器中斷延時由于數值很小不計算在內。 表2顯示了該系統的基準性能。從該表可以看出,即使是這樣一個簡單的系統,我們也只利用了可用總帶寬的一小部分。指標寄存器使我們可以看到系統總線的活動情況,并幫助我們明白性能較低的原因。基于這些信息,我們將能夠應用某些優化技術來提高性能。 第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。 現在考慮一個示例程序,該程序有多個緩存影射到DDR存儲器中,并使用存儲器的DMA在這些緩存之間傳輸數據。 圖4 在外部DDR存儲器中多組數據傳輸的例子 在這個例子中,MDMA0從srcBuffer0向dstBuffer0傳輸4KB的數據,MDMA1從 srcBuffer01向dstBuffer1傳輸4KB的數據。最開始只啟動MDMA0,在MDMA0數據傳輸完成后,MDMA1通道啟用,反之亦然,這種方式導致在各個時間區間存儲器組訪問數發生變化。在這個例子中,指標寄存器一個快照顯示了下面情況(見圖5)。從這個數字無法看出哪個存儲器組引起頁錯失,以及哪個數據流通道應對產生頁錯失負責。周期性地多次觀測指標寄存器可幫助我們找到帶寬利用率低的原因。 圖5 例2指標寄存器數據的一個快照 我們將利用上述實驗裝置來記錄指標寄存器數據。可使用在PC上獲得的指標寄存器數據來繪制在頁錯失和存儲器組訪問之間的相關圖,采用 MATLAB等數學工具箱來分析該數據。從該圖可以看出,大多數頁錯失是由存儲器組0訪問引起的。 圖6 頁錯失和DDR Bankx訪問之間的相關性 圖7 存儲器組訪問與頁錯失 圖8 例2未經優化的布局 圖9 緩存布局優化 利用連接程序描述文件(ldf)或使用Blackfin處理器存儲器窗口,可以確定哪些緩存影射到這些組,并把它們重新分別映射到其他組,從而減少頁錯失。 總線授權計數寄存器 總線授權計數寄存器(EBIU_DDRGCx)可幫助我們了解各個系統總線(EAB和DEBx總線)的資源利用率。實際上,這將有助于確定總線仲裁策略并確保實現高效的DMA和外部存儲器資源共享。 Blackfin BF54x系列處理器對外部總線提供可編程優先級設置功能。另外,該系列處理器還把幾個外設DMA和存儲器DMA映射到多個DMA控制器上,為實現高效資源管理提供了額外的靈活性。 考慮一個從照相機獲得視頻數據的例子,壓縮算法運行在Blackfin上,經壓縮的視頻數據通過USB總線從Blackfin發送給 PC。觀測結果表明USB吞吐率相當低,無法實時傳輸壓縮的視頻數據。可能的原因之一是USB總線由于系統中存在其他高優先級任務被掛起。對于這種情況,我們可以使用授權計數寄存器快速地進行驗證。同上,我們觀測指標寄存器在一段時間區間內的數據。在幾個時間區間內指標寄存器的數據揭示出DEB2總線 (USB總線)在與EAB總線(內核總線)競爭,因而限制了USB對DDR存儲器的訪問。 在默認情況下,內核擁有比USB接口更高的外部存儲器訪問優先權。對于當前的應用,USB總線的實時要求具有比內核更高的優先級。因此,我們必須使用其中的一個總線仲裁寄存器提高USB相對于內核的優先級,從而解決這個問題。 總線授權計數寄存器也可與存儲器組訪問寄存器配合使用,以了解在給定的時間區間內哪個總線最活躍,并找到頁錯失之間的關聯和在給定時間區間的總線活動情況。存儲器組訪問計數、引起頁錯失的總線以及哪些資源在利用總線等信息可揭示出那些低效的代碼或數據存儲器布局。 作者:ADI公司 Kaushal Sanghai,Rick Gentile |