程序性能(1)嵌入式基准测试工具

news2025/4/20 18:31:33

程序性能(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.coloradmin.cn/o/2338906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM MCP模型上下文协议快速入门(for Java)

什么是MCP Model Control Protocol(MCP)是由AI研究机构Anthropic在2023年第二季度首次提出的新型协议规范,旨在解决大语言模型LLM应用中的上下文管理难题。作为LLM交互领域的创新标准,MCP协议在发布后短短一年内已进行了多次更新…

支持向量机(SVM):原理、应用与深入解析

内容摘要 本文深入探讨支持向量机(SVM)。阐述其作为分类算法在小样本、非线性及高维模式识别中的优势,详细介绍SVM基本概念、能解决的问题、核函数作用、对偶问题引入及常见核函数等内容,同时分析其优缺点,并与逻辑回…

chapter32_SpringMVC与DispatcherServlet

一、简介 从本章节开始进入SpringMVC的学习,SpringMVC最重要的类就是DispatcherServlet DispatcherServlet的本质是一个Servlet,回顾一下Servlet JavaWeb就是基于Servlet的Servlet接口有5个方法Servlet实现类是HttpServlet,自定义的Servle…

spring security解析

Spring Security 中文文档 :: Spring Security Reference 1. 密码存储 最早是明文存储,但是攻击者获得数据库的数据后就能得到用户密码。 于是将密码单向hash后存储,然后攻击者利用彩虹表(算法高级(23)-彩虹表&…

STM32单片机C语言

1、stdint.h简介 stdint.h 是从 C99 中引进的一个标准 C 库的文件 路径:D:\MDK5.34\ARM\ARMCC\include 大家都统一使用一样的标准,这样方便移植 配置MDK支持C99 位操作 如何给寄存器某个值赋值 举个例子:uint32_t temp 0; 宏定义 带参…

多模态融合(十一): SwinFusion——武汉大学马佳义团队(二)

目录 一.摘要 二. Introduction 三. Related Work A. 特定任务图像融合方法 B. 通用图像融合方法 C. 视觉 Transformer 四.方法 A. 整体框架 B. 损失函数 C.解析 1. 整体框架 2. 特征提取 3. 注意力引导的跨域融合 五. 实验结果与讨论 A. 实验配置 B. 实现…

IDEA202403常用快捷键【持续更新】

文章目录 一、全局搜索二、美化格式三、替换四、Git提交五、代码移动六、调试运行 在使用IDEA进行程序开发,快捷键会让这个过程更加酸爽,下面记录各种快捷键的功能。 一、全局搜索 快捷键功能说明Shift Shift全局搜索Ctrl N搜索Java类 二、美化格式 …

从 LabelImg 到 Label Studio!AI 数据标注神器升级,Web 版真香

视频讲解: 从 LabelImg 到 Label Studio!AI 数据标注神器升级,Web 版真香 Label Studio 支持图像、文本、音频、视频、时间序列等多类型数据标注,覆盖计算机视觉(目标检测、语义分割)、自然语言处理&#x…

【ESP32】ESP-IDF开发 | 低功耗蓝牙开发 | GAP协议 + 设备扫描例程

1. 简介 1.1 GAP协议 GAP(General Access Protocol),全称通用访问协议,它定义了低功耗蓝牙设备的发现流程,设备管理和设备连接的建立。 低功耗蓝牙设备定义了4种角色: 广播者(Broadcaster&…

网络开发基础(游戏)之 Socket API

Socket简介 Socket (套接字)是网络编程的基础,在 C# 中通过 System.Net.Sockets 命名空间提供了一套完整的 API 来实现网络通信。 网络上的两个程序通过一个双向的通信连接实现数据交换, 这个连接的一端称为一个Socket。 一个Socket包含了进行网络通信必…

行为审计软件:企业合规与内部监控的数字守门人

在当今高度数字化的商业环境中,企业运营产生的电子数据呈指数级增长,员工行为也日益复杂多样。行为审计软件应运而生,成为现代企业管理不可或缺的工具。这类软件通过系统化记录、分析和报告组织内部用户活动,帮助企业管理风险、确…

bat脚本转换为EXE应用程序文件

很多时候,我们使用电脑时会编辑bat脚本文件 很多时候,我们制作的玩笑,病毒也会使用这个格式. 但这个格式也有很多缺点 1,如果是需要管理员运行的程序,需要费劲的自己使用管理员身份运行 2,文件并不为大家所熟知,认同度不高 3,可以非常轻松的看到原代…

细说STM32单片机FreeRTOS任务管理API函数vTaskList()的使用方法

目录 一、函数vTaskList() 1、 函数说明 2、返回的字符串表格说明 3、函数的使用方法 二、 vTaskList()的应用示例 1、示例功能、项目设置 2、软件设计 (1)main.c (2)freertos.c (3)FreeRTOSConf…

DNS主从同步

安装软件 主配置中完成DNS解析:192.168.131.134 [rootlocalhost ~]# mount /dev/sr0 /mnt [rootlocalhost ~]# vim /etc/yum.repos.d/myrepo.repo [base] namebase baseurl/mnt/BaseOS gpgchcek0 enable1 [base2] namebase2 baseurl/mnt/AppStream gpgchcek0 enab…

双指针算法(部分例题解析)

快慢指针左右指针 前言 双指针,它通过设置两个指针来遍历数据,从而实现高效的查找、排序、去重等操作。双指针算法的核心在于通过合理地移动这两个指针,减少不必要的遍历,提高算法的效率。 283. 移动零 - 力扣(LeetCo…

解决Windows打印问题的集成软件

家里或公司电脑经常为连不上打印机而烦恼,今天给大家推荐一款修复打印工具,该工具是采用易语言开发的集成化打印机故障修复软件,专为解决 Windows 系统(含 32/64 位 Windows 7/10/11)中因权限配置、服务异常、补丁缺失…

警惕阿里云中的yum update操作不当导致:/sbin/init被清空导致Linux无法正常启动

由于使用阿里云进行部署测试,因而会对yum update进行操作,这两天更新了systemd-239-82.0.3.4.al8.2.x86_64,但存在报错,然后进行yum history undo和清空yum cache,但出现操作Linux命令行无效。具体来说,几个…

关系型数据库MYSQL(续)

目录 三.MySQL事务原理分析 1.事务是什么? 2.执行事务的目的是什么? 3.事务是由什么组成的? 4.事务的特征是什么? 5.事务控制语句 6.ACID特性 6.1原子性(A) 6.2隔离性(I) …

WInform当今技术特性分析

Windows Forms (WinForms) 技术特性分析 引言 Windows Forms (WinForms) 作为微软最早推出的基于.NET的图形用户界面开发框架,已经存在了20多年。在如今充满了各种现代UI框架的软件开发生态系统中,WinForms仍然保持着其独特的地位。本文将深入分析WinF…

运筹学之模拟退火

目录 一、历史二、精髓思想三、案例与代码实现 一、历史 问:谁在什么时候提出模拟退火?答:模拟退火算法(Simulated Annealing,SA)是由斯图尔特柯尔斯基(Scott Kirkpatrick) 等人在 …