• 正文
    • 一、實時性
    • 二、資源使用效率
    • 三、代碼執(zhí)行效率
    • 四、其他指標(biāo)
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

嵌入式性能指標(biāo)竟藏著這些秘密,你了解幾個?

04/14 10:40
620
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是雜燴君。

這次給大家分享關(guān)于嵌入式中性能指標(biāo)的一些知識。嵌入式軟件性能指標(biāo)是衡量嵌入式系統(tǒng)性能優(yōu)劣的重要依據(jù)。

各行業(yè),比較通用的嵌入式軟件性能指標(biāo)有哪些?

嵌入式軟件的性能指標(biāo)通常圍繞實時性和資源效率展開。以下是最重要的幾點指標(biāo):

一、實時性

實時性指的不是“快”,而是“準(zhǔn)時”——硬實時系統(tǒng)允許速度慢,但必須守時。

這個指標(biāo)直接影響到系統(tǒng)的交互性,這個指標(biāo)航空航天、工業(yè)自動化等領(lǐng)域至關(guān)重要。

例如,在自動駕駛系統(tǒng)中,車輛對突發(fā)狀況的響應(yīng)時間必須足夠短,以確保安全駕駛。一般來說,關(guān)鍵任務(wù)的響應(yīng)時間需要控制在毫秒級甚至微秒級。

1、實時性檢測工具

(1)Percepio View

Percepio View?是一款基于 Percepio Tracealyzer 的免費追蹤工具,用作?FreeRTOS?應(yīng)用程序的監(jiān)控,便于調(diào)試和驗證。

https://www.freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/05-FreeRTOS_plus_Trace/01-Percepio_View

Percepio View 可以與傳統(tǒng)調(diào)試器(如ST-Link、J-Link)結(jié)合使用,通過任務(wù)和 ISR 實時執(zhí)行情況 可視化的方式對調(diào)試器加以補充。

這些任務(wù)包括 FreeRTOS API 調(diào)用和您自己的“用戶事件”。 它不需要任何特殊的追蹤硬件。

(2)SEGGER SystemView

SEGGER SystemView是一個實時記錄和可視化工具,用于分析和描述嵌入式系統(tǒng)的行為。

它提供了對運行時行為的深入了解,超越了傳統(tǒng)調(diào)試器的功能。

SystemView 可免費用于非商業(yè)用途,且功能不受限制。

https://www.segger.com/products/development-tools/systemview/

SystemView非常適合具有多線程和中斷的復(fù)雜系統(tǒng),它可以幫助開發(fā)人員確保他們的系統(tǒng)按預(yù)期執(zhí)行,識別低效率,并發(fā)現(xiàn)意外的交互或資源沖突。

通過調(diào)試接口記錄來自嵌入式系統(tǒng)的監(jiān)控數(shù)據(jù),SystemView詳細(xì)地可視化任務(wù)、中斷和軟件定時器的執(zhí)行情況。

二、資源使用效率

這個指標(biāo)主要衡量系統(tǒng)硬件資源(如 CPU、內(nèi)存)的使用情況。

通過監(jiān)測資源利用率,可以了解軟件對硬件資源的需求和占用程度,避免資源過度占用或浪費。

例如,如果 CPU 利用率長期過高,可能導(dǎo)致系統(tǒng)響應(yīng)變慢甚至崩潰;內(nèi)存利用率過高則可能引發(fā)內(nèi)存泄漏等問題。

CPU使用率定義為CPU在某個時間段內(nèi)用于執(zhí)行計算任務(wù)的時間占總時間的比例。具體來說,CPU使用率 = 1 - 空閑時間/總CPU時間

合理的資源利用率可以使系統(tǒng)在有限的硬件資源下穩(wěn)定運行,并為未來的功能擴(kuò)展預(yù)留一定的資源空間。

1、CPU 使用分析工具

(1)SEGGER SystemView

SEGGER SystemView配合 J-Link,捕獲任務(wù)切換和中斷事件,分析 CPU 占用熱點,支持 FreeRTOS、Zephyr 等 RTOS。

(2)FreeRTOS 運行時統(tǒng)計功能(內(nèi)置)

https://www.freertos.org/Documentation/02-Kernel/02-Kernel-features/08-Run-time-statistics

在FreeRTOS中通過 config GENERATE_RUN_TIME_STATS配置啟用,統(tǒng)計每個任務(wù)的 CPU 占用率及執(zhí)行時間。

無需額外工具,直接集成在 FreeRTOS 中,適合快速定位高負(fù)載任務(wù)。

(3)perf(Linux 內(nèi)置工具)

perf是一個基于Linux內(nèi)核的性能事件子系統(tǒng),可以收集各種性能數(shù)據(jù),如CPU使用率、內(nèi)存訪問、函數(shù)調(diào)用等。

使用命令:

perf record -e cpu-clock -g ./embedded_app ?# 記錄 CPU 事件
perf report ?# 生成熱點函數(shù)分析報告

2、 內(nèi)存使用分析工具

(1)heap-monitoring

heap-monitoring是SEGGER SystemView中的應(yīng)用程序中的動態(tài)存儲監(jiān)控工具。

在應(yīng)用程序使用C或C++堆、多個自定義堆或RTOS提供的內(nèi)存池對象,可以使用heap-monitoring跟蹤這些對象的使用情況,分析它們的使用模式,評估堆上的負(fù)載、識別潛在的內(nèi)存泄漏、跟蹤內(nèi)存峰值使用情況等的格式顯示收集到的信息。

使用方式:

使用SEGGER_SYSVIEW_HeapDefine定義一次堆的特征。

并使用SEGGER_SYSVIEW_HeapAllocSEGGER_SYSVIEW_HeapFree監(jiān)視它的使用情況。

(2)FreeRTOS 堆棧溢出檢測(內(nèi)置)

在FreeRTOS中通過?config CHECK_FOR_STACK_OVERFLOW?配置檢測任務(wù)堆棧溢出。

實時監(jiān)控任務(wù)棧使用,防止內(nèi)存越界導(dǎo)致的系統(tǒng)崩潰。

(3)Valgrind

Valgrind是一款用于內(nèi)存調(diào)試、內(nèi)存泄漏檢測以及性能分析的軟件開發(fā)工具。

Valgrind工具包包含多個工具:

其中Valgrind Massif工具是堆棧分析器。堆棧分析器,它能測量程序在堆棧中使用了多少內(nèi)存,告訴我們堆塊,堆管理塊和棧的大小。

Valgrind Massif能幫助我們減少內(nèi)存的使用,在帶有虛擬內(nèi)存的現(xiàn)代系統(tǒng)中,它還能夠加速我們程序的運行,減少程序停留在交換區(qū)中的幾率。

Valgrind由內(nèi)核(core)以及基于內(nèi)核的其他調(diào)試工具組成。

其基于仿真方式對程序進(jìn)行調(diào)試,它先于應(yīng)用程序獲取實際處理器的控制權(quán),并在實際處理器的基礎(chǔ)上仿真一個虛擬處理器,并使應(yīng)用程序運行于這個虛擬處理器之上,從而對應(yīng)用程序的運行進(jìn)行監(jiān)視。

應(yīng)用程序并不知道該處理器是虛擬的還是實際的,已經(jīng)編譯成二進(jìn)制代碼的應(yīng)用程序并不用重新進(jìn)行編譯,Valgrind 直接解釋二進(jìn)制代碼使得應(yīng)用程序基于它運行,從而能夠檢查內(nèi)存操作時可能出現(xiàn)的錯誤。

所以在Valgrind下運行的程序運行速度要慢得多,而且使用的內(nèi)存要多得多。因此,最好在性能好的機(jī)器上使用Valgrind,并且是在開發(fā)調(diào)試階段使用。

三、代碼執(zhí)行效率

代碼執(zhí)行效率直接影響系統(tǒng)的?可靠性、實時性、功耗?和?成本。

    圖像處理算法中,綜合考慮資源利用平衡,改用查表法進(jìn)行效率提升。通信協(xié)議解析中,減少冗余字符串操作函數(shù)調(diào)用次數(shù)。

1、代碼執(zhí)行效率檢測工具

(1)gprof

GNU gprof,這是一個經(jīng)典的性能分析工具,集成在GCC中,只需添加編譯選項即可使用,適用于Linux/MPU 或交叉編譯環(huán)境(如 ARM Cortex-A 系列),定位算法或邏輯瓶頸。

https://ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_mono/gprof.html

它能夠顯示每個函數(shù)的調(diào)用次數(shù)和執(zhí)行時間,幫助定位熱點代碼。對于嵌入式開發(fā),可以在交叉編譯環(huán)境中使用。

編譯代碼時啟用分析

gcc -pg -o my_app my_code.c

生成分析報告

gprof my_app gmon.out > report.txt

四、其他指標(biāo)

可靠性:嵌入式系統(tǒng),尤其是應(yīng)用于關(guān)鍵領(lǐng)域(如醫(yī)療設(shè)備、交通控制等)的軟件,可靠性是至關(guān)重要的指標(biāo)。軟件需要具備容錯能力、錯誤恢復(fù)能力和穩(wěn)定性,以應(yīng)對各種可能出現(xiàn)的異常情況,確保系統(tǒng)持續(xù)、穩(wěn)定地運行。

功耗低功耗設(shè)計可以延長設(shè)備的使用時間,減少充電頻率,提高用戶體驗。同時,對于大規(guī)模部署的物聯(lián)網(wǎng)設(shè)備,降低功耗還可以降低運營成本和對環(huán)境的影。

可預(yù)測性:確保所有任務(wù)在任意負(fù)載下均滿足截止時間(硬實時系統(tǒng)的核心)。

通信吞吐量:在涉及網(wǎng)絡(luò)或總線(如CAN、Ethernet)的系統(tǒng)中,數(shù)據(jù)吞吐和延遲是關(guān)鍵。

工具鏈影響編譯器優(yōu)化級別、調(diào)試代碼(如斷言)對性能的影響需在發(fā)布版本中評估。

要是這篇文章給你帶來了新啟發(fā),動動手指點個在看/轉(zhuǎn)發(fā)唄。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

本公眾號專注于嵌入式技術(shù),包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時,公眾號內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進(jìn)步!