這次給大家分享關于嵌入式中性能指標的一些知識。嵌入式軟件性能指標是衡量嵌入式系統性能優劣的重要依據。
各行業,比較通用的嵌入式軟件性能指標有哪些?
嵌入式軟件的性能指標通常圍繞實時性和資源效率展開。以下是最重要的幾點指標:
一、實時性
實時性指的不是“快”,而是“準時”——硬實時系統允許速度慢,但必須守時。
這個指標直接影響到系統的交互性,這個指標航空航天、工業自動化等領域至關重要。
例如,在自動駕駛系統中,車輛對突發狀況的響應時間必須足夠短,以確保安全駕駛。一般來說,關鍵任務的響應時間需要控制在毫秒級甚至微秒級。
1、實時性檢測工具
(1)Percepio View
Percepio View 是一款基于 Percepio Tracealyzer 的免費追蹤工具,用作 FreeRTOS 應用程序的監控,便于調試和驗證。
https://www.freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/05-FreeRTOS_plus_Trace/01-Percepio_View
Percepio View 可以與傳統調試器(如ST-Link、J-Link)結合使用,通過任務和 ISR 實時執行情況 可視化的方式對調試器加以補充。
這些任務包括 FreeRTOS API 調用和您自己的“用戶事件”。 它不需要任何特殊的追蹤硬件。
(2)SEGGER SystemView
SEGGER SystemView是一個實時記錄和可視化工具,用于分析和描述嵌入式系統的行為。
它提供了對運行時行為的深入了解,超越了傳統調試器的功能。
SystemView 可免費用于非商業用途,且功能不受限制。
https://www.segger.com/products/development-tools/systemview/
SystemView非常適合具有多線程和中斷的復雜系統,它可以幫助開發人員確保他們的系統按預期執行,識別低效率,并發現意外的交互或資源沖突。
通過調試接口記錄來自嵌入式系統的監控數據,SystemView詳細地可視化任務、中斷和軟件定時器的執行情況。
二、資源使用效率
這個指標主要衡量系統硬件資源(如 CPU、內存)的使用情況。
通過監測資源利用率,可以了解軟件對硬件資源的需求和占用程度,避免資源過度占用或浪費。
例如,如果 CPU 利用率長期過高,可能導致系統響應變慢甚至崩潰;內存利用率過高則可能引發內存泄漏等問題。
CPU使用率定義為CPU在某個時間段內用于執行計算任務的時間占總時間的比例。具體來說,CPU使用率 = 1 - 空閑時間/總CPU時間。
合理的資源利用率可以使系統在有限的硬件資源下穩定運行,并為未來的功能擴展預留一定的資源空間。
1、CPU 使用分析工具
(1)SEGGER SystemView
SEGGER SystemView配合 J-Link,捕獲任務切換和中斷事件,分析 CPU 占用熱點,支持 FreeRTOS、Zephyr 等 RTOS。
(2)FreeRTOS 運行時統計功能(內置)
https://www.freertos.org/Documentation/02-Kernel/02-Kernel-features/08-Run-time-statistics
在FreeRTOS中通過 config GENERATE_RUN_TIME_STATS配置啟用,統計每個任務的 CPU 占用率及執行時間。
無需額外工具,直接集成在 FreeRTOS 中,適合快速定位高負載任務。
(3)perf(Linux 內置工具)
perf是一個基于Linux內核的性能事件子系統,可以收集各種性能數據,如CPU使用率、內存訪問、函數調用等。
使用命令:
perf record -e cpu-clock -g ./embedded_app # 記錄 CPU 事件
perf report # 生成熱點函數分析報告
2、 內存使用分析工具
(1)heap-monitoring
heap-monitoring是SEGGER SystemView中的應用程序中的動態存儲監控工具。
在應用程序使用C或C++堆、多個自定義堆或RTOS提供的內存池對象,可以使用heap-monitoring跟蹤這些對象的使用情況,分析它們的使用模式,評估堆上的負載、識別潛在的內存泄漏、跟蹤內存峰值使用情況等的格式顯示收集到的信息。
使用方式:
使用SEGGER_SYSVIEW_HeapDefine定義一次堆的特征。
并使用SEGGER_SYSVIEW_HeapAlloc和SEGGER_SYSVIEW_HeapFree監視它的使用情況。
(2)FreeRTOS 堆棧溢出檢測(內置)
在FreeRTOS中通過 config CHECK_FOR_STACK_OVERFLOW 配置檢測任務堆棧溢出。
實時監控任務棧使用,防止內存越界導致的系統崩潰。
(3)Valgrind
Valgrind是一款用于內存調試、內存泄漏檢測以及性能分析的軟件開發工具。
Valgrind工具包包含多個工具:
其中Valgrind Massif工具是堆棧分析器。堆棧分析器,它能測量程序在堆棧中使用了多少內存,告訴我們堆塊,堆管理塊和棧的大小。
Valgrind Massif能幫助我們減少內存的使用,在帶有虛擬內存的現代系統中,它還能夠加速我們程序的運行,減少程序停留在交換區中的幾率。
Valgrind由內核(core)以及基于內核的其他調試工具組成。
其基于仿真方式對程序進行調試,它先于應用程序獲取實際處理器的控制權,并在實際處理器的基礎上仿真一個虛擬處理器,并使應用程序運行于這個虛擬處理器之上,從而對應用程序的運行進行監視。
應用程序并不知道該處理器是虛擬的還是實際的,已經編譯成二進制代碼的應用程序并不用重新進行編譯,Valgrind 直接解釋二進制代碼使得應用程序基于它運行,從而能夠檢查內存操作時可能出現的錯誤。
所以在Valgrind下運行的程序運行速度要慢得多,而且使用的內存要多得多。因此,最好在性能好的機器上使用Valgrind,并且是在開發調試階段使用。
三、代碼執行效率
代碼執行效率直接影響系統的 可靠性、實時性、功耗 和 成本。
- 圖像處理算法中,綜合考慮資源利用平衡,改用查表法進行效率提升。
- 通信協議解析中,減少冗余字符串操作函數調用次數。
1、代碼執行效率檢測工具
(1)gprof
GNU gprof,這是一個經典的性能分析工具,集成在GCC中,只需添加編譯選項即可使用,適用于Linux/MPU 或交叉編譯環境(如 ARM Cortex-A 系列),定位算法或邏輯瓶頸。
https://ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_mono/gprof.html
它能夠顯示每個函數的調用次數和執行時間,幫助定位熱點代碼。對于嵌入式開發,可以在交叉編譯環境中使用。
編譯代碼時啟用分析:
gcc -pg -o my_app my_code.c
生成分析報告:
gprof my_app gmon.out > report.txt
四、其他指標
- 可靠性:嵌入式系統,尤其是應用于關鍵領域(如醫療設備、交通控制等)的軟件,可靠性是至關重要的指標。軟件需要具備容錯能力、錯誤恢復能力和穩定性,以應對各種可能出現的異常情況,確保系統持續、穩定地運行。
- 功耗:低功耗設計可以延長設備的使用時間,減少充電頻率,提高用戶體驗。同時,對于大規模部署的物聯網設備,降低功耗還可以降低運營成本和對環境的影。
- 可預測性:確保所有任務在任意負載下均滿足截止時間(硬實時系統的核心)。
- 通信吞吐量:在涉及網絡或總線(如CAN、Ethernet)的系統中,數據吞吐和延遲是關鍵。
- 工具鏈影響:編譯器優化級別、調試代碼(如斷言)對性能的影響需在發布版本中評估。