調(diào)試嵌入式 Linux 非常復(fù)雜,即使是最有經(jīng)驗(yàn)的嵌入式系統(tǒng)開發(fā)人員也面臨許多挑戰(zhàn)。但是,專門支持嵌入式 Linux 的可視化跟蹤診斷工具可以大大簡(jiǎn)化這項(xiàng)工作。
我的任務(wù)是開發(fā)一個(gè)定制的 Linux 驅(qū)動(dòng)程序來(lái)使用外部設(shè)備流式傳輸?shù)臄?shù)據(jù)。雖然 Linux 內(nèi)核有一些原生機(jī)制來(lái)確保驅(qū)動(dòng)程序的功能是正確的,但調(diào)試和評(píng)估性能遠(yuǎn)非簡(jiǎn)單。這就是為什么我決定測(cè)試新的跟蹤工具(例如支持嵌入式 Linux 的 Tracealyzer)是否以及如何幫助我,從分析驅(qū)動(dòng)程序和中斷處理程序,到檢查用戶空間應(yīng)用程序和編譯器選項(xiàng)。
我將跟蹤工具與基于 Yocto 的 Linux 發(fā)行版一起使用,首先在板支持包上構(gòu)建自定義層以啟用開源LTTng庫(kù)。這為作為 Linux 系統(tǒng)(包括內(nèi)核)的一部分執(zhí)行驅(qū)動(dòng)程序提供了許多有價(jià)值的觀點(diǎn)。它還讓我對(duì)驅(qū)動(dòng)程序有了更全面的了解,以確保沒有性能瓶頸或確定任何瓶頸的原因。
診斷跟蹤工具還可以幫助發(fā)現(xiàn) IRQ 處理程序中的性能問(wèn)題,而無(wú)需使用可怕的 printk 語(yǔ)句。就我而言,它發(fā)現(xiàn)需要通過(guò) I2C 總線確認(rèn)設(shè)備中斷以防止抖動(dòng)。如果不使用跟蹤工具,這個(gè)隱藏的錯(cuò)誤直到發(fā)布前不久移除無(wú)關(guān)的 printk 調(diào)用時(shí)才會(huì)被發(fā)現(xiàn)或顯現(xiàn)出來(lái)。該工具還揭示了在中斷處理程序中包含 printk 的嚴(yán)重影響。使用跟蹤工具有效地避免了在后期修改驅(qū)動(dòng)程序的需要,這會(huì)導(dǎo)致大量的延誤和成本。
使用跟蹤工具,我還能夠測(cè)試我的假設(shè),即設(shè)置進(jìn)程的 CPU 親和性將如何影響其性能。分析正常和高強(qiáng)度條件下不同執(zhí)行元素之間的交互,顯示了 Linux 內(nèi)核的盡力而為算法。這確定了 Linux 內(nèi)核調(diào)度程序和 iperf 代碼庫(kù)的某些區(qū)域以供進(jìn)一步調(diào)查。
在評(píng)估用戶空間性能時(shí),跟蹤工具可以更加強(qiáng)大。像大多數(shù)嵌入式軟件開發(fā)人員一樣,我開發(fā)針對(duì) Linux 系統(tǒng)的用戶空間應(yīng)用程序。將跟蹤工具的輸出與 LTTng 跟蹤點(diǎn)結(jié)合起來(lái)提供了一種寶貴的方法來(lái)幫助我確定我的應(yīng)用程序的執(zhí)行情況、識(shí)別任何異常行為并提供高級(jí)時(shí)序統(tǒng)計(jì)信息。然后,我可以使用該工具進(jìn)一步解決任何計(jì)時(shí)問(wèn)題并提高應(yīng)用程序的性能。
我還發(fā)現(xiàn)跟蹤工具和 LTTng 庫(kù)的結(jié)合非常強(qiáng)大,可以幫助我快速了解某些編譯器選項(xiàng)對(duì)執(zhí)行浮點(diǎn)計(jì)算的用戶空間應(yīng)用程序性能的影響。通常,這種分析是在應(yīng)用程序完成但應(yīng)用程序性能不佳時(shí)進(jìn)行的,并且可能需要很多時(shí)間。在開發(fā)過(guò)程中使用該工具來(lái)驗(yàn)證軟件時(shí)序幫助我避免了對(duì)性能的影響。
總而言之,我發(fā)現(xiàn) Tracealyzer 等跟蹤工具可以成為發(fā)現(xiàn)隱藏錯(cuò)誤和優(yōu)化嵌入式 Linux 系統(tǒng)性能的強(qiáng)大元素。
諸如用于自上而下探索性分析的高級(jí)概述等功能,包括進(jìn)程交互、進(jìn)程分叉、CPU 使用率、RAM 使用率、I/O 使用率、文件使用率、狀態(tài)機(jī)和用戶定義的指標(biāo),提供了寶貴且直觀的跟蹤視圖,用于顯示細(xì)節(jié),在響應(yīng)性和清晰度方面可擴(kuò)展到大型 Linux 跟蹤。當(dāng)通過(guò)可定制的事件解釋適應(yīng)特定用例時(shí),任何用戶定義的數(shù)據(jù)集(例如間隔和狀態(tài)機(jī))都可以顯示在高度可配置的視圖中。最后,使用開源 LTTng 庫(kù)打開了廣泛的功能來(lái)探索嵌入式 Linux 設(shè)計(jì)的各個(gè)方面,從驅(qū)動(dòng)程序和中斷處理程序到用戶空間應(yīng)用程序和編譯器選項(xiàng)。在開發(fā)過(guò)程中使用這種組合不僅可以提高可見性,而且可以在過(guò)程的早期解決問(wèn)題。從我經(jīng)驗(yàn)豐富的開發(fā)人員的角度來(lái)看,這避免了隱藏的錯(cuò)誤并節(jié)省了項(xiàng)目后期的時(shí)間和成本。
圖1。在評(píng)估自定義 Linux 內(nèi)核(如圖)時(shí),將開源 LTTng 庫(kù)與跟蹤工具結(jié)合使用可以揭示性能問(wèn)題。
圖 2:此垂直跟蹤視圖使用垂直時(shí)間線顯示事件流。它從頂部開始,時(shí)間向下增長(zhǎng)。每列代表系統(tǒng)中的單個(gè)執(zhí)行上下文——通常是任務(wù)或中斷處理程序——列中的矩形顯示特定任務(wù)何時(shí)運(yùn)行。水平標(biāo)簽(左)標(biāo)記記錄的軟件事件。該圖是完全響應(yīng)的,因此放大可以顯示更多細(xì)節(jié)。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5152文章
19675瀏覽量
317664 -
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217127 -
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213847
發(fā)布評(píng)論請(qǐng)先 登錄
Linux嵌入式和單片機(jī)嵌入式的區(qū)別?
嵌入式適合自學(xué)嗎?
泰克MDO32示波器在嵌入式系統(tǒng)調(diào)試中的關(guān)鍵技術(shù)分析

ARM架構(gòu)嵌入式主板特點(diǎn)

掌握調(diào)試技巧是攻克嵌入式學(xué)習(xí)難點(diǎn)的關(guān)鍵

什么是嵌入式操作系統(tǒng)?
嵌入式 Linux 操作系統(tǒng)配置
【北京迅為】i.mx8mm嵌入式linux開發(fā)指南第四篇 嵌入式Linux系統(tǒng)移植篇第六十九章uboot移植

嵌入式系統(tǒng)的未來(lái)趨勢(shì)有哪些?
嵌入式linux開發(fā)的基本步驟有哪些?
嵌入式linux開發(fā)板怎么操作
嵌入式linux開發(fā)板芯片的工作原理
【出版發(fā)行】嵌入式系統(tǒng)原理與開發(fā)——基于RISC-V和Linux系統(tǒng)

專家力薦|《嵌入式系統(tǒng)原理與開發(fā)——基于RISC-V和Linux系統(tǒng)》新書發(fā)售

評(píng)論