ARM Linux BenchMark
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的更多相关文章
- ARM Linux Qt 5.x.x 无标题栏
/********************************************************************************* * ARM Linux Qt 5. ...
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS
上一篇我们已经成功将 ARM Linux 4.7.3 的内核利用 U-BOOT 引导了起来.但是细心的你会发现,引导到后面,系统无法启动,出现内核恐慌 (Kernel Panic). 原因是找不到文件 ...
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel
经过若干天的反复测试,搜索.终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核.如下详细解释整个构建过程. 准备环境 运行环境:Ubuntu 16.04 需要的虚拟 ...
- ARM Linux 3.x的设备树(Device Tree)
http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1. ...
- ARM Linux启动代码分析
前言 在学习.分析之前首先要弄明白一个问题:为什么要分析启动代码? 因为启动代码绝大部分都是用汇编语言写的,对于没学过或者不熟悉汇编语言的同学确实有一定难度,但是如果你想真正深入地学习Linux,那么 ...
- 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 ...
- ARM Linux从Bootloader、kernel到filesystem启动流程
转自:http://www.veryarm.com/1491.html ARM Linux启动流程大致为:bootloader ---->kernel---->root filesyste ...
- 【转】 ARM Linux 3.x的设备树(Device Tree)
1. ARM Device Tree起源 http://blog.csdn.net/21cnbao/article/details/8457546 Linus Torvalds在2011年3月1 ...
- arm linux kernel 从入口到start_kernel 的代码分析
参考资料: <ARM体系结构与编程> <嵌入式Linux应用开发完全手册> Linux_Memory_Address_Mapping http://www.chinaunix. ...
随机推荐
- 5分钟让你知道什么是PKI
转:https://www.cnblogs.com/jerain6312/p/8572841.html 前言 Public Key Infrastructure(PKI),中文叫做公开密钥基础设施,也 ...
- AMD - Learning JavaScript Design Patterns [Book] - O'Reilly
AMD - Learning JavaScript Design Patterns [Book] - O'Reilly The overall goal for the Asynchronous Mo ...
- 用 MuGo 搭建 Go Engine 在 KGS 对战
MuGo 是一个开源的 Go Engine,下棋能力大概在 10k - 2k 左右. 用 MuGo 搭建 Go Engine 并在 KGS 对战的步骤如下: 1. 安装 TensorFlow 因为 M ...
- First-order logic
w https://en.wikipedia.org/wiki/First-order_logic
- MyBatis系列:一、入门
MyBatis无需我介绍,本系列文章是纯干货,没有一点废话. 1.创建一个maven项目,引入mysql的驱动和mybatis的maven引用 <dependency> <group ...
- kafka consumer 自动提交 offset
org.apache.kafka.clients.consumer.KafkaConsumer#pollOnce private Map<TopicPartition, List<Cons ...
- Delphi XE2 之 FireMonkey 入门(19) - TFmxObject 的子类们(表)
参考: 和 FMX 相关的类(表) TFmxObject IFreeNotification TAnimation TBitmapAnimation TBi ...
- 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第4节 模拟BS服务器案例_2_模拟BS服务器代码实现
这三行代码是固定的在输出之前 浏览器再次访问这个页面. 图片没有显示出来 复制刚才的代码一份出来重命名 加个while循环.把代码都放进去. 然后在while里面开启一个线程.把读取的代码都放在线程里 ...
- Jmeter之HTTP请求图片上传功能
在现在很多功能都存在图片上传,所以简单说明一下使用jmeter进行图片上传. 界面显示并说明 添加一个HTTP请求的取样器 1.获取上传图片的接口,配置路径和参数 2.在HTTP请求中,Impleme ...
- 【MM系列】SAP MM模块-组织结构介绍
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-组织结构介绍 ...