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

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

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

大家好,我是雜燴君。

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

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

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

一、實(shí)時(shí)性

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

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

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

1、實(shí)時(shí)性檢測(cè)工具

(1)Percepio View

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

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é)合使用,通過(guò)任務(wù)和 ISR 實(shí)時(shí)執(zhí)行情況 可視化的方式對(duì)調(diào)試器加以補(bǔ)充。

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

(2)SEGGER SystemView

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

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

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

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

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

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

二、資源使用效率

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

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

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

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

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

1、CPU 使用分析工具

(1)SEGGER SystemView

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

(2)FreeRTOS 運(yùn)行時(shí)統(tǒng)計(jì)功能(內(nèi)置)

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

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

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

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

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

使用命令:

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

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

(1)heap-monitoring

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

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

使用方式:

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

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

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

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

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

(3)Valgrind

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

Valgrind工具包包含多個(gè)工具:

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

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

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

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

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

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

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

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

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

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

(1)gprof

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

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

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

編譯代碼時(shí)啟用分析

gcc -pg -o my_app my_code.c

生成分析報(bào)告

gprof my_app gmon.out > report.txt

四、其他指標(biāo)

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

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

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

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

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

要是這篇文章給你帶來(lái)了新啟發(fā),動(dòng)動(dòng)手指點(diǎn)個(gè)在看/轉(zhuǎn)發(fā)唄。

相關(guān)推薦

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

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