Linux 嵌入式设备性能测试工具介绍(一)

文摘   科技   2023-12-13 18:00   广东  

点击上方蓝字关注我们

在制作完嵌入式设备的新板,有些情景需要对各个性能进行测试,主要包括

CPU/GPU/Memory/Storage/Ethernet等这些进行测试。
测试对比一般以所用的SoC厂商开发板进行对比,本文将分别介绍几款测试工具【以下所使用的都经过实测】。
  • cpu: i.mx8mq
  • OS:Android 11
  • Kernel version:kernel 5.10
目录:

- CPU测试: nbench

- Memory测试: stream , tinymembench

- Storage测试: dd, hdparm

- Ethernet测试: iperf

1. CPU测试

nbench(也称为 BYTEmark)是一个用于测量计算机性能的基准测试工具。它主要关注计算机的整体性能,包括数值计算、字符串操作、位操作、浮点运算等方面。

1.1 nbench 移植

官网:Linux/Unix nbench 操作系统 (utah.edu)

wget http://www.math.utah.edu/~mayer/linux/nbench-byte-2.2.3.tar.gztar zxvf nbench-byte-2.2.3.tar.gzcd nbench-byte-2.2.3# 设置交叉编译器make CC=/opt/gcc-arm-8.3-2019.03-x86_64-aarch64-linuxgnu/bin/aarch64-linux-gnu-gcc# 将生成nbench 放入至设备中运行

1.2 nbench 使用结果分析

图1.1 nbench 测试

evk_8mq:/data # ./nbench
BYTEmark* Native Mode Benchmark ver. 2 (10/95)Index-split by Andrew D. Balsa (11/97)Linux/Unix* port by Uwe F. Mayer (12/96,11/97)
TEST : Iterations/sec. : Old Index : New Index : : Pentium 90* : AMD K6/233*--------------------:------------------:-------------:------------NUMERIC SORT : 559.52 : 14.35 : 4.71 # 数值排序STRING SORT : 146.2 : 65.33 : 10.11 # 字符串排序BITFIELD : 2.163e+08 : 37.10 : 7.75 # 位域操作FP EMULATION : 209.24 : 100.40 : 23.17 # 浮点数模拟FOURIER : 13697 : 15.58 : 8.75 # 傅里叶变换ASSIGNMENT : 10.486 : 39.90 : 10.35 # 赋值操作IDEA : 3119.5 : 47.71 : 14.17 # IDEA 算法测试HUFFMAN : 982.61 : 27.25 : 8.70 # Huffman 编码测试NEURAL NET

2. Memory 测试

tinymembench 是一个用于评估内存性能的轻量级测试工具。它的设计目标是提供一个简单但可靠的方式来测量系统内存的基本性能指标,例如内存带宽和访问延迟。

git clone https://github.com/ssvb/tinymembench.gitcd tinymembench
# 根据readme信息#Example of crosscompiling and running the benchmark on android device:# $ CC=arm-linux-gnueabihf-gcc CFLAGS="-O2 -mcpu=cortex-a8 -static" make# $ adb push tinymembench /data/local/tmp/tinymembench# $ adb shell /data/local/tmp/tinymembench
CC=/opt/gcc-arm-8.3-2019.03-x86_64-aarch64-linuxgnu/bin/aarch64-linux-gnu-gcc CFLAGS="-O2 -mcpu=cortex-a53 -static" make

在这里需要注意选择CPU的架构,如何查询,可以通过

cat /proc/cpuinfo# 重点查看 CPU part  这里展示一部分processor       : 3BogoMIPS        : 16.66Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuidCPU implementer : 0x41CPU architecture: 8CPU variant     : 0x0CPU part        : 0xd03 #关键CPU revision    : 4

3. Storage测试

3.1 hdparm 工具

# 源码下载wget https://zenlayer.dl.sourceforge.net/project/hdparm/hdparm/hdparm-9.56.tar.gztar zxvf hdparm-9.56.tar.gzcd hdparm-9.56.tar.gzmake LDFLAGS="-static" CC=/opt/gcc-arm-8.3-2019.03-x86_64-aarch64-linuxgnu/bin/aarch64-linux-gnu-gcc# adb push device

但是在Android 有些错误,后续跟踪,但在Ubuntu系统使用正常。

3.2 dd工具

使用 dd 命令是一种简单而直接的方法来测试 存储性能。可以通过调整命令参数以及观察执行结果来获得关于读写速度的信息。

写入速度

dd if=/dev/zero of=/mnt/sdcard/testfile bs=1M count=100

读取速度

dd if=/mnt/sdcard/testfile of=/dev/null bs=1M

4. Ethernet 测试

对于网络测试这个应该不陌生了,使用iperf,这里需要注意的问题是iperf有iperf2和iperf3,这两个是不要混用,客户端和服务器需要采用同一个版本。

4.1 iperf3编译

weget https://iperf.fr/download/source/iperf-3.1.3-source.tar.gztar zxvf iperf-3.1.3-source.tar.gz# 这里需要注意的是,对于iperf3 使用的tmpw文件路径需要修改# 看下面修改具体情况,修改完毕后编译mkdir $PWD/_install ./configure --prefix=$PWD/_install  CC=/opt/gcc-arm-8.3-2019.03-x86_64-aarch64-linuxgnu/bin/aarch64-linux-gnu-gcc LDFLAGS=-static  AR=/opt/gcc-arm-8.3-2019.03-x86_64-aarch64-linuxgnu/bin/aarch64-linux-gnu-armake LDFLAGS="-static"
方法一修改:
src/iperf_api.c:2667:  
char buf[] = "/tmp/iperf3.XXXXXX";
vim src/iperf_api.c
修改:char buf[] = "/tmp/iperf3.XXXXXX";
改为:
char buf[] = "/data/local/tmp/iperf3.XXXXXX"
如果不修改就会出现以下情况,如图4.1。

图4.1 iperf3 error

方法二修改:
对于Android 源码中分析,其实可以直接添加环境变量:
evk_8mq:/data # export TMPDIR=/data/local/tmp

4.2 iperf3 测试

嵌入式设备端启动客户端模式:

iperf3 -c 192.168.150.102 -t 5

电脑端启动服务器模式

iperf3 -s

5. 总结

本文章主要对CPU/GPU/Memory/Storage/Ethernet的工具简单介绍,不过还有很多其他的工具这里不再一一介绍,以上所提工具都一一动手测试过,对于工具寻找适合就行,有很多厂商自带测试工具,下一章节将对CPU压力测试,GPU压力测试等 进行测试。

往期回顾:
Linux 内核调试工具Printk介绍
Linux 内核调试工具devmem介绍
Linux 外设屏幕背光介绍
Linux I2C通用接口介绍(二)
Linux I2C通用接口介绍(二)
Linux I2C通信接口介绍(一)
Linux SPI 通信接口介绍(二)

有兴趣添加微信群交流


码思途远
一位码农的日常分享,探索软件技术知识与新闻的数字十字路口。