新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 復(fù)雜器件內(nèi)部的實(shí)時可視性的實(shí)現(xiàn)方法

復(fù)雜器件內(nèi)部的實(shí)時可視性的實(shí)現(xiàn)方法

作者: 時間:2006-05-08 來源:網(wǎng)絡(luò) 收藏

如果在一個系統(tǒng)中擁有幾個處理器和外設(shè),要開發(fā)具有成本效益、可靠的產(chǎn)品,尤其是在今天很短的產(chǎn)品開發(fā)時間的條件下,了解所有這些芯片的特性將變得非常重要。嵌入式系統(tǒng)越來越多地在多內(nèi)核ASIC或系統(tǒng)級芯片(SoC)上實(shí)現(xiàn),以利用這些器件所具有的低功耗、低成本和更高集成度的優(yōu)點(diǎn)。

開發(fā)者所擁有的很多這些標(biāo)準(zhǔn)設(shè)計工具是依賴于了解老的技術(shù)產(chǎn)品的運(yùn)行情況來實(shí)現(xiàn)的,已經(jīng)不適用于這些新型的、功能強(qiáng)大的多功能設(shè)計了。通過集成,SoC架構(gòu)在單個硅片上擁有多個處理器、存儲器、外設(shè)、控制器和其它重要的子系統(tǒng)組件。高速總線連接這些不同的組件,整體的性能決定于他們之間的數(shù)據(jù)流的高效管理。瓶頸、延遲和對于像總線和存儲器等共享資源的競爭這些問題,對于數(shù)據(jù)傳輸來說是致命的。為了獲得最佳性能,開發(fā)者應(yīng)比以前更需要了解芯片運(yùn)行的具體情況。

然而,對系統(tǒng)組件之間的事務(wù)處理的監(jiān)控不再是像以前那樣連接一個邏輯分析儀或者總線分析儀那么簡單了,因?yàn)楹芏喔信d趣的信號深“埋”在芯片內(nèi)部。對SoC的可視性需要一套硬件和軟件相混合的裝置來采集SoC本身內(nèi)部的數(shù)據(jù),并由特征描述以及關(guān)聯(lián)工具提供支持,這些工具能幫助開發(fā)者分析所采集的數(shù)據(jù)。

當(dāng)然可以通過不同的方式實(shí)現(xiàn)可視性。在很多情況下,可以觀察許多組件(如存儲器、系統(tǒng)總線和I/O端口)來采集信息。換言之,當(dāng)評估過程本身影響到結(jié)果的時候,要評估總線利用率和存儲器競爭情況就很難。挑戰(zhàn)在于在不影響系統(tǒng)性能的情況下采集和上載數(shù)據(jù)點(diǎn)。

回到現(xiàn)實(shí)情況

傳統(tǒng)上,當(dāng)沒有邏輯分析儀可用,或者太難于設(shè)置時,開發(fā)者使用軟件測試工具來獲得對他們設(shè)計的可視性。他們會向目標(biāo)對象增加調(diào)試代碼來采集、處理和上載調(diào)試數(shù)據(jù)。例如,在進(jìn)入和離開一個函數(shù)時打開和關(guān)閉某個計時器,無論是過去還是現(xiàn)在,對于通過軟件分析器來對函數(shù)進(jìn)行描述來說,這種方法都是一種的簡捷方法。

盡管這只需要增加很少的C語言printf指令到測試代碼中,對采集的數(shù)據(jù)進(jìn)行格式化,并輸出到一個標(biāo)準(zhǔn)的I/O器件,但此時這些代碼對代碼的大小、存儲器利用、緩沖器性能、時序和系統(tǒng)資源競爭都有很大的影響。這些缺點(diǎn)使得printf只適合于測試非實(shí)時的控制代碼。對于實(shí)時的或者確定性代碼,例如,用在消費(fèi)媒體播放器和錄制設(shè)備、手持無線通信設(shè)備、電信、機(jī)器人技術(shù)或汽車上的應(yīng)用,需要采用其它的對系統(tǒng)影響較小的技術(shù),以避免干擾目標(biāo)程序的執(zhí)行或錯失實(shí)時期限。

減少干擾

有很多方法可以在增加可視性的同時減少干擾。從概念上來說,對一個系統(tǒng)進(jìn)行監(jiān)測涉及到數(shù)據(jù)采集、數(shù)據(jù)緩沖、上載來自目標(biāo)器件的數(shù)據(jù)、后續(xù)處理以及進(jìn)行顯示等。認(rèn)真安排這些活動在什么時候以及哪里發(fā)生,可以將它們對系統(tǒng)性能的影響減到最小。減少與測試代碼以及數(shù)據(jù)采集設(shè)備相關(guān)的存儲器區(qū)域,可以采集到更多的數(shù)據(jù),并增加對系統(tǒng)實(shí)時行為測試的精度或廣度。

一般需要數(shù)據(jù)點(diǎn)幾倍大小的存儲空間來記錄關(guān)聯(lián)信息,這些關(guān)聯(lián)信息用于更準(zhǔn)確地對其進(jìn)行理解。例如,除了在采集時的數(shù)據(jù)值,可能還需要標(biāo)記數(shù)據(jù)相關(guān)聯(lián)的變量名字,獲得一個數(shù)據(jù)采集時間的時間戳,并注意當(dāng)在獲得時間戳?xí)r正在執(zhí)行的函數(shù)等。有幾種方法用于獲得和組織這種關(guān)聯(lián)信息,并且不需要依賴于printf和其字符串格式化功能。通常在數(shù)據(jù)中包含pattern,如果用某種方式來采集數(shù)據(jù),那么可以推斷出一些額外的特性,而不需要將它們包含到緩沖器中。增加可視性的一些方法包括:

1. 記錄格式

如果在緩沖器中采集一個變量,則不再需要對所采集的什么變量進(jìn)行標(biāo)記。如果需要采集多個值,就可以創(chuàng)建一種記錄格式,每一個值對應(yīng)一個給定的位置,這樣避免了不得不對采集的內(nèi)容再次進(jìn)行標(biāo)注的情況。

2. 多個緩沖器

通過將相似的數(shù)據(jù)點(diǎn)分組在一起,可以簡化循環(huán)緩沖管理,減少對每個數(shù)據(jù)點(diǎn)的采集延時。同樣地,如果按照優(yōu)先級來對數(shù)據(jù)采集進(jìn)行隔離,那么當(dāng)系統(tǒng)在100%的利用狀態(tài)時,可能使循環(huán)緩沖器抓取到非關(guān)鍵信息的溢出,而不是用一個非實(shí)時的上載來弄亂了實(shí)時系統(tǒng)的時限要求。在任何情況下,都需要用來標(biāo)記溢出的機(jī)制。并且如果緩沖器存在一些前提條件,例如需要重構(gòu)的時間戳,則可能追蹤丟失了多少數(shù)據(jù)。

3. 采樣數(shù)據(jù)

配置硬件計數(shù)器并使其運(yùn)行對系統(tǒng)的影響很小。無論如何,讀取一個計數(shù)器并上載其值都是具有干擾性的。對計數(shù)器的記錄越頻繁,記錄就越準(zhǔn)確,但采集和上載的干擾就越大。在確定確實(shí)需要更準(zhǔn)確的信息之前,保持較低的記錄頻率。例如,一個記錄當(dāng)前哪個函數(shù)在執(zhí)行的周期性分析器能確保得到一個非常準(zhǔn)確的代碼使用百分比情況。這樣的分析器僅收集了在每個函數(shù)調(diào)用的記錄期間所采集的信息的一部分,于是干擾很小。也可以按低優(yōu)先級任務(wù)來對數(shù)據(jù)點(diǎn)采樣,盡管這樣可能使得結(jié)果產(chǎn)生一些偏差。

4. 確定性的數(shù)據(jù)

如果數(shù)據(jù)采樣獲取的頻率固定的話,不必要加入一個時間戳。作為一種替代選擇,如果數(shù)據(jù)必須通過一組連續(xù)的運(yùn)算塊,只需記錄數(shù)據(jù)值和時間戳,因?yàn)榭梢詮臅r間戳的次序確定實(shí)際的程序塊。如果獲取了幾個值,可能更有效率,以確保數(shù)據(jù)流能通過一系列的程序塊,此時只需記錄函數(shù)和時間戳,并采用數(shù)據(jù)記錄格式。

5. /智能記錄

通常只在需要時采集數(shù)據(jù)(換言之,在對某些信息感興趣的情況下),這樣減少了數(shù)據(jù)采集產(chǎn)生的影響。利用幾個調(diào)試標(biāo)記,可以縮小采集的范圍。這可以通過設(shè)置一個特定的標(biāo)記來實(shí)現(xiàn),這個標(biāo)記只有在感興趣的情況下才有效,通過這種方法,不會因?yàn)樯陷d不需要的信息使系統(tǒng)過載。這也減少了捕獲數(shù)據(jù)過程的開銷,節(jié)約緩沖器空間。設(shè)置或檢查一個標(biāo)記只需要一個或者兩個處理器周期,因此這是非常有用的方法,即使是對于基于硬件的計數(shù)器亦是如此。

6. 塊狀記錄

在某些情況下,在不影響執(zhí)行時(如沒有實(shí)時運(yùn)算時)有可能可以暫停對象。此時可以通過在能安全暫停的情況下觸發(fā)一次暫停來“避免”緩沖期上載開銷,然后在系統(tǒng)暫停的時候再對緩沖器上載。

7. 按塊上載

如果任務(wù)比較空閑,可以在系統(tǒng)沒有完全利用時用來上載緩沖器。盡管這不會減少上載開銷,但卻可以將上載的影響轉(zhuǎn)移到一個對系統(tǒng)性能影響更小的時段。

8. RTOS監(jiān)測

對于更復(fù)雜的監(jiān)測,可以在實(shí)時操作系統(tǒng)上找到支持。很多操作系統(tǒng)具有內(nèi)置的機(jī)制和庫,能支持片上監(jiān)測硬件,即易于配置又為管理循環(huán)緩沖器和向外發(fā)送數(shù)據(jù)流需要的基礎(chǔ)架構(gòu)提供基本代碼,并提供用于自監(jiān)測的Hook函數(shù)。通過對記錄過程抽象化以及卸載數(shù)據(jù),可以快速地對監(jiān)測的對象、監(jiān)測的方式、監(jiān)測的頻率、獲取數(shù)據(jù)的位置以及卸載方式等進(jìn)行重新配置。在創(chuàng)建自己的基礎(chǔ)來測試代碼之前,應(yīng)首先檢查RTOS提供的內(nèi)容。

9. 避免訪問存儲器和其它系統(tǒng)資源

只有在硬件機(jī)制不足的情況下,才應(yīng)該用軟件手段作為補(bǔ)充,例如當(dāng)需要非常大的緩沖器或者當(dāng)有限的處理降低了整體的干擾時。理想的情況是,如果在不使用系統(tǒng)總線或存儲器的情況下監(jiān)測系統(tǒng)總線或存儲器,將能得到更準(zhǔn)確的結(jié)果。如果將采集的數(shù)據(jù)量控制到最小,就可以避免使用存儲器中的緩沖器,只是通過JTAG或總線直接發(fā)送。

10. 連續(xù)采集

在過程中監(jiān)測如果需要采集大量的數(shù)據(jù),可以考慮連續(xù)采集。注意,因?yàn)樵诿看芜\(yùn)行時會采集到不同的信息,將無法對結(jié)果進(jìn)行關(guān)聯(lián),因?yàn)闀r間戳包含不同的測試延時。在考慮從什么地方開始發(fā)現(xiàn)問題時,這種方法最好。因?yàn)檫@樣能降低概率,也能降低監(jiān)測的等級。

11. 模塊

如果通過JTAG或總線發(fā)送數(shù)據(jù),則可以在目標(biāo)和主機(jī)之間放置一個處理模塊來處理時間戳的產(chǎn)生和有限的數(shù)據(jù)處理。通過將時間戳的工作卸載到該模塊,可以釋放測試總線的帶寬,用來發(fā)送更多的信息。模塊也是實(shí)現(xiàn)完全無干擾監(jiān)測的非常有效的方法。例如,模塊可以監(jiān)測系統(tǒng)總線,監(jiān)測測試總線上某個特定的存儲器地址范圍,或使用直接存儲器訪問(DMA)來觸發(fā)一次準(zhǔn)實(shí)時的數(shù)據(jù)塊獲取。

給定不同實(shí)時應(yīng)用的特性,將希望測試不同的采集方案,來確定哪些組合能實(shí)現(xiàn)最小的干擾的最高可視性。例如,如果有多余的存儲器,那么可以增加緩沖器大小。這取決于采集什么樣的數(shù)據(jù)及采集多少數(shù)據(jù)。

硬件輔助監(jiān)測

在某些情況下,測試代碼可能要么對系統(tǒng)影響太大,要么不夠準(zhǔn)確,或者不能簡單地獲得理解流過復(fù)雜的SoC的數(shù)據(jù)流的特性所需要的信息。越來越多的SoC架構(gòu)包含用于輔助監(jiān)測器件的硬件運(yùn)行的功能,以滿足這些需求:

1. 事件計數(shù)器

用軟件監(jiān)測一個事件時,很多細(xì)微的細(xì)節(jié)不容易被發(fā)現(xiàn)。例如,記錄某個特定的CPU內(nèi)核在等待訪問共享資源(如外部存儲器)時停止的次數(shù),采用軟件就無法實(shí)現(xiàn)。包含一些設(shè)置很好的計數(shù)器的硬件設(shè)計,可以以很低的額外成本實(shí)現(xiàn)對系統(tǒng)動態(tài)特性的深入了解。數(shù)據(jù)可以通過調(diào)試器的JTAG接口讀出,或被周期性地讀出,例如,由軟件中的背景任務(wù)讀出并寫入到緩沖器中,以便在稍后的時間進(jìn)行查詢。

2. 高水印計數(shù)器

通常,開發(fā)者需要理解器件會運(yùn)行的極限惡劣狀況,例如,服務(wù)中斷的最大時間或輸入數(shù)據(jù)中的最小和最大抖動。高水印計數(shù)器提供硬件,這些硬件能被配置用于監(jiān)測特定總線事件,并鎖存最大的(高水印)或者最小的(低水印)的時間參數(shù)。在不需要太大的開銷情況下,他們能提供非常寶貴的統(tǒng)計數(shù)據(jù),否則需要用目標(biāo)軟件來實(shí)現(xiàn),或采集數(shù)據(jù)并發(fā)送到片外以作后續(xù)處理。

3. 跟蹤

一種成本很高但非常有用的硬件輔助監(jiān)測方法是跟蹤。在這種方法中,總線事務(wù)被記錄在專用的片上存儲器中,這樣一來,可以捕獲導(dǎo)致產(chǎn)生一個事件的最后的N個總線事務(wù)。

上載捕獲的數(shù)據(jù)

一般來說,你會上載數(shù)據(jù)到一個開發(fā)系統(tǒng)中(如電腦),或者上載到一個監(jiān)控模塊作進(jìn)一步分析。一旦確定需要采集什么樣的調(diào)試信息,以及如何采集以盡量減少干擾,那么必須決定如何從芯片向外發(fā)送數(shù)據(jù)-理想的情況是在應(yīng)用程序還在運(yùn)行時能夠發(fā)送。

應(yīng)該做的是緩沖器深度和上載頻率之間的折衷。你調(diào)試數(shù)據(jù)緩沖器越小,上載數(shù)據(jù)的頻率越高。頻繁上載將對系統(tǒng)性能產(chǎn)生持續(xù)的影響。如果有一個大的存儲器池用于緩存調(diào)試數(shù)據(jù),那么采集數(shù)據(jù)對系統(tǒng)性能的影響就會較小。然而,更大緩沖器則需要更多的目標(biāo)存儲器,在器件運(yùn)行期間上載數(shù)據(jù)對系統(tǒng)性能的影響將更顯著。

在應(yīng)用現(xiàn)場,通過像串行總線、TCP/IP連接或者USB端口等系統(tǒng)端口上載數(shù)據(jù)可能非常有用。增加的數(shù)據(jù)吞吐量不僅消耗這些端口的帶寬,但也占用處理器周期,來處理協(xié)議并完成數(shù)據(jù)傳輸。

當(dāng)采集比芯片上能實(shí)時提供的還多的數(shù)據(jù)時,將不可避免地在獲取的數(shù)據(jù)中引入空隙。在這些情況中,有必要周期性地插入足夠的關(guān)聯(lián)信息,以確保數(shù)據(jù)在最終從片上捕獲后能被成功解碼。對數(shù)據(jù)打包或者引入周期性的“同步點(diǎn)”是在數(shù)據(jù)流中提供這種額外信息的兩種方法??梢宰鳛閿?shù)據(jù)上載過程的一部分來完成這個工作,這樣冗余的信息就不必存儲在片上。

如果在一個SoC中多個CPU內(nèi)核共同工作,常常需要并行地對每個內(nèi)核上載獲取的信息,以便體現(xiàn)一個系統(tǒng)的完整情況。如果多個上載路徑不可用,要么在上載之前將來自多個內(nèi)核的數(shù)據(jù)結(jié)合起來放到一個緩沖器中,要么將它們按照某種方式復(fù)用起來以共享上載路徑。同樣的,在決定處理這些問題的最佳方法時,需要考慮系統(tǒng)的動態(tài)特性和數(shù)據(jù)的相對重要性。如果有很多相對不重要的數(shù)據(jù)來自其中的一個內(nèi)核,而另外一個內(nèi)核偶爾會發(fā)送一些重要信息,你需要采用一種方法確保重要的信息能優(yōu)先于非重要的信息。

可視化及分析

將從SoC器件中產(chǎn)生的原始信息轉(zhuǎn)換成一種易于理解的格式對SoC本身提出了許多挑戰(zhàn)。能采集到的數(shù)據(jù)種類、用于采集這些數(shù)據(jù)需要的特定硬件機(jī)制以及各類不同的應(yīng)用,用戶需要解決所有這些特殊的問題,這就使得創(chuàng)建一個通用的可視化工具非常具有挑戰(zhàn)性。模塊和定制化工具能進(jìn)行定制,使其能用于特定的硬件、軟件和要解決的問題領(lǐng)域,這通常是克服這些挑戰(zhàn)所需的靈活性的最佳方法。使用一種模塊化的框架使其很容易將來自不同的數(shù)據(jù)流的數(shù)據(jù)進(jìn)行關(guān)聯(lián),針對特定類型的信息分析關(guān)聯(lián)的數(shù)據(jù),并以一種易于理解的形式顯示這些從數(shù)據(jù)中得到的信息。這里描述了這種框架應(yīng)該提供的一些功能類型實(shí)例:

1. 關(guān)聯(lián)數(shù)據(jù)點(diǎn)

在解決一個多處理器SoC中的瓶頸、競爭或負(fù)載均衡這類系統(tǒng)級問題時,可能需要從多個處理器和加速器采集數(shù)據(jù)。在這種情況下,重構(gòu)系統(tǒng)行為需要將多個記錄關(guān)聯(lián)到一個時間線。在某些系統(tǒng)上,系統(tǒng)時鐘的實(shí)用性較高,從而可以使這個問題簡單化。而對于另外一些系統(tǒng),可能需要通過利用像DMA這樣的系統(tǒng)資源,從其它內(nèi)核來訪問的方式利用時鐘。如果公共時鐘不可行,可以使用其他機(jī)制來周期性地同步多個內(nèi)核的時間。其中的一個方法是使用中斷來將一個同步時間戳通過共享存儲器傳遞。理想情況時,可視化工具能適應(yīng)這些不同的記錄關(guān)聯(lián)方法。

2. 分析基礎(chǔ)架構(gòu)

一種模塊框架能夠?qū)⒊R姷姆治龌顒又谱鞒赡K,這些模塊能用來實(shí)現(xiàn)很多不同的分析和可視化工具,例如,一種普通的可定制數(shù)據(jù)轉(zhuǎn)換器和表格,可以很容易用于創(chuàng)建一種消息記錄瀏覽器;一種能夠?qū)⒒谝皇录驎r間戳的多個數(shù)據(jù)流關(guān)聯(lián)起來的分析模塊,可以被用作為一個構(gòu)建塊,來構(gòu)造送往其它分析模塊的數(shù)據(jù);一種用來分析過去一段時間的高水位標(biāo)志的模塊能為特定應(yīng)用的Dashboard、帶寬利用率監(jiān)測器等提供一些基本依據(jù)。

3. 可擴(kuò)展性

盡管可以用一些普通組件來評估所采集的大量數(shù)據(jù),但最好是能夠構(gòu)造定制組件來擴(kuò)展工具的環(huán)境。

4. 可配置性

可視化工具對于從大的緩沖器上載中提取有意義的信息非常關(guān)鍵,開發(fā)者需要能配置工具來強(qiáng)調(diào)特殊的差異性和數(shù)據(jù)峰值以發(fā)現(xiàn)一般的行為和異常的行為。為了從目標(biāo)對象上卸載數(shù)據(jù)處理,所用工具應(yīng)該提供允許將智能特性構(gòu)建到工具中的可編程基本功能,并減少需要采集的數(shù)據(jù)量。還應(yīng)該提供足夠的控制以確定在任何給定的時間,來規(guī)定應(yīng)該采集什么樣的數(shù)據(jù)。

看看現(xiàn)實(shí)

獲得對實(shí)時SoC系統(tǒng)內(nèi)部的可視性的挑戰(zhàn)當(dāng)然并不是微不足道的小事。采集到足夠的信息來產(chǎn)生不需要校正的有意義的結(jié)果,需要一種系統(tǒng)級的方法。通過使用軟件工具庫,利用硬件輔助監(jiān)測以及對數(shù)據(jù)如何從芯片上發(fā)送出來的管理,增加準(zhǔn)確性、寬度、深度和采集數(shù)據(jù)的粒度,使得開發(fā)者能采集更多的可靠信息。新的靈活工具套件和軟件開發(fā)策略將幫助開發(fā)者來應(yīng)對測試和調(diào)試用于具有高精度和高置信度的實(shí)時應(yīng)用的復(fù)雜SoC架構(gòu)的挑戰(zhàn)。



評論


相關(guān)推薦

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

關(guān)閉