使用實(shí)時(shí)操作系統(tǒng)開發(fā)軟件時(shí),如何測(cè)量性能?
使用實(shí)時(shí)操作系統(tǒng)開發(fā)軟件時(shí),如何測(cè)量性能?
性能分析非常重要的一個(gè)方面是響應(yīng)時(shí)間,例如,從一個(gè)任務(wù)被激活到運(yùn)行完成的時(shí)間。可以通過(guò)多種方式來(lái)測(cè)量響應(yīng)時(shí)間,如反轉(zhuǎn)I/O引腳并使用邏輯分析儀進(jìn)行測(cè)量,或通過(guò)添加一些額外的代碼來(lái)測(cè)量?jī)牲c(diǎn)之間時(shí)鐘周期數(shù)。但這些測(cè)量措施只能檢測(cè)兩點(diǎn)之間的處理器時(shí)間,無(wú)法獲知影響時(shí)間的因素,例如中斷或其他任務(wù)搶占導(dǎo)致的干擾。
性能分析的另一個(gè)重要內(nèi)容是執(zhí)行時(shí)間,一段特定代碼實(shí)際使用的處理器時(shí)間。我們通??梢詫?duì)程序計(jì)數(shù)器進(jìn)行采樣獲取使用的處理器時(shí)間,許多IDE支持該功能,大多數(shù)基于ARM的MCU為此提供了硬件支持。然而,通過(guò)該方式獲取的數(shù)據(jù)是平均測(cè)量值,對(duì)于頻率較低的函數(shù)或任務(wù)是不準(zhǔn)確的。此外,這些信息不能指示異常長(zhǎng)的執(zhí)行可能會(huì)導(dǎo)致問(wèn)題,例如超時(shí)。
使用RTOS知識(shí)進(jìn)行跟蹤
要獲得RTOS行為的準(zhǔn)確信息,你需要一個(gè)RTOS感知跟蹤的解決方案。但許多工具僅支持指定的操作系統(tǒng)。它們通常使用水平甘特圖顯示任務(wù)執(zhí)行隨時(shí)間的變化,但其跟蹤信息很難并行顯示其他事件,例如RTOS API的調(diào)用。
圖1 Tracealyzer主視圖
Tracealyzer 的主視圖(圖1)使用垂直時(shí)間軸,不僅顯示RTOS調(diào)度過(guò)程和中斷,還通過(guò)文本標(biāo)簽顯示RTOS調(diào)用的事件或自定義用戶事件。這些標(biāo)簽“浮動(dòng)”顯示并均勻分布。調(diào)度軌跡中的矩形框?qū)?yīng)于一次連續(xù)的執(zhí)行,稱為Fragment(分片)。參與者(Actor)表示被跟蹤系統(tǒng)中的所有執(zhí)行上下文,例如任務(wù)和中斷處理程序。任務(wù)調(diào)度可以不同的方式呈現(xiàn)或查看。圖1中,每個(gè)參與者一列,分片在多列中排序。
圖2 執(zhí)行時(shí)間和響應(yīng)時(shí)間變化
一個(gè)參與者,在捕獲視圖中有多個(gè)實(shí)例。實(shí)例表示參與者的一次執(zhí)行,即從任務(wù)被觸發(fā)到完成的過(guò)程。在Tracealyzer 主視圖中點(diǎn)擊參與者的分片,參與者實(shí)例通過(guò)藍(lán)色矩形框突出顯示,如圖1。
此外,執(zhí)行時(shí)間和響應(yīng)時(shí)間等性能指標(biāo)基于每個(gè)實(shí)例計(jì)算,并可視化為圖2所示的詳細(xì)圖表。例如如果捕獲任務(wù)的最大響應(yīng)時(shí)間是為 3255 μs,而最大執(zhí)行時(shí)間僅為1087 μs,這意味著大部分響應(yīng)時(shí)間被其他任務(wù)或中斷占用。
Tracealyzer中的所有視圖都是相互關(guān)聯(lián)的,通過(guò)單擊繪制的數(shù)據(jù)點(diǎn),你會(huì)找到主跟蹤視圖中的相應(yīng)位置,以及統(tǒng)計(jì)數(shù)據(jù)背后的詳細(xì)RTOS行為。
任務(wù)調(diào)度事件如何分組到任務(wù)實(shí)例中?對(duì)于周期RTOS任務(wù)來(lái)說(shuō),一個(gè)實(shí)例對(duì)應(yīng)一個(gè)迭代循環(huán),由RTOS阻塞調(diào)用分隔,例如,循環(huán)中的隊(duì)列接收調(diào)用QueueRecieve或延時(shí)調(diào)用DelayUntil。但是一個(gè)任務(wù)可能會(huì)執(zhí)行多個(gè)這樣的調(diào)用,那么Tracealyzer如何知道從哪里結(jié)束當(dāng)前實(shí)例并開始一個(gè)新的實(shí)例?
Tracealyzer 有一個(gè)“實(shí)例完成事件”(IFE)概念,通過(guò)兩種方式定義。用戶在大多數(shù)情況下不需要為此煩惱,因?yàn)橛幸唤M標(biāo)準(zhǔn)規(guī)則,用于指定RTOS調(diào)用的內(nèi)容作為IFE,例如延遲調(diào)用和 QueueRecieve調(diào)用。不需要額外的配置。但是,對(duì)于規(guī)則不合適的情況,可能會(huì)需要生成顯式事件 (IFE) 標(biāo)記實(shí)例完成,需要調(diào)用記錄庫(kù)中的特定函數(shù)實(shí)現(xiàn)。
圖 3顯示了一個(gè)示例,其中墨綠色控制任務(wù)分為多個(gè)實(shí)例,盡管這些點(diǎn)上沒有發(fā)生任務(wù)切換。你可以手動(dòng)決定如何將事件分組到實(shí)例中,從而控制時(shí)序統(tǒng)計(jì)的解釋。
圖3 實(shí)例結(jié)束事件IFE允許自定義間隔
總結(jié)
使用RTOS帶來(lái)的復(fù)雜性,使得應(yīng)用的運(yùn)行時(shí)行為難以通過(guò)閱讀代碼的方式理解?;赥racealyzer的可視化分析,可以幫助我們理解和控制軟件的運(yùn)行時(shí)行為。關(guān)于如何使用Tracezlyzer,捕獲系統(tǒng)行為的信息,可以參考《嵌入式實(shí)時(shí)操作系統(tǒng)-基于STM32Cube、FreeRTOS和Tracealyzer的應(yīng)用開發(fā)》
歡迎關(guān)注微信公眾號(hào)【麥克泰技術(shù)】
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。