<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 使用系統(tǒng)總線性能計(jì)數(shù)器來測(cè)量和改善嵌入式系統(tǒng)的性能

          使用系統(tǒng)總線性能計(jì)數(shù)器來測(cè)量和改善嵌入式系統(tǒng)的性能

          作者: 時(shí)間:2011-11-02 來源:網(wǎng)絡(luò) 收藏
          了解的活動(dòng)情況可幫助開發(fā)工程師顯著改善嵌入式應(yīng)用的性能。過去,由于嵌入式處理器缺乏復(fù)雜的軟硬件結(jié)合特性,因此監(jiān)測(cè)的活動(dòng)情況是一項(xiàng)挑戰(zhàn)性難題。在系統(tǒng)級(jí)了解應(yīng)用程序的行為對(duì)于有效利用系統(tǒng)資源非常關(guān)鍵,這些資源包括外部存儲(chǔ)器、DMA控制器、仲裁、互連等。

            Blackfin BF54x系列處理器提供(指標(biāo)寄存器),可幫助應(yīng)用開發(fā)工程師在系統(tǒng)級(jí)別了解應(yīng)用程序的行為。在掌握應(yīng)用程序行為后,開發(fā)工程師可使用一些系統(tǒng)優(yōu)化技術(shù)來提高性能和降低功耗。

            在本文中,將介紹性能指標(biāo)寄存器的各種配置,并提供在Blackfin處理器上利用它們的軟硬件接口實(shí)例。此外,還針對(duì)一些典型的應(yīng)用情形給出了提高性能的方法。

            指標(biāo)寄存器的定義

            在典型的實(shí)際應(yīng)用中有多種資源,如內(nèi)核處理器、外設(shè)DMA,以及可同時(shí)訪問外部存儲(chǔ)器和幾個(gè)系統(tǒng)總線的MDMA(存儲(chǔ)器到存儲(chǔ)器的DMA)。性能指標(biāo)寄存器提供了一種捕捉外部存儲(chǔ)器組訪問數(shù)、頁錯(cuò)失數(shù)、總線流量數(shù)和總線轉(zhuǎn)向數(shù)的方式,有效地利用從這些寄存器獲得的數(shù)據(jù)可顯著提高系統(tǒng)的資源利用率。

            表1是Blackfin BF54x系列處理器提供的指標(biāo)寄存器及其簡(jiǎn)要說明。


            我們可以使用存儲(chǔ)器組讀/寫寄存器、組激活計(jì)數(shù)寄存器和總線轉(zhuǎn)向寄存器來改善應(yīng)用程序的代碼和數(shù)據(jù)外部存儲(chǔ)器布局。授權(quán)計(jì)數(shù)寄存器(EBIU_DDRGCx)可幫助合理定義系統(tǒng)仲裁策略,還能實(shí)現(xiàn)高的系統(tǒng)吞吐率。

            我們可以利用代碼和數(shù)據(jù)項(xiàng)映射到外部存儲(chǔ)器的時(shí)間區(qū)間和空間位置來減少外部存儲(chǔ)器的延遲。在通常情況下,要捕捉應(yīng)用程序的空間位置和時(shí)間區(qū)間,需要記錄在程序執(zhí)行期間的代碼和數(shù)據(jù)對(duì)象的蹤跡。然而,對(duì)于一些簡(jiǎn)單的應(yīng)用程序來說,利用指標(biāo)寄存器的關(guān)鍵數(shù)據(jù)就可以揭示外部存儲(chǔ)器中的不良映射代碼和數(shù)據(jù)項(xiàng)。

            下面探討一些應(yīng)用情形,以及利用從這些指標(biāo)寄存器得到的信息進(jìn)行優(yōu)化的一些簡(jiǎn)單技術(shù)。

            示例的使用

            下面將介紹如何分析和解讀從指標(biāo)寄存器獲得的信息,并在此基礎(chǔ)上討論如何運(yùn)用簡(jiǎn)單的優(yōu)化技術(shù)來提高應(yīng)用的性能。

            1 示例1

            在這個(gè)示例中,多個(gè)數(shù)據(jù)緩存映射到外部存儲(chǔ)器,并使用存儲(chǔ)器DMA通道把一組緩存的內(nèi)容復(fù)制到另一組緩存。本實(shí)驗(yàn)*有4個(gè)緩存,規(guī)模均為32KB。所有緩存均映射到DDR的Bank0并從地址0×0開始連續(xù)放置。圖1顯示了映射到外部存儲(chǔ)器的四個(gè)緩存的默認(rèn)布局。在這個(gè)例子中,兩個(gè)存儲(chǔ)器DMA通道采用自動(dòng)緩沖模式不間斷地把兩個(gè)緩存的內(nèi)容傳送到另外兩個(gè)緩存。下面介紹一個(gè)三步過程,利用從指標(biāo)寄存器獲得的信息并相應(yīng)地使用一些系統(tǒng)優(yōu)化技術(shù),該過程可把性能提高到原系統(tǒng)的1.5倍。


            圖1 未優(yōu)化時(shí)的指標(biāo)寄存器數(shù)據(jù)

            第1步 基本系統(tǒng)性能

            我們使用系統(tǒng)的平均吞吐率來量化系統(tǒng)的性能。平均吞吐率按下式計(jì)算:

            平均吞吐率=“讀出和寫入DDR存儲(chǔ)器的數(shù)據(jù)字節(jié)總數(shù)”/秒

            系統(tǒng)總線活動(dòng)的時(shí)間區(qū)間使用內(nèi)核計(jì)時(shí)器來設(shè)置。通過設(shè)置,該定時(shí)器在到達(dá)實(shí)驗(yàn)設(shè)定的時(shí)間區(qū)間時(shí)產(chǎn)生一個(gè)中斷。該計(jì)時(shí)器在存儲(chǔ)器DMA通道開始啟用之前啟動(dòng),然后,在內(nèi)核計(jì)時(shí)器ISR中禁用存儲(chǔ)器DMA通道。傳輸?shù)臄?shù)據(jù)量用相應(yīng)的計(jì)數(shù)器在DMA通道的中斷服務(wù)程序中進(jìn)行測(cè)量。每次緩存?zhèn)鬏敭a(chǎn)生一個(gè)中斷,DMA ISR每調(diào)用一次則計(jì)數(shù)器加1。由于所有的存儲(chǔ)器DMA通道均運(yùn)行在自動(dòng)緩沖模式,在最終計(jì)算吞吐率時(shí),通道中斷延時(shí)不需計(jì)算在內(nèi)。對(duì)于這個(gè)測(cè)量,定時(shí)器中斷延時(shí)由于數(shù)值很小不計(jì)算在內(nèi)。

            表2顯示了該系統(tǒng)的基準(zhǔn)性能。從該表可以看出,即使是這樣一個(gè)簡(jiǎn)單的系統(tǒng),我們也只利用了可用總帶寬的一小部分。指標(biāo)寄存器使我們可以看到系統(tǒng)總線的活動(dòng)情況,并幫助我們明白性能較低的原因?;谶@些信息,我們將能夠應(yīng)用某些優(yōu)化技術(shù)來提高性能。


            第2步 使用指標(biāo)寄存器

            對(duì)于這些情況,外部存儲(chǔ)器延遲通常是吞吐率低的原因。我們將首先考察DDR讀/寫訪問總數(shù)和離頁DDR訪問總數(shù)。

            從圖1可以看出,計(jì)數(shù)寄存器的讀取和寫入訪問表明,訪問只針對(duì)一個(gè)組(組0),頁激活數(shù)占訪問總數(shù)的25%。這意味著,由于緩存影射到組0的不同頁,DMA訪問在同一組中的空間位置很小。由于源緩存和目標(biāo)緩存在不同的頁上,每次DMA訪問均存在一次離頁訪問。

            第3步 提高性能

            把緩存放在不同的DDR組中可減少離頁訪問。如果把緩存放在不同的組中,則僅當(dāng)某個(gè)通道穿越頁邊界時(shí)才會(huì)發(fā)生離頁訪問。Blackfin BF54x的DDR控制器支持最多同時(shí)打開8個(gè)內(nèi)部DDR組,因此可以把四個(gè)緩存分別映射到不同的組。

            2 示例2

            在上面的例1中,只有很少的資源(兩個(gè)MDMA通道)訪問單個(gè)DDR存儲(chǔ)器組,系統(tǒng)行為在一段時(shí)間內(nèi)不變。因此,可通過提取指標(biāo)寄存器的快照來理解系統(tǒng)總線的活動(dòng)并捕捉空間位置。在更為實(shí)際的系統(tǒng)中,可能有多個(gè)資源(內(nèi)核、多個(gè)DMA通道)訪問多個(gè)DDR存儲(chǔ)器組和系統(tǒng)總線,致使在較小的時(shí)間區(qū)間內(nèi)DDR數(shù)據(jù)訪問模式迅速變化。在這些情況下,難以僅僅利用指標(biāo)寄存器的一個(gè)快照來捕捉空間位置和系統(tǒng)行為。因此,必須捕捉在應(yīng)用執(zhí)行過程中在多個(gè)點(diǎn)的總線活動(dòng)情況來探索空間位置。

            為了說明這一點(diǎn),考慮這樣一個(gè)情況,總線在時(shí)間區(qū)間T的活動(dòng)表明,對(duì)所有組的訪問是均衡的,但離頁訪問比例較高,但在較小時(shí)間區(qū)間(T1、T2,其中T1+T2=T)中記錄的總線活動(dòng)表明對(duì)各組的訪問是不均衡的,見圖2。如果緩存布局可對(duì)時(shí)間區(qū)間T1和T2分別進(jìn)行優(yōu)化,則有可能顯著改善系統(tǒng)性能。


            圖2 在時(shí)間區(qū)間T、T1和 T2的系統(tǒng)總線活動(dòng)(T > T1+T2)

            困難在于如何找到對(duì)系統(tǒng)資源的訪問方式始終如一,進(jìn)而可使用一組相同優(yōu)化技術(shù)的時(shí)間區(qū)間。這可能需要對(duì)應(yīng)用程序進(jìn)行多次迭代分析。

            定期捕捉指標(biāo)寄存器數(shù)據(jù)的實(shí)驗(yàn)裝置

            在本節(jié)中,介紹定期記錄指標(biāo)寄存器數(shù)據(jù)的實(shí)驗(yàn)裝置。如圖3所示,一臺(tái)PC用作主機(jī),通過利用JTAG接口進(jìn)行通信的后臺(tái)遙測(cè)通道(BTC)收集來自Blackfin的數(shù)據(jù)。數(shù)據(jù)記錄程序運(yùn)行在PC上,并定期向Blackfin處理器發(fā)送BTC指令。作為回應(yīng),Blackfin處理器把指標(biāo)寄存器的快照發(fā)送給主機(jī)。


            圖3 定期捕捉指標(biāo)寄存器數(shù)據(jù)的實(shí)驗(yàn)裝置

            Blackfin處理器使用一個(gè)通用定時(shí)器定期地產(chǎn)生中斷。在定時(shí)器發(fā)出中斷時(shí),指標(biāo)寄存器的內(nèi)容被讀出并存儲(chǔ)在存儲(chǔ)器中。在主機(jī)發(fā)出請(qǐng)求時(shí),存儲(chǔ)的指標(biāo)寄存器數(shù)據(jù)通過BTC通道發(fā)送到PC。BTC通道支持?jǐn)?shù)據(jù)傳輸速率高達(dá)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.現(xiàn)在考慮一個(gè)示例程序,該程序有多個(gè)緩存影射到DDR存儲(chǔ)器中,并使用存儲(chǔ)器的DMA在這些緩存之間傳輸數(shù)據(jù)。


            圖4 在外部DDR存儲(chǔ)器中多組數(shù)據(jù)傳輸?shù)睦?/P>

            在這個(gè)例子中,MDMA0從srcBuffer0向dstBuffer0傳輸4KB的數(shù)據(jù),MDMA1從 srcBuffer01向dstBuffer1傳輸4KB的數(shù)據(jù)。最開始只啟動(dòng)MDMA0,在MDMA0數(shù)據(jù)傳輸完成后,MDMA1通道啟用,反之亦然,這種方式導(dǎo)致在各個(gè)時(shí)間區(qū)間存儲(chǔ)器組訪問數(shù)發(fā)生變化。在這個(gè)例子中,指標(biāo)寄存器一個(gè)快照顯示了下面情況(見圖5)。從這個(gè)數(shù)字無法看出哪個(gè)存儲(chǔ)器組引起頁錯(cuò)失,以及哪個(gè)數(shù)據(jù)流通道應(yīng)對(duì)產(chǎn)生頁錯(cuò)失負(fù)責(zé)。周期性地多次觀測(cè)指標(biāo)寄存器可幫助我們找到帶寬利用率低的原因。


            圖5 例2指標(biāo)寄存器數(shù)據(jù)的一個(gè)快照

            我們將利用上述實(shí)驗(yàn)裝置來記錄指標(biāo)寄存器數(shù)據(jù)??墒褂迷赑C上獲得的指標(biāo)寄存器數(shù)據(jù)來繪制在頁錯(cuò)失和存儲(chǔ)器組訪問之間的相關(guān)圖,采用MATLAB等數(shù)學(xué)工具箱來分析該數(shù)據(jù)。從該圖可以看出,大多數(shù)頁錯(cuò)失是由存儲(chǔ)器組0訪問引起的。


            圖6 頁錯(cuò)失和DDR Bankx訪問之間的相關(guān)性


            圖7 存儲(chǔ)器組訪問與頁錯(cuò)失


            圖8 例2未經(jīng)優(yōu)化的布局


            圖9 緩存布局優(yōu)化

            利用連接程序描述文件(ldf)或使用Blackfin處理器存儲(chǔ)器窗口,可以確定哪些緩存影射到這些組,并把它們重新分別映射到其他組,從而減少頁錯(cuò)失。

            總線授權(quán)計(jì)數(shù)寄存器

            總線授權(quán)計(jì)數(shù)寄存器(EBIU_DDRGCx)可幫助我們了解各個(gè)系統(tǒng)總線(EAB和DEBx總線)的資源利用率。實(shí)際上,這將有助于確定總線仲裁策略并確保實(shí)現(xiàn)高效的DMA和外部存儲(chǔ)器資源共享。

            Blackfin BF54x系列處理器對(duì)外部總線提供可編程優(yōu)先級(jí)設(shè)置功能。另外,該系列處理器還把幾個(gè)外設(shè)DMA和存儲(chǔ)器DMA映射到多個(gè)DMA控制器上,為實(shí)現(xiàn)高效資源管理提供了額外的靈活性。

            考慮一個(gè)從照相機(jī)獲得視頻數(shù)據(jù)的例子,壓縮算法運(yùn)行在Blackfin上,經(jīng)壓縮的視頻數(shù)據(jù)通過USB總線從Blackfin發(fā)送給PC。觀測(cè)結(jié)果表明USB吞吐率相當(dāng)?shù)停瑹o法實(shí)時(shí)傳輸壓縮的視頻數(shù)據(jù)。可能的原因之一是USB總線由于系統(tǒng)中存在其他高優(yōu)先級(jí)任務(wù)被掛起。對(duì)于這種情況,我們可以使用授權(quán)計(jì)數(shù)寄存器快速地進(jìn)行驗(yàn)證。同上,我們觀測(cè)指標(biāo)寄存器在一段時(shí)間區(qū)間內(nèi)的數(shù)據(jù)。在幾個(gè)時(shí)間區(qū)間內(nèi)指標(biāo)寄存器的數(shù)據(jù)揭示出DEB2總線(USB總線)在與EAB總線(內(nèi)核總線)競(jìng)爭(zhēng),因而限制了USB對(duì)DDR存儲(chǔ)器的訪問。

            在默認(rèn)情況下,內(nèi)核擁有比USB接口更高的外部存儲(chǔ)器訪問優(yōu)先權(quán)。對(duì)于當(dāng)前的應(yīng)用,USB總線的實(shí)時(shí)要求具有比內(nèi)核更高的優(yōu)先級(jí)。因此,我們必須使用其中的一個(gè)總線仲裁寄存器提高USB相對(duì)于內(nèi)核的優(yōu)先級(jí),從而解決這個(gè)問題。

            總線授權(quán)計(jì)數(shù)寄存器也可與存儲(chǔ)器組訪問寄存器配合使用,以了解在給定的時(shí)間區(qū)間內(nèi)哪個(gè)總線最活躍,并找到頁錯(cuò)失之間的關(guān)聯(lián)和在給定時(shí)間區(qū)間的總線活動(dòng)情況。存儲(chǔ)器組訪問計(jì)數(shù)、引起頁錯(cuò)失的總線以及哪些資源在利用總線等信息可揭示出那些低效的代碼或數(shù)據(jù)存儲(chǔ)器布局。(ADI公司)

          塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();