實(shí)時(shí)系統(tǒng)必須對(duì)外部和內(nèi)部需求做出快速反應(yīng)。當(dāng)系統(tǒng)使用多核架構(gòu)時(shí),交互的速度和數(shù)量會(huì)急劇上升。雖然這提高了系統(tǒng)性能,但它使應(yīng)用程序事件的實(shí)時(shí)排序變得復(fù)雜,因?yàn)槎嗪讼到y(tǒng)事件可以在多個(gè)獨(dú)立處理器上同時(shí)發(fā)生,而不是在單個(gè)處理器上順序發(fā)生。
對(duì)于多核開發(fā)人員而言,管理事件數(shù)量及其同時(shí)性質(zhì)的復(fù)雜性增加代表了設(shè)計(jì)更具挑戰(zhàn)性的系統(tǒng)。與單處理器系統(tǒng)相比,多核系統(tǒng)診斷系統(tǒng)故障或效率低下的原因要困難得多。由于可用的多核工具很少,開發(fā)人員只能使用原始的打印語句技術(shù),這些技術(shù)會(huì)在整個(gè)系統(tǒng)操作過程中留下面包屑,指示有關(guān)已發(fā)生的各種事件的數(shù)據(jù)。開發(fā)人員必須收集并理解碎屑并推斷系統(tǒng)的狀態(tài),這一過程通常需要隨后重新測量以獲得更精細(xì)的粒度和重復(fù)該過程。
為了有效地解開多核系統(tǒng)上復(fù)雜的操作序列,開發(fā)人員需要即時(shí)回放,使他們能夠檢查緊接感興趣區(qū)域之前的系統(tǒng)操作。如圖 1 所示,一種新型調(diào)試工具準(zhǔn)確顯示了多核系統(tǒng)在特定時(shí)間段內(nèi)發(fā)生的情況。所有系統(tǒng)事件的圖形分析顯示在由應(yīng)用程序線程組織并按處理器內(nèi)核分組的單個(gè)時(shí)間尺度上。
圖 1: TraceX 提供多核系統(tǒng)中實(shí)時(shí)事件的圖形視圖。在此示例中,可以看到 Core-0 和 Core-1 同時(shí)執(zhí)行不同的線程。

系統(tǒng)事件分析的傳統(tǒng)方法
實(shí)時(shí)程序員早就了解系統(tǒng)行為對(duì)其應(yīng)用程序功能和性能的重要性。傳統(tǒng)方法通過切換 I/O 引腳、使用 printf、設(shè)置變量或?qū)⒅祵懭胛募碓诖a到達(dá)某個(gè)階段時(shí)生成有關(guān)系統(tǒng)行為的數(shù)據(jù)來解決這些問題。
插入這樣的響應(yīng)需要大量時(shí)間,尤其是考慮到檢測代碼在第一次時(shí)通常不能完全按預(yù)期工作,并且必須進(jìn)行調(diào)試。一旦驗(yàn)證了應(yīng)用程序的該部分,就需要?jiǎng)h除檢測代碼,并且需要對(duì)其刪除進(jìn)行調(diào)試。大多數(shù)檢測過程是手動(dòng)的,因此很耗時(shí)并且容易出現(xiàn)額外的錯(cuò)誤。
除了檢測代碼之外,開發(fā)人員還需要找到一種方法來解釋生成的數(shù)據(jù)。檢測代碼生成的大量信息使確定哪些系統(tǒng)事件以何種順序發(fā)生的任務(wù)變得復(fù)雜。
新方法提供優(yōu)勢
與傳統(tǒng)方法相比,TraceX 自動(dòng)分析并以圖形方式描繪運(yùn)行期間在目標(biāo)系統(tǒng)上捕獲的系統(tǒng)和應(yīng)用程序事件。線程上下文切換、搶占、暫停、終止和系統(tǒng)中斷等事件都會(huì)留下調(diào)試工具識(shí)別和顯示的面包屑。這些面包屑描述了剛剛發(fā)生的事件、涉及哪個(gè)線程、該線程在哪個(gè)內(nèi)核上運(yùn)行、何時(shí)發(fā)生以及其他相關(guān)信息。
使用此工具,用戶可以使用應(yīng)用程序編程接口 (API) 記錄任何所需的應(yīng)用程序事件。事件信息存儲(chǔ)(記錄)在目標(biāo)系統(tǒng)上的循環(huán)緩沖區(qū)中,緩沖區(qū)大小由應(yīng)用程序確定。循環(huán)緩沖區(qū)可以隨時(shí)存儲(chǔ)最近的“n”個(gè)事件,并可在系統(tǒng)故障或其他重大事件的情況下進(jìn)行檢查。
良好的多核調(diào)試工具允許應(yīng)用程序在特定時(shí)間(例如遇到感興趣的區(qū)域時(shí))動(dòng)態(tài)停止和啟動(dòng)事件記錄。這樣可以避免在系統(tǒng)正常運(yùn)行時(shí)使數(shù)據(jù)庫混亂并消耗目標(biāo)內(nèi)存。當(dāng)遇到斷點(diǎn)或系統(tǒng)崩潰或應(yīng)用程序運(yùn)行完成后,可以將事件日志上傳到主機(jī)進(jìn)行分析。
一旦事件日志從目標(biāo)內(nèi)存上傳到主機(jī),該工具就會(huì)在代表時(shí)間的水平軸上以圖形方式顯示事件(參見圖 1)。與事件相關(guān)的各種應(yīng)用程序線程和系統(tǒng)例程沿縱軸列出,事件本身出現(xiàn)在相應(yīng)的行中。對(duì)于多核系統(tǒng),事件鏈接到它們各自的處理器內(nèi)核并分組在一起,以便開發(fā)人員可以輕松查看內(nèi)核的所有事件。
所有事件也顯示在頂部摘要行中,無論內(nèi)核或線程如何,為開發(fā)人員提供了一種方便的方式來獲取系統(tǒng)事件的完整畫面,而無需向下滾動(dòng)查看所有線程和內(nèi)核。事件由位于沿水平時(shí)間線的發(fā)生點(diǎn)以及相關(guān)線程或系統(tǒng)例程的右側(cè)的顏色編碼圖標(biāo)表示。軸可以展開以顯示更多事件詳細(xì)信息,也可以折疊以顯示更多事件。時(shí)間刻度可以向左(向后)或向右(向前)平移以顯示跟蹤緩沖區(qū)中的任何點(diǎn)。如圖2所示,選擇單個(gè)事件時(shí),將為該事件提供詳細(xì)信息,包括核心,上下文,事件,線程指針,新狀態(tài),堆棧指針和下一個(gè)線程點(diǎn)。
圖 2:單擊事件圖標(biāo)可以顯示單個(gè)事件的詳細(xì)信息。

解決優(yōu)先級(jí)反轉(zhuǎn)問題
最具挑戰(zhàn)性的實(shí)時(shí)問題之一是優(yōu)先級(jí)反轉(zhuǎn)。優(yōu)先級(jí)反轉(zhuǎn)的出現(xiàn)是因?yàn)閷?shí)時(shí)操作系統(tǒng) (RTOS) 采用基于優(yōu)先級(jí)的搶占式調(diào)度程序來確保準(zhǔn)備好運(yùn)行的最高優(yōu)先級(jí)線程實(shí)際運(yùn)行。調(diào)度程序可以在執(zhí)行過程中搶占一個(gè)較低優(yōu)先級(jí)的線程來滿足這個(gè)目標(biāo)。
當(dāng)高優(yōu)先級(jí)和低優(yōu)先級(jí)線程共享資源(例如內(nèi)存緩沖區(qū))時(shí),可能會(huì)出現(xiàn)問題。如果在高優(yōu)先級(jí)線程準(zhǔn)備運(yùn)行時(shí)低優(yōu)先級(jí)線程正在使用共享資源,則高優(yōu)先級(jí)線程必須等待低優(yōu)先級(jí)線程完成。如果較高優(yōu)先級(jí)的線程必須滿足關(guān)鍵期限,則必須計(jì)算它可能必須等待其所有共享資源的最長時(shí)間,以確定其最壞情況下的性能。當(dāng) CPU 為低優(yōu)先級(jí)線程提供服務(wù)時(shí),高優(yōu)先級(jí)線程被迫等待,就會(huì)發(fā)生優(yōu)先級(jí)反轉(zhuǎn)。
優(yōu)先級(jí)倒置很難識(shí)別和糾正。他們的癥狀通常是表現(xiàn)不佳,但表現(xiàn)不佳源于許多潛在原因。使確定原因的挑戰(zhàn)更加復(fù)雜的是,優(yōu)先級(jí)倒置可以逃避測試,這可能意味著倒置是不確定的。
像 TraceX 這樣的系統(tǒng)事件工具可以輕松自動(dòng)地識(shí)別優(yōu)先級(jí)反轉(zhuǎn)。跟蹤緩沖區(qū)清楚地識(shí)別在任何時(shí)間點(diǎn)正在運(yùn)行的線程并記錄線程就緒狀態(tài)的任何變化。因此,很容易及時(shí)返回以確定較高優(yōu)先級(jí)線程是否已準(zhǔn)備好運(yùn)行但被持有較高優(yōu)先級(jí)線程所需資源的較低優(yōu)先級(jí)線程阻塞。圖 3 顯示了非確定性優(yōu)先級(jí)反轉(zhuǎn)。
圖 3:高優(yōu)先級(jí)線程必須等待低優(yōu)先級(jí)線程在非確定性優(yōu)先級(jí)反轉(zhuǎn)中釋放互斥鎖。

如此圖所示,當(dāng) Low_thread 被 High_thread 搶占時(shí),它持有一個(gè)互斥鎖。High_thread 然后尋找相同的互斥體,但必須等待 Low_thread 釋放它。但是,Medium_thread 進(jìn)行了干預(yù),可以運(yùn)行不確定的時(shí)間長度,不僅延遲了 Low_thread,還延遲了 High_thread。只有當(dāng) Medium_thread 為 Low_thread 提供足夠的時(shí)間以完成其處理并釋放互斥鎖時(shí),High_thread 才能恢復(fù)。
提高應(yīng)用程序性能
雖然大多數(shù)開發(fā)人員使用支持多核的工具來理解和糾正問題,但好處并不止于此。這些工具提供了用于分析和改進(jìn)系統(tǒng)級(jí)應(yīng)用程序性能的執(zhí)行配置文件。使用執(zhí)行配置文件,開發(fā)人員可以看到每個(gè)線程和系統(tǒng)服務(wù)使用的 CPU 時(shí)間量(參見圖 4)。開發(fā)人員可以輕松地深入了解特定事件以進(jìn)行診斷。
圖 4:執(zhí)行配置文件顯示每個(gè)線程使用的 CPU 時(shí)間。

與多核系統(tǒng)操作更相關(guān)的是,平衡所有可用內(nèi)核的處理負(fù)載可以實(shí)現(xiàn)更大的系統(tǒng)吞吐量。如果系統(tǒng)配置文件提供了有關(guān)哪些內(nèi)核具有較長空閑時(shí)間的信息,如圖 4 所示,開發(fā)人員將獲得有關(guān)如何將處理轉(zhuǎn)移到其他空閑內(nèi)核的有力線索。
支持多核的調(diào)試工具以標(biāo)準(zhǔn)調(diào)試器無法提供的方式繪制系統(tǒng)的圖形圖像。它為開發(fā)人員提供了對(duì)中斷、上下文切換和其他系統(tǒng)事件的清晰視圖,這些事件通常通過耗時(shí)的代碼檢測和對(duì)結(jié)果數(shù)據(jù)的繁瑣檢查來檢測。因此,與單獨(dú)使用標(biāo)準(zhǔn)調(diào)試工具相比,開發(fā)人員可以在更短的時(shí)間內(nèi)找到并修復(fù)錯(cuò)誤并優(yōu)化應(yīng)用程序性能。由于調(diào)試占應(yīng)用程序開發(fā)的 70%,這些工具顯著改進(jìn)了產(chǎn)品,同時(shí)減少了開發(fā)時(shí)間。
審核編輯:郭婷
-
cpu
+關(guān)注
關(guān)注
68文章
11287瀏覽量
225189 -
API
+關(guān)注
關(guān)注
2文章
2387瀏覽量
66821 -
RTOS
+關(guān)注
關(guān)注
25文章
866瀏覽量
123070
發(fā)布評(píng)論請(qǐng)先 登錄
【原創(chuàng)】OpenHarmony系統(tǒng)投屏工具軟件 - OpenHarmony_OHScrcpy使用推薦
嵌入式軟件單元測試中AI自動(dòng)化與人工檢查的協(xié)同機(jī)制研究:基于專業(yè)工具的實(shí)證分析
C語言單元測試在嵌入式軟件開發(fā)中的作用及專業(yè)工具的應(yīng)用
在線測徑儀是否配備測控軟件分析系統(tǒng)?
無圖形界面模式下自定義檢查工具的應(yīng)用
蜂鳥hbird sdk的Makefile架構(gòu)分析
嵌入式軟件測試與專業(yè)測試工具的必要性深度解析
不同類型的自動(dòng)化工具在評(píng)估數(shù)據(jù)緩存效果時(shí)有哪些優(yōu)缺點(diǎn)?
EasyGo TestSim:新能源電力系統(tǒng)自動(dòng)化測試的利器
如何測試協(xié)議分析儀的實(shí)時(shí)響應(yīng)效率?
EastWave應(yīng)用:負(fù)折射現(xiàn)象實(shí)時(shí)演示
隧道人員定位管理系統(tǒng)簡要描述
米爾瑞芯微多核異構(gòu)低功耗RK3506核心板重磅發(fā)布
PanDao:制造成本影響分析軟件工具
化學(xué)電池儲(chǔ)能系統(tǒng)在并網(wǎng)型新能源發(fā)電系統(tǒng)中的應(yīng)用研究分析
多核系統(tǒng)中的自動(dòng)分析并以圖形方式描述實(shí)時(shí)事件的工具
評(píng)論