嵌入式軟件跟蹤信息嵌套緩存機制和解析機制的設(shè)計
引言
本文引用地址:http://m.butianyuan.cn/article/264077.htm嵌入式系統(tǒng)是當(dāng)今計算機軟件領(lǐng)域的熱點,實時性是嵌入式系統(tǒng)的基本要求。隨著嵌入式技術(shù)的不斷發(fā)展,在嵌入式應(yīng)用的不斷增長以及嵌入式系統(tǒng)復(fù)雜性不斷提高的情況下,調(diào)試階段在整個系統(tǒng)開發(fā)過程中所占的比重越來越大。調(diào)試環(huán)境和調(diào)試技術(shù)直接影響軟件開發(fā)的效率和質(zhì)量,高效的調(diào)試系統(tǒng)可以大大減少嵌入式系統(tǒng)開發(fā)的時間,減輕系統(tǒng)開發(fā)工作量。
跟蹤調(diào)試系統(tǒng)主要有JTAG在線調(diào)試和運行時跟蹤調(diào)試兩種方式。JTAG在線調(diào)試在調(diào)試實時系統(tǒng)時有很大的局限性,如通過斷點查詢完參數(shù)后系統(tǒng)無法再按照正常時序運行,以及無法檢測到系統(tǒng)順序化執(zhí)行的變遷狀態(tài)。運行時跟蹤調(diào)試采用軟件插樁技術(shù),通過在程序中嵌入跟蹤點,開發(fā)人員可以在程序運行過程中通過跟蹤點實時觀察輸出的信息,如各模塊之間進行交互的信息以及程序運行的順序等。
本項目設(shè)計的實時跟蹤系統(tǒng)基于運行時跟蹤調(diào)試手段,采用ARM11系列處理器作為硬件開發(fā)平臺,運行于Nucleus實時操作系統(tǒng)上。Nucl eus實時操作系統(tǒng)為搶先式多任務(wù)操作系統(tǒng),在程序執(zhí)行過程中,低優(yōu)先級任務(wù)會被高優(yōu)先級任務(wù)搶占,可能出現(xiàn)跟蹤任務(wù)沖突而導(dǎo)致跟蹤信息相互覆蓋、亂序等問題。特別是在跟蹤信息量較大時,一旦超過傳輸峰值就會造成跟蹤信息的丟失。該實時跟蹤系統(tǒng)采用特殊緩存機制和解析機制,能夠解決跟蹤信息丟失的問題,實現(xiàn)跟蹤信息的完整、有序傳輸。
1 原始跟蹤方案
實時跟蹤系統(tǒng)由跟蹤信息緩存單元、傳輸控制單元和PC端解析單元組成,如圖1所示。其中,跟蹤信息緩存單元負責(zé)對跟蹤信息的組裝和跟蹤緩存的管理,傳輸控制單元負責(zé)將跟蹤信息從跟蹤緩存搬移到PC端,PC端解析單元負責(zé)對跟蹤信息進行解析。
跟蹤緩存管理機制是指如何管理該跟蹤緩存的讀寫權(quán)限,如何記錄讀寫索引的變化。在有跟蹤備份緩存的跟蹤方案中,跟蹤緩存管理機制還負責(zé)對備份緩存的管理。在跟蹤系統(tǒng)中,所有跟蹤信息在跟蹤點輸出時被封裝成為固定幀格式(消息頭+消息內(nèi)容),寫入到跟蹤信息緩存單元中同一個長度為X字節(jié)的環(huán)形隊列。
由于Nucleus多任務(wù)操作系統(tǒng)下實時跟蹤系統(tǒng)中跟蹤源主要分為低級中斷、高級中斷/定時器和任務(wù)等,因此在對跟蹤源中的跟蹤點進行跟蹤的過程中,不同優(yōu)先級的跟蹤點可能出現(xiàn)對全局跟蹤信息緩存的競爭。跟蹤沖突場景如圖2所示。跟蹤信息緩存單元中僅設(shè)置了一個寫指針訪問跟蹤信息緩存,保證了跟蹤信息的有序性,但不同優(yōu)先級跟蹤源進行切換時會產(chǎn)生沖突,需要對寫指針現(xiàn)場進行保護。
由于阻塞高優(yōu)先級任務(wù)會造成系統(tǒng)流程異常,在產(chǎn)生沖突時,為了保證跟蹤信息完整性,同時又不能阻塞高優(yōu)先級任務(wù),只能丟棄高優(yōu)先級任務(wù)中的跟蹤請求。當(dāng)操作系統(tǒng)任務(wù)頻繁切換時,會出現(xiàn)較多跟蹤信息丟棄的現(xiàn)象。跟蹤信息丟棄現(xiàn)象的特征是跟蹤信息整條丟失、連續(xù)丟失(主動搶占任務(wù)中的所有跟蹤),且跟蹤信息丟棄與跟蹤信息傳輸損耗無關(guān)。因此,跟蹤系統(tǒng)中的緩存機制有待優(yōu)化。
2 跟蹤優(yōu)化方案一
2.1 物理緩存管理機制
物理緩存管理機制采用含跟蹤頭、跟蹤信息內(nèi)容和跟蹤尾的跟蹤信息幀格式,在跟蹤源數(shù)據(jù)相互被打斷的過程中不考慮跟蹤信息的完整性,按照打斷的優(yōu)先級順序?qū)⒏櫺畔懭敫櫨彺?。跟蹤信息寫入場景如圖3所示。任務(wù)1跟蹤信息寫入跟蹤信息緩存過程中,被高級中斷/定時器打斷。高級中斷/定時器將其跟蹤信息頭寫入當(dāng)前寫指針處,直至整條跟蹤信息寫入完成。任務(wù)1獲得執(zhí)行權(quán),其未寫完的跟蹤信息緊接著高級中斷/定時器跟蹤信息尾部寫入,直至整條跟蹤信息寫入完成。
2.2 傳輸控制機制
實時跟蹤系統(tǒng)通過串口進行PC端和ARM子系統(tǒng)之間的通信,傳輸控制單元描述了PC端和ARM子系統(tǒng)之間的通信流程,它采用DMA總線控制器進行跟蹤信息搬移。DMA是一種不經(jīng)過ARM處理器的CPU而直接從內(nèi)存中存取數(shù)據(jù)的數(shù)據(jù)交換模式。在DMA模式下,CPU只需向DMA總線控制器下達指令,使其處理數(shù)據(jù)的傳送,接收數(shù)據(jù)傳送完畢的反饋信息,從而大大減輕了CPU資源占有率。傳輸控制單元采取DMA同步中斷發(fā)送跟蹤信息,每次以等長字節(jié)傳輸,將跟蹤信息搬移至串口發(fā)送寄存器中,再通過配置串口發(fā)送寄存器,將跟蹤信息發(fā)送至PC端解析顯示單元。
2.3 遞歸調(diào)用解析機制
根據(jù)圖4中的跟蹤緩存場景,為保證跟蹤信息的完整連續(xù)性,解析單元采用遞歸調(diào)用的方式解析當(dāng)前碼流。
首先在PC端跟蹤信息解析單元開辟一個環(huán)形隊列(即循環(huán)緩存)用于存放串口輸出的跟蹤信息,通過一個讀指針訪問該循環(huán)緩存并進行遞歸調(diào)用解析。同時在PC端開辟一個大小為N×L的跟蹤緩存空間(即N個長度為L的連續(xù)緩存空間)用于存放解析出的完整跟蹤信息,每一塊長度為L的緩存存放一條完整的跟蹤信息。申請一個指針數(shù)組,用于保存每一個完整內(nèi)存的起始地址,即記錄N×L緩存中每次寫指針的變化情況。跟蹤信息遞歸解析函數(shù)流程如圖5所示。
最后將解析完成的跟蹤信息碼流轉(zhuǎn)換成為可見字符,在PC機上顯示輸出。
3 跟蹤優(yōu)化方案二
3.1 備份緩存管理機制
備份緩存管理機制采用含跟蹤頭和跟蹤信息的跟蹤信息幀格式,將跟蹤信息寫入一個大小為N的全局跟蹤信息緩存中。為避免在任務(wù)切換頻繁時當(dāng)前任務(wù)被高優(yōu)先級任務(wù)打斷造成數(shù)據(jù)丟失,申請一個嵌套深度為M的備份緩存來存放高優(yōu)先級任務(wù)跟蹤信息。其中,備份緩存區(qū)域每塊子緩存的長度均為m,設(shè)置跟蹤忙碌標(biāo)識位,初始值為0。跟蹤源通過調(diào)用跟蹤系統(tǒng)提供的跟蹤接口函數(shù),將跟蹤忙碌標(biāo)識置1,并將當(dāng)前跟蹤源跟蹤信息填入全局跟蹤信息緩存。完成當(dāng)前跟蹤信息寫入操作后,將跟蹤忙碌標(biāo)識置0。若當(dāng)前跟蹤源在進行寫入操作,即跟蹤忙碌標(biāo)識為1時,高優(yōu)先級任務(wù)調(diào)用跟蹤接口,則將高級任務(wù)的跟蹤信息寫入備份緩存中,當(dāng)前跟蹤源繼續(xù)進行未完成的寫操作。每次寫完當(dāng)前跟蹤信息,檢查備份緩存中是否有數(shù)——若有,則將備份緩存中的跟蹤信息拷回至全局跟蹤信息緩存中(跟蹤緩存場景如圖6所示),即在當(dāng)前任務(wù)跟蹤信息寫入跟蹤信息緩存時,若高級任務(wù)到來,則將高級任務(wù)跟蹤信息進行封裝并寫入備份緩存。當(dāng)前跟蹤結(jié)束寫入操作輸出成功后,檢查備份緩存中是否存在跟蹤信息——若有,則將備份緩存中的跟蹤信息回拷至全局跟蹤信息緩存中,從而保證全局跟蹤信息緩存中跟蹤信息的連續(xù)性。
3.2 傳輸控制機制
同跟蹤優(yōu)化方案一中傳輸控制機制。
3.3 普通查詢解析機制
根據(jù)跟蹤緩存管理機制二,由于全局跟蹤信息緩存中跟蹤信息呈完整連續(xù)分布,解碼方式采用遍歷查詢方式。
首先,在PC端跟蹤信息接收單元開辟一個環(huán)形隊列(即解析前循環(huán)緩存),用于存放從串口接收的跟蹤信息。
然后在PC端解析顯示單元開辟一個解析后循環(huán)緩存,用于存放解析后的完整跟蹤信息。使用讀指針遍歷解析前循環(huán)緩存,查詢到以跟蹤頭標(biāo)識X開頭的字符串,將其后的完整跟蹤信息寫入解析后循環(huán)緩存中,直至下一次遇到跟蹤頭標(biāo)識X,記錄解析前循環(huán)緩存讀索引并保存當(dāng)前解析后循環(huán)緩存寫索引。循環(huán)以上操作,將解析前循環(huán)緩存中的跟蹤信息依次解析,并放入解析后循環(huán)緩存中。
最后將解析后循環(huán)緩存中解析完成的完整跟蹤信息碼流轉(zhuǎn)換成為可見字符,在PC機上顯示輸出。
4 性能分析比較
4.1 跟蹤優(yōu)化方案一
將跟蹤信息按物理連續(xù)存儲方式存儲數(shù)據(jù),即跟蹤源在單條跟蹤信息組裝過程中,通過全局寫指針控制跟蹤信息寫入。所有跟蹤點均跟蹤當(dāng)前優(yōu)先級秩序,對跟蹤信息緩存區(qū)進行寫操作,保證僅有一個跟蹤信息緩存,且跟蹤源相互搶占時根據(jù)優(yōu)先級高低對跟蹤緩存進行寫操作。該機制跟蹤緩存中的跟蹤信息呈現(xiàn)嵌套、打斷的不完整碼流。
跟蹤信息發(fā)送機制采取跟蹤接口函數(shù)中觸發(fā)傳輸裝置搬移數(shù)據(jù)。在傳輸控制單元,通過配置DMA總線,將全局跟蹤信息緩存中的跟蹤信息搬移至串口寄存器中。PC端接收裝置從串口寄存器中取出數(shù)據(jù),放入PC端解析單元緩存空間,通過跟蹤信息遞歸解析機制,將不完整的跟蹤信息解析為完整連續(xù)的跟蹤信息。其中每個跟蹤信息緩存區(qū)尾部都設(shè)置一個保護數(shù)據(jù)區(qū),保護區(qū)長度為單條信息最大長度L。
該方案解決了跟蹤信息丟失問題,在PC端解析顯示單元對不連續(xù)碼流進行解碼。由于該機制在嵌入式跟蹤緩存單元中采取物理連續(xù)存儲數(shù)據(jù)方式,降低了跟蹤軟件對ARM系統(tǒng)資源的消耗,保證了在高速運行情況下跟蹤系統(tǒng)對ARM處理器CPU的消耗盡可能低。從而避免在高速運行的系統(tǒng)中,由于跟蹤系統(tǒng)占用大量CPU導(dǎo)致系統(tǒng)運行速率低。該方案適用于對ARM子系統(tǒng)運行速率要求較高的終端系統(tǒng)。
4.2 跟蹤優(yōu)化方案二
在嵌入式跟蹤信息緩存單元申請一個全局跟蹤信息環(huán)緩存空間,同時申請一組備份緩存。寫指針沖突時,高級任務(wù)的跟蹤信息被寫入備份緩存中,當(dāng)前跟蹤源繼續(xù)將其跟蹤信息寫入全局跟蹤信息緩存。每次寫完當(dāng)前條跟蹤信息,檢查備份緩存中是否有數(shù)——若有,則將其拷回至全局緩存中。該機制根據(jù)任務(wù)優(yōu)先級高低來管理寫指針,解決了寫指針沖突導(dǎo)致跟蹤信息不連續(xù)的問題。
在傳輸控制單元,通過配置DMA總線,設(shè)置發(fā)送目的地址及長度,將全局跟蹤信息緩存中的跟蹤信息搬移至串口寄存器中。PC端接收裝置從串口寄存器中取出數(shù)據(jù),放入PC端解析顯示單元跟蹤信息緩存區(qū)域,通過跟蹤信息普通查詢解析機制,將以X開頭并以X結(jié)尾的完整跟蹤信息解析出來。其中每個跟蹤信息緩存區(qū)尾部都設(shè)置一個保護數(shù)據(jù)區(qū),保護區(qū)長度為單條信息最大長度L。
該方案通過備份緩存機制解決了數(shù)據(jù)丟失問題,保證了跟蹤信息輸出的連續(xù)性和完整性。但由于備份緩存向全局跟蹤緩存進行跟蹤信息回拷過程,要大量占用ARM處理器CPU資源,導(dǎo)致該方案在對嵌入式系統(tǒng)運行速率要求高的環(huán)境中運行效率較低。
結(jié)語
針對現(xiàn)有的跟蹤軟件運行速率低、跟蹤信息亂序、丟失嚴(yán)重等情況,提出了兩種解決方案。一種是在ARM端采取物理連續(xù)存儲方式進行編碼,在PC端通過遞歸調(diào)用算法對嵌套跟蹤信息進行重新組裝,最后將解析后完整的碼流轉(zhuǎn)化為可見字符串輸出。此方案適用于對ARM子系統(tǒng)運行速率要求較高,且PC端可用資源充足的軟件跟蹤系統(tǒng)。另一種方案是在ARM端將高級任務(wù)跟蹤信息寫入備份緩存,再通過數(shù)據(jù)回拷方式將備份緩存中的跟蹤信息寫入全局跟蹤信息緩存區(qū)域。該方案在PC端解碼時只需查詢跟蹤頭標(biāo)識進行解碼,并將解析后連續(xù)的碼流轉(zhuǎn)化為可見字符串輸出,適用于對嵌入式系統(tǒng)運行速率要求不高且PC端資源有限的軟件跟蹤系統(tǒng)。
以上兩種方案均能保證輸出跟蹤信息的連續(xù)完整性,解決了Nucleus實時操作系統(tǒng)下低優(yōu)先級任務(wù)會被高優(yōu)先級任務(wù)搶占,從而可能出現(xiàn)的跟蹤任務(wù)沖突而導(dǎo)致的跟蹤信息相互覆蓋、亂序等問題,為軟件開發(fā)人員分析定位問題提供了更可靠的嵌入式軟件實時跟蹤系統(tǒng),提高了其分析解決問題的效率。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論