http://tonyho.github.io/ARM%20Linux%20BenchMark.html

1.背景说明

许多公司有很多不同的ARM SoC的研发产品,ARM核心可能有Cortex-A8/A9/A15,核心数可能有单核双核和四核.现在,几乎每出一款手机,网络上马上就有人对其评测.对比和评测不同ARM SoC 芯片以及嵌入式系统是非常有必要的;通过不同的SoC和其运行的OS对比,可以帮助我们了解我们产品的性能,并根据测试得知系统的瓶颈、找出需要改善的方面。

嵌入式产品的硬件一般都是由处理器、主存、存储器、显示设备、以及其他外设组成。嵌入式产品的软件方面,一般都选用嵌入式系统,如小的RTOS,如VxWorks、μC/OS-III、RTT、DJYOS、FreeRTOSLinux,或者是更复杂的Linux、Android、WinCE。评测和对比的内容一般也主要由软件和硬件这两个方面组成。

2.预备基础知识

如果只是对Andorid系统或者是WinCE相关系统评测,那么我们完全可以下载一些应用(安装)运行即可评测。而如果要评测的嵌入式系统是基于Linux自己定制的甚至没有GUI的,则很可能需要我们下载源代码编译。因此对基础的编译知识的了解必不可少①。编译配置又与ARM SoC构架相关,所以需要了解一下与ARM构架以及有关的交叉编译的选项,比较ARM SoC种类较少,所以这类问题变得很简单了,一般我们需要根据需要配置-mfpu-march以及-mfloat-abi,以及编译优化选项。

3.评测工具介绍

评测工具有很多,在这个网页列出了几十个工具。单单系统性评测工具就有7个。那什么是系统性的BenchMark(引用自unixbench):

Do be aware that this is a system benchmark, not a CPU, RAM or disk benchmark. The results will depend not only on your hardware, but on your operating system, libraries, and even compiler.

系统测试

用得比较广的系统性测试工具:

  • lmbench④
  • UnixBench

这两个BenchMark软件,本身是给PC上的Linux上用的,为了给嵌入式开发板子使用,需要交叉编译。和其他嵌入式程序编译一样,一般Makefile要改的只有两个地方:

  • CC:指定为嵌入式交叉编译器
  • CFLAGS:需要根据目标板ARM芯片配置②

一些单项测试工具:

将系统测试里面的每个测试项拆开就成了单项测试,一般分为计算性能③,内存性能,图形显示。

有一点需要说明的是:在linux启动过程中会打印BogoMIPS不一定准确。这方面可以参考ARM官方的说明,使用Dhrystone,当然现在在计算能力测试方面,现在大家可能更认可CoreMark和CPU2006,而不是Dhrystone。

一些外设的测试:

SD/eMMC可以使用dd命令来测试,例如一个读写的测试命令示例:

Read: sync && date && dd if=/dev/block/mmcblk0 of=/dev/null bs=4094 count=40960 && sync && date
Write:sync && date && dd of=/dev/block/mmcblk0 if=/dev/zero bs=4094 count=40960 && sync && date

使用date只能精确到秒,但是使用time命令可以精确到0.01S,所以用time更好,但是time只接受一个process作为参数。因此,需要将dd与sync整条命令放入到脚本中,再用time来运行这个脚本。

4.测试结果分析

如果就拿单单一个光秃秃的数据来看,会显得有些空白,所以一般用不同的板子数据进行对比来看。在lmbench中,就可以将测试结果拷贝到result中的对应OS目录中,再用make see,产生summary.out文件。其他的测试软件也有类似的功能,对于测试结果,我们需要做的是通过分析测试结果找到系统中性能与理论相差太大的不正常项目,然后去分析可能的原因并寻求解决之道。


①可以看AnTuTu and Intel这篇文章,里面提到了安兔兔对ICC编译器对Intel处理器的优化,ARM这边却连neon也没有使用。同时另一篇文章说到了安兔兔在版本变高后,评分下降的issue。

②关于编译选项,可以man gcc,搜索对应的选项来查看详细内容。给出一个CLFAGS示例: 其中这些参数可以在kernel启动后使用cat /proc/cpuinfo查看Arch架构。

③关于计算方面的测试,有一个不错的文档ARM Cortex-A8 vs. Intel Atom:,里面介绍了4中测试Integer和Float的工具,并用这些工具对Atom和Beagle Bone板子进行的测试比较和说明。另外Keil的这个网页上对这些测试程序和Item也有一些介绍。

④编译与运行可以参考这个网页的文章,需要根据直接的板子SoC更改CFLAGS。

http://bbs.51testing.com/thread-1163336-1-1.html

在新项目需要选择一个全新的基于ARM嵌入式处理器平台的时候,难免会需要对新平台的性能进行评估,这时候有
几种思路可以进行参考,

一是ARM芯片厂家发布的性能指标,不过大多数是基于理论情况;

二是购买同样平台的开
发板移植应用进行实测,效果最直接但是可能需要花费较大精力和时间;

那么这个时候也可以考虑使用针对性的benchmark软件在目标平台上面进行性能测试,算是一个折衷的方法,其结果有一定参考意义但由于影响benchm
ark软件结果的因素不仅仅是硬件本身,还有不同的BSP以及软件设定等,因此在这些设定一致性越大的前提下其结果的参考意义才越大,否则很可能结果不是预期想要的甚至南辕北辙.

基于上面思路,本文统一采用Toradex工业产品等级 ARM计算机模块以及其官方发布的最新版Linux BSPV2.5Beta
3最为测试基准平台,同时将对结果影响比较大的CPU主频和显示输出分辨率尽可能保持一致来进行测试,测试样
本分别是基于NVIDIA Tegra2的Colibri T20 512M, 基于NXP i.MX6DL 的Colibri i.MX6DL 512M以及基于NXP Vybrid
的Colibri VF61 256M;其中前两个均为双核Cortex-A9 ARM核心,第三个为Cortex-A5和M4异构双核核心,不过这里
只测试A5.

1). 本文涉及的硬件平台测试项目及工具如下

a). 硬件平台

上述三种接口兼容的Colibri ARM 计算机模块以及一块Colibri Eva Board

b). 测试项目及对应工具

- CPU测试: nbench

- Memory测试: stream

- Storage测试: dd, hdparm

- Ethernet测试: iperf

- CPU压力测试: stress

- GPU压力测试: glmark2

ARM Linux BenchMark的更多相关文章

  1. ARM Linux Qt 5.x.x 无标题栏

    /********************************************************************************* * ARM Linux Qt 5. ...

  2. 构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS

    上一篇我们已经成功将 ARM Linux 4.7.3 的内核利用 U-BOOT 引导了起来.但是细心的你会发现,引导到后面,系统无法启动,出现内核恐慌 (Kernel Panic). 原因是找不到文件 ...

  3. 构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel

    经过若干天的反复测试,搜索.终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核.如下详细解释整个构建过程. 准备环境 运行环境:Ubuntu 16.04 需要的虚拟 ...

  4. ARM Linux 3.x的设备树(Device Tree)

    http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1.     ...

  5. ARM Linux启动代码分析

    前言 在学习.分析之前首先要弄明白一个问题:为什么要分析启动代码? 因为启动代码绝大部分都是用汇编语言写的,对于没学过或者不熟悉汇编语言的同学确实有一定难度,但是如果你想真正深入地学习Linux,那么 ...

  6. ARM Linux 3.x的设备树(Device Tree)

    1. ARM Device Tree起源 Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pai ...

  7. ARM Linux从Bootloader、kernel到filesystem启动流程

    转自:http://www.veryarm.com/1491.html ARM Linux启动流程大致为:bootloader ---->kernel---->root filesyste ...

  8. 【转】 ARM Linux 3.x的设备树(Device Tree)

    1.    ARM Device Tree起源 http://blog.csdn.net/21cnbao/article/details/8457546 Linus Torvalds在2011年3月1 ...

  9. arm linux kernel 从入口到start_kernel 的代码分析

    参考资料: <ARM体系结构与编程> <嵌入式Linux应用开发完全手册> Linux_Memory_Address_Mapping http://www.chinaunix. ...

随机推荐

  1. 你还没搞懂this?

    一.前言 this关键字是JavaScript中最复杂的机制之一.它是一个很特别的关键字,被自动定义在所有函数的作用域中.对于那些没有投入时间学习this机制的JavaScript开发者来说,this ...

  2. 使用eclipse导入新项目时中文出现乱码问题

    有时候在github上看到别人不错的项目想要拉下来学习学习的时候,总会出现这样的情况,实在蛋疼. 一般出现这种问题,会有三个地方需要改动: 在项目上右键选择 properties 将 text fil ...

  3. SecureCRT上传、下载文件 使用rz【上传】& sz【下载】命令

    首先安装:apt-get install lrzsz SecureCRT这款SSH客户端软件同时具备了终端仿真器和文件传输功能.比ftp命令方便多了,而且服务器不用再开FTP服务了.rz,sz是便是L ...

  4. DAY 6 TEST

    test T1 样例输入 样例输出 答案选择u,v作为关键点 暴力的话k^2枚举跑最短路,寻找最小值就行了 50pts 考虑优化枚举量 因为答案的两个点是不同的点,所以编号的二进制表示中至少一位不同 ...

  5. 【LeetCode】 两数之和 twoSum

    两数之和 (简单) 题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数: 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 例如: 给定 nums = [2,7,11, ...

  6. Tensorflow | 基本函数介绍 简单详细的教程。 有用, 很棒

     http://blog.csdn.net/xxzhangx/article/details/54606040 Tensorflow | 基本函数介绍 2017-01-18 23:04 1404人阅读 ...

  7. Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍

    Shell中的特殊字符有 1.$ 美元符 2.\ 反斜杠 3.` 反引号 4." 双引号 5.< ,>;,*,?,[,] 下面我一一举列说明 一.$符号 1.echo $? 显示 ...

  8. struts2 基础5 OGNL、标签、四大域、默认拦截器说明

    OGNL表达式 OGNL:对象导抗图语言 OGNL表达式是一个上下文的概念,上下文Map结构 OGNL表达式需要使用#标注命名空间.访问上下文(Context)中的对象需要使用#符号标注命名空间,如# ...

  9. idea 社区版本创建javaweb项目 使用jetty

    idea社区版本 创建javaweb项目后使用jetty启动 <dependencies> <dependency> <groupId>javax.servlet& ...

  10. Makefile project

    1 Makefile里出现IDF_PATH,所以要在工程属性里的environment环境变量添加IDF_PATH,对其解释,指出路径. 2  项目中用了shell文本,如果用Python 语言,要确 ...