程序性能(1)嵌入式基準測試工具

程序性能(1)嵌入式基準測試工具

Author:Once Day date: 2025年4月19日

漫漫長路,才剛剛開始…

全系列文檔查看:Perf性能分析_Once-Day的博客-CSDN博客

參考文檔:

  • CPU Benchmark – MCU Benchmark – CoreMark – EEMBC Embedded Microprocessor Benchmark Consortium
  • CPU性能測試——CoreMark篇 - Imagine_Miracle - 博客園
  • Iozone Filesystem Benchmark
  • iozone磁盤讀寫測試工具的使用以及命令詳解、下載(網站最詳細講解步驟)_iozone參數詳解-CSDN博客
  • RAMspeed SMP Benchmark - OpenBenchmarking.org

文章目錄

      • 程序性能(1)嵌入式基準測試工具
        • 1. 通用嵌入式基準測試工具
        • 2. CoreMark使用
        • 3. IOzone 使用

1. 通用嵌入式基準測試工具

在嵌入式設備開發中,進行 CPU、IO 和內存的基準測試(Benchmark) 是評估系統性能的重要手段。以下是一些常用的基準測試工具,適用于不同的嵌入式平臺(如 ARM Cortex 系列、RISC-V、MIPS 等):

(1)CoreMark

  • 測試內容:CPU性能(整數運算、控制流、內存訪問等)
  • 優點:專為嵌入式系統設計,小巧、無需操作系統
  • 平臺支持:幾乎所有架構(ARM、RISC-V、MIPS 等)

CoreMark 是 EEMBC 推出的最常用嵌入式 CPU benchmark,常用于芯片廠商性能對比。

(2)Dhrystone

  • 測試內容:整數運算性能、控制結構等
  • 適用場景:無需浮點運算的 CPU 基準測試
  • 優點:代碼簡單、移植性好
  • 缺點:已較老舊,不代表現代應用性能

(3)Linpack (嵌入式版本)

  • 測試內容:浮點性能(FLOPS)
  • 適用場景:帶有 FPU 的嵌入式處理器
  • 說明:需要設備支持浮點運算,否則會測試失敗

(4)IOzone (嵌入式 Linux 下)

  • 測試內容:文件系統 IO 性能(讀取、寫入、隨機訪問等)
  • 適用平臺:嵌入式 Linux(如 Yocto、Buildroot)
# 示例:測試寫入性能
iozone -a -g 64M -i 0 -i 1 -i 2

(5)dd 命令

  • 測試內容:原始讀寫速度
  • 適用平臺:Linux/Unix 系統
# 寫入測試
dd if=/dev/zero of=testfile bs=1M count=100 oflag=direct# 讀取測試
dd if=testfile of=/dev/null bs=1M count=100 iflag=direct

(6)RAMspeed / RAMbench

  • 測試內容:內存讀寫速度、帶寬
  • 適用平臺:帶 Linux 的嵌入式系統
# RAM 帶寬測試(整數)
ramspeed -b int# RAM 帶寬測試(浮點)
ramspeed -b float

工具選擇建議:

需求類型推薦工具是否需要操作系統
CPU(整數)CoreMark, Dhrystone否 / 任意
CPU(浮點)Linpack否 / 任意
IO 性能IOzone, dd是(Linux)
內存帶寬/延遲RAMspeed是(Linux)
2. CoreMark使用

CoreMark是一個開源的處理器基準測試程序,用于評估處理器的性能。它由EEMBC(Embedded Microprocessor Benchmark Consortium)開發,測試內容包括常見的處理器操作,如整數運算、矩陣操作、狀態機等,通過運行一系列測試并計算總分來衡量處理器性能。

CoreMark的主要特點:

  • 開源免費,代碼簡潔,可移植性強,方便在不同平臺上使用。
  • 測試內容覆蓋常見處理器操作,結果具有一定代表性。
  • 計算量適中,可在各類處理器上運行,從低端單片機到高端應用處理器。
  • 測試結果單位為CoreMark/MHz,便于跨平臺比較。

使用CoreMark基準測試的步驟:

  1. 下載CoreMark源代碼,官網Release Tag of official release v1.01 from 2009 · eembc/coremark。
  2. 根據目標平臺修改配置文件core_portme.h和core_portme.c,配置時鐘頻率、迭代次數、打印選項等,實現三個關鍵函數:開始測試、結束測試和時間計數。
  3. 編譯源文件生成可執行程序。
  4. 運行程序,測試過程中會打印迭代進度。
  5. 測試完成后輸出運行時間、迭代次數和CoreMark得分。

在linux環境下測試比較簡單,修改linux64/core_portme.mak文件即可:

...
# 注釋掉,利用環境變量傳遞編譯器
# CC = gcc
...
# 添加環境變量的CFLAGS
PORT_CFLAGS := -O2 $(CFLAGS)
...
# 添加環境變量的LDFLAGS
LFLAGS_END += $(LDFLAGS) -lrt
...

使用make compile PORT_DIR=linux64直接編譯目標二進制文件,拷貝到設備上運行即可。

root@90cfc5ecd444:~/workspace/packages/coremark-1.01# cat run1.log 
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 14154
Total time (secs): 14.154000
Iterations/Sec   : 28260.562385
Iterations       : 400000
Compiler version : GCC13.3.0
Compiler flags   : -O2 -DPERFORMANCE_RUN=1  -lrt
Memory location  : Please put data memory location here(e.g. code in flash, data on heap etc)
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x65c5
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 28260.562385 / GCC13.3.0 -O2 -DPERFORMANCE_RUN=1  -lrt / Heap

運行參數:CoreMark大小為666字節,運行400000次迭代,編譯器版本為GCC 13.3.0。

編譯器參數為-O2 -DPERFORMANCE_RUN=1 -lrt,其中-O2表示優化等級為2,-DPERFORMANCE_RUN=1表示定義了性能運行宏,啟用了性能測試模式,-lrt表示鏈接了實時庫。內存位置為堆(Heap)。

運行結果:

  • 總計運行了14154個ticks(時鐘周期)。
  • 總運行時間為14.154秒。
  • 每秒迭代次數為28260.562385次。
  • 完成了400000次迭代。
  • CRC校驗結果正確,分別給出了list、matrix、state和final的CRC值。

CoreMark得分為28260.562385,即每兆赫運行28260.562385次迭代。

3. IOzone 使用

IOZone是一個廣泛使用的文件系統基準測試工具,用于測試不同操作系統下文件系統的性能。它可以測試讀、寫、重讀、重寫等多種操作,從而全面評估文件系統的I/O性能。下面介紹如何在嵌入式設備上使用IOZone進行性能測試:

在嵌入式設備上安裝IOZone。可以從官網下載源碼編譯,也可以使用已編譯好的二進制文件。將IOZone拷貝到嵌入式設備的文件系統中。

基本用法是:

iozone -a [-s filesize] [-r recordsize] [-f pathname]
  • -a 自動測試模式,會自行運行全部的測試,也可以通過-i運行指定的測試用例。
  • -s 指定測試文件的大小,單位為KB。建議設置為可用內存的2倍,以免影響結果。
  • -r 指定記錄大小,單位為KB。記錄大小會影響I/O性能。
  • -f 指定測試文件的路徑。

例如:

在這里插入圖片描述

測試參數:記錄大小(Record Size)為16384 kB,即16MB。文件大小(File size)設置為8388608 kB,即8GB。-a 表示自動模式,測試全部操作,-f 指定測試文件路徑,-r 設置記錄大小為16MB,-s 設置文件大小為8GB。

處理器緩存大小設置為1024 kB,處理器緩存行大小設置為32字節,文件Stride大小設置為記錄大小的17倍。

測試結果的單位為kBytes/sec,即每秒傳輸的KB數。每一列代表一項測試指標:

  • write: 1106269 kB/s,順序寫性能。
  • rewrite: 1324957 kB/s,順序重寫性能。
  • read: 1597475 kB/s,順序讀性能。
  • reread: 1599842 kB/s,順序重讀性能。
  • random read: 1782057 kB/s,隨機讀性能。
  • random write: 1361914 kB/s,隨機寫性能。
  • bkwd read: 1678651 kB/s,倒序讀性能。
  • record rewrite: 3534785 kB/s,記錄重寫性能。
  • stride read: 1791199 kB/s,跳躍讀性能。
  • fwrite: 1306302 kB/s,文件寫性能。
  • frewrite: 1272293 kB/s,文件重寫性能。
  • fread: 1620173 kB/s,文件讀性能。
  • freread: 1625551 kB/s,文件重讀性能。

d rewrite: 3534785 kB/s,記錄重寫性能。

  • stride read: 1791199 kB/s,跳躍讀性能。
  • fwrite: 1306302 kB/s,文件寫性能。
  • frewrite: 1272293 kB/s,文件重寫性能。
  • fread: 1620173 kB/s,文件讀性能。
  • freread: 1625551 kB/s,文件重讀性能。

可以看出,該設備順序讀寫性能在1.1-1.5 GB/s左右,隨機讀寫略高一些,達到了1.3~1.7 GB/s。倒序讀和跳躍讀也有接近1.7 GB/s的表現。記錄重寫和文件讀寫的速度也都在1.2 GB/s以上,整體I/O性能表現不錯。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77625.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77625.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77625.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ArrayList的subList的數據仍是集合

ArrayList的subList結果不可強轉成ArrayList,否則會拋出 ClassCastException異常 ? 級別: 【CRITICAL】 ? 規約類型:BUG ? 最壞影響: 程序錯誤,拋出異常 說明:subList 返回的是ArrayList的內部類SubL…

Notepad++中將文檔格式從Windows(CR LF)轉換為Unix(LF)

在Windows中用記事本寫了一個.sh的Linux運行腳本,是無法直接在Linux中執行,需要首先把文本編碼格式轉換為Unix的,特別是換行符這些,轉換步驟如下: 1、打開文檔 在Notepad中打開需要轉換的文件。 2、進入文檔格式轉換…

使用Ingress發布應用程序

使用Ingress發布應用程序 文章目錄 使用Ingress發布應用程序[toc]一、什么是Ingress二、定義Ingress三、什么是Ingress控制器四、部署nginx Ingress控制器1.了解nginx Ingress控制器的部署方式2.安裝nginx Ingress控制器3.本地實際測試 五、使用Ingress對外發布應用程序1.使用D…

【網絡編程】TCP數據流套接字編程

目錄 一. TCP API 二. TCP回顯服務器-客戶端 1. 服務器 2. 客戶端 3. 服務端-客戶端工作流程 4. 服務器優化 TCP數據流套接字編程是一種基于有連接協議的網絡通信方式 一. TCP API 在TCP編程中,主要使用兩個核心類ServerSocket 和 Socket ServerSocket Ser…

力扣刷題Day 21:兩數之和(1)

1.題目描述 2.思路 暴力解法雖然不超時間限制,但是題解實在太妙了,哈希大法好! 3.代碼(Python3) class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hash_table dict()for i, num i…

關于UE5的抗鋸齒和TAA

關于閃爍和不穩定現象的詳細解釋 當您關閉抗鋸齒技術時,場景中會出現嚴重的閃爍和不穩定現象,尤其在有細節紋理和小物體的場景中。這種現象的技術原因如下: 像素采樣問題 在3D渲染中,每個像素只能表示一個顏色值,但…

【MySQL】MySQL建立索引不知道注意什么?

基本原則: 1.選擇性原則: 選擇高選擇性的列建立索引(該列有大量不同的值) 2.適度原則:不是越多越好,每個索引都會增加寫入開銷 列選擇注意事項: 1.常用查詢條件列:WHERE字句中頻繁使用的列 2.連接操作列…

Vue3 + TypeScript中provide和inject的用法示例

基礎寫法&#xff08;類型安全&#xff09; typescript // parent.component.vue import { provide, ref } from vue import type { InjectionKey } from vue// 1. 定義類型化的 InjectionKey const COUNTER_KEY Symbol() as InjectionKey<number> const USER_KEY Sy…

樹莓派超全系列教程文檔--(33)樹莓派啟動選項

樹莓派啟動選項 啟動選項start_file &#xff0c;fixup_filecmdlinekernelarm_64bitramfsfileramfsaddrinitramfsauto_initramfsdisable_poe_fandisable_splashenable_uartforce_eeprom_reados_prefixotg_mode &#xff08;僅限Raspberry Pi 4&#xff09;overlay_prefix配置屬…

java怎么找bug?Arthas原理與實戰指南

Arthas原理與實戰指南 1. Arthas簡介 Arthas是阿里巴巴開源的Java診斷工具&#xff0c;其名字取自《魔獸世界》的人物阿爾薩斯。它面向線上問題定位&#xff0c;被廣泛應用于性能分析、定位問題、安全審計等場景。Arthas的核心價值在于它能夠在不修改應用代碼、不重啟Java進程…

Python自學第1天:變量,打印,類型轉化

突然想學Python了。經過Deepseek的推薦&#xff0c;下載了一個Python3.12安裝。安裝過程請自行搜索。 乖乖從最基礎的學起來&#xff0c;廢話不說了&#xff0c;上鏈接&#xff0c;呃&#xff0c;打錯了&#xff0c;上知識點。 變量的定義 # 定義一個整數類型的變量 age 10#…

基于STM32中斷講解

基于STM32中斷講解 一、NVIC講解 簡介&#xff1a;當一個中斷請求到達時&#xff0c;NVIC會確定其優先級并決定是否應該中斷當前執行的程序&#xff0c;以便及時響應和處理該中斷請求。這種設計有助于提高系統的響應速度和可靠性&#xff0c;特別是在需要處理大量中斷請求的實…

游戲盾和高防ip有什么區別

游戲盾和高防IP都是針對網絡攻擊的防護方案&#xff0c;但??核心目標、技術側重點和應用場景存在顯著差異??。以下是兩者的詳細對比分析&#xff1a; ??一、核心定位與目標?? ??維度????高防IP????游戲盾????核心目標??抵御大流量網絡攻擊&#xff08…

Spark-SQL3

Spark-SQL 一.Spark-SQL核心編程&#xff08;四&#xff09; 1.數據加載與保存&#xff1a; 1&#xff09;通用方式&#xff1a; SparkSQL 提供了通用的保存數據和數據加載的方式。這里的通用指的是使用相同的API&#xff0c;根據不同的參數讀取和保存不同格式的數據&#…

DeepSeek與Napkin:信息可視化領域的創新利器

摘要 在數字化信息爆炸的時代&#xff0c;如何高效地組織思路并將其轉化為直觀、清晰的可視化圖表&#xff0c;成為眾多領域面臨的關鍵問題。本文深入剖析了DeepSeek與Napkin這兩款工具&#xff0c;詳細探討它們在信息處理與可視化過程中的功能特性、協同工作機制、應用場景、…

conda 創建、激活、退出、刪除環境命令

參考博客&#xff1a;Anaconda創建環境、刪除環境、激活環境、退出環境 使用起來覺得有些不方便可以改進&#xff0c;故寫此文。 1. 創建環境 使用 -y 跳過確認 conda create -n 你的環境名 -y 也可以直接選擇特定版本 python 安裝&#xff0c;以 3.10 為例&#xff1a; co…

嵌入式芯片中的 低功耗模式 內容細講

電源域與運行級別概述 電源域&#xff08;Power Domain&#xff09; 核心域&#xff08;Core Domain&#xff09;&#xff1a;包括 CPU 核心和關鍵架構模塊&#xff08;如 NVIC、CPU 內核寄存器&#xff09;。 外設域&#xff08;Peripheral Domain&#xff09;&#xff1a;…

Java中常見的鎖synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock

在Java中&#xff0c;鎖是實現多線程同步的核心機制。不同的鎖適用于不同的場景&#xff0c;理解其實現原理和使用方法對優化性能和避免并發問題至關重要。 一、隱式鎖&#xff1a;synchronized 關鍵字 實現原理 基于對象監視器&#xff08;Monitor&#xff09;&#xff1a;每…

@JsonView + 單一 DTO:如何實現多場景 JSON 字段動態渲染

JsonView 單一 DTO&#xff1a;如何實現多場景 JSON 字段動態渲染 JsonView 單一 DTO&#xff1a;如何實現多場景 JSON 字段動態渲染1、JsonView 注解產生的背景2、為了滿足不同場景下返回對應的屬性的做法有哪些&#xff1f;2.1 最快速的實現則是針對不同場景新建不同的 DTO…

Etcd 壓縮整理

etcd數據存儲 在實際生產中使用 ETCD 存儲元數據&#xff0c;起初集群規模不大的時候元數據信息不多沒有發現什么問題。隨著集群規模越來越大&#xff0c;可能引發存儲問題。 —auto-compaction-retention 由于ETCD數據存儲多版本數據&#xff0c;隨著寫入的主鍵增加歷史版本需…