当前位置: 首页 > news >正文

程序性能(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性能表现不错。

相关文章:

  • PointCore——利用局部全局特征的高效无监督点云异常检测器论文与算法解读
  • Redis增删改查
  • 意志力的源头——AMCC(前部中扣带皮层)
  • 3D打印加速产品试制
  • 进程程序替换
  • 【unity游戏开发入门到精通——UGUI】RectTransform矩形变换组件
  • xilinx fpga中pll与mmcm的区别
  • Transformer(李宏毅)
  • 软件测试的页面交互标准:怎样有效提高易用性
  • Docker环境下自动续签Let’s Encrypt SSL证书
  • Alan AI - 面向Web的生成式AI SDK
  • [Windows] Wireshark 网络抓包工具 v4.4.6
  • React 第三十三节 ReactRouter 中 useSearchParams 使用详解及注意事项
  • Multi-Query Attention (MQA) PyTorch 实现
  • 2. ubuntu20.04 和VS Code实现 ros的输出 (C++,Python)
  • JAVA设计模式——(1)适配器模式
  • .gitignore 可能失效的原因
  • 在 Amazon Graviton 上运行大语言模型:CPU 推理性能实测与调优指南
  • XCVU13P-2FHGA2104I Xilinx Virtex UltraScale+ FPGA
  • 基于LSTM-AutoEncoder的心电信号时间序列数据异常检测(PyTorch版)
  • 荣盛发展股东所持1.17亿股将被司法拍卖,起拍价约1.788亿元
  • 国务院任免国家工作人员:颜清辉任人社部副部长
  • 迎接八方来客:全国多地“五一”假期党政机关大院停车场免费开放
  • 李铁案二审今日宣判
  • 暗蓝评《性别打结》丨拆解性别之结需要几步?
  • 西班牙葡萄牙突发全国大停电,欧洲近年来最严重停电事故何以酿成