要评价一个系统的性能,通常有不同的指标,相应的会有不同的测试方法和测试工具。既有比较成熟的商业测试软件,也有许多优秀的开源工具来完成这个任务。本文简要介绍如何使用lmbench来完成系统综合性能测试。

Lmbench用C语言编写的,是一套具有较好可移植性的,简易的,符合ANSI/C标准为UNIX/POSIX而制定的微型测评工具。一般来说,它衡量两个关键特征:反应时间和带宽。Lmbench旨在使系统开发者深入了解系统关键操作的基础成本。

Lmbench是个多平台软件,因此能够对同级别的系统进行比较测试,反映不同系统的优劣,通过选择不同的库函数我们就能够比较库函数的性能;更为重要的是,作为一个开源软件,lmbench提供一个测试框架,假如测试者对测试项目有更高的测试需要,能够通过少量的修改源代码达到目的(比如现在只能评测进程创建、终止的性能和进程转换的开销,通过修改部分代码即可实现线程级别的性能测试)。

lmbench是一个用于评价系统综合性能的软件,主要测试内容包括:

*存储器延迟计算结果

—存储器延迟测试展示了所有系统(数据)的缓存延迟,包括L1/L2 cache以及主内存

*带宽测评工具

—读取缓存文件

—拷贝内存

—读内存

—写内存

—管道

—TCP

*反应时间测评工具

—上下文切换

—网络: 连接的建立,管道,TCP,UDP和RPC hot potato

—文件系统的建立和删除

—进程创建

—信号处理

—上层的系统调用

—内存读入反应时间

* 其他

—处理器时钟比率计算

Lmbench的测试内容有很多,实在是benchmarking领域的“瑞士军刀”啊。

Lmbench的成功应用案例包括:

Sun公司和SGI公司已经使用这种测评工具以寻找和补救存在于性能上的问题。

Intel公司在开发P6的过程中,使用了它们。

Linux在Linux的性能优化中使用了它们。

1. 下载:

Lmbench当前的最新版本为3.0。

lmbench的主站:

http://www.bitmover.com/lmbench/

lmbench 3版本的下载链接:

http://www.bitmover.com/lmbench/lmbench3.tar.gz

2. 编译:

下载解压后运行make build后会出现以下错误:

make[2]: *** No rule to make target `../SCCS/s.ChangeSet', needed by `bk.ver'.  Stop.

make[2]: Leaving directory `/home/wave/xilinx/lmbench3/src'

make[1]: *** [lmbench] Error 2

make[1]: Leaving directory `/home/wave/xilinx/lmbench3/src'

make: *** [build] Error 2

问题来源:

SCCS是Sun的版本管理工具。lmbench这个项目是Sun资助的,而且作者Larry McVoy也曾经是Sun的员工,就用了这玩艺。

解决办法1:

修改src/Makefile,将231行的bk.ver去掉就可以了。编译完成后在bin下有benchmarking需要的的binary。

解决办法2:

在lmbench3/SCCS目录下创建一个工程要的文件s.ChangeSet,骗过make。

交叉编译:

本人在Xilinx ZC706开发板上尝试用PetaLinux 2013.04附带的交叉编译工具链进行了编译,可以在lmbench3目录下使用以下命令完成编译:

make OS=armv7l-linux-gnu CC=arm-xilinx-linux-gnueabi-gcc AR=arm-xilinx-linux-gnueabi-ar build

如果使用其他pre-built的交叉编译工具,需要修改CC和AR的内容。编译完成后,会在lmbench3\bin目录下生成OS指定的目录,可执行文件放在这个目录下。这个OS名称适用于ZC706开发板,在其他嵌入式开发板上可能会不同。一个简单的工程上取得合适名字的办法:如果不是这个名字,在下一步配置完成后会提示无法保存配置文件到某个位置,看系统提示修改就好了。

注意:使用PetaLinux 2013.04交叉编译工具链之前,要先’source settings.sh’初始化环境变量。

3. 配置:

把Host上编译好的lmbench转移到嵌入式Linux中有很多种办法,本人采用以下办法:

在Host上把lmbench3目录打成一个tar ball,然后拷贝到SD卡中,嵌入式Linux从SD卡启动。

Linux启动后,将SD卡mount到文件系统中:

mount /dev/mmcblk0p1 /mnt

在嵌入式Linux中创建临时文件系统,这里假定开发者是用root帐号登录到Linux的:

mkdir -p /home/root/ramfs

mount -t ramfs none /home/root/ramfs -o maxsize=32768

Note:缺省情况下,Ramfs被限制最多可使用内存大小的一半。可以通过maxsize(以kbyte为单位)选项来改变。

用以下命令启动配置过程:

cd /home/root/ramfs

tar xvf /mnt/lmbench3.tar

export PATH=$PATH:/home/root/ramfs/lmbench3/bin/armv7l-linux-gnu

cd lmbench3/scripts

./config-run

本人使用的配置为:

MULTIPLE COPIES [default 1]: 1

Job placement selection [default 1]: 1 > Allow scheduler to place jobs

MB [default 84]: 8

SUBSET (ALL|HARWARE|OS|DEVELOPMENT) [default all]: all

FASTMEM [default no]: yes

SLOWFS [default no]:

DISKS [default none]

REMOTE [default none]

Processor mhz [default 498 MHz, 2.0080 nanosec clock] 733

FSDIR [default /tmp]

Status output file [default /dev/tty]

Mail results [default yes] no

关于测试项的解释:

1. 在多核CPU上并行多少个lmbench。作者说这个目前还是实验性质的,结果可能不正确并有随机性。更重要的是,整个benchmark的速度会变得非常慢(100倍)。既然这样,当然用缺省的数值1了。

2. 测试任务的分配方式。按回车选择缺省的方案1。

3. 有些测试需要一段内存。内存至少是cache size的4倍,最大不超过物理内存的80%。内存越大,测试的结果越准确,不过需要的时间也越长。

4. 选择测试项目。分别是全部测试、硬件测试、OS测试和操作系统开发阶段的测试。缺省选择为全部测试。

5. 内存延迟测试。测试需要的时间可能比较长。在cache line size超过128字节并希望确定cache line size的时候比较有用。

6. 测试文件系统的延迟。在一些老的文件系统(UFS, FFS等)上会比较慢,在Linux ext2fs和Sun tmpfs上会比较快。可以用来测试ramdisk的性能,间接测试RAM的性能。

7. 测试磁盘的性能。需要提供磁盘的位置,例如:/dev/sda。同时需要提供一行磁盘的文字描述。

8. 网络测试。需要有另外一台中间不经过网关的机器,需要rsh访问权限。

9. 软件会自动分析CPU的工作频率。如果软件无法检测,需要提供CPU的工作频率。

10. 需要一个位置保存临时文件。要求不能是内存驻留文件系统。

11. lmbench的输出设备。缺省为/dev/tty,在大多数场合都适用。

12. 是否将结果上传给作者。

4. 运行

首先要确认Embedded Linux已经配置了合适的hostname,这个hostname将作为测试结果raw文件的文件名。

用以下命令开始性能测试:

./results

在本人的计算机上,大约运行了9分钟后结束。生成的结果在lmbench3/results/$OS目录里面。

如果Embedded Linux root fs里面有perl,可以直接在开发板上看测试结果的summary。如果没有也不打紧,可以把生成的测试结果raw文件拷贝到host上,在host上生成summary。

./getsummary ./zynq.0

Summary是对测试结果的高度精简。如果感兴趣,开发者可以用Text Editor打开测试结果raw文件,找到更多更细致的有用信息。

==END==

http://xilinx.eetop.cn/?action-viewnews-itemid-1569

最新文章

  1. cocos2d-x打飞机实例总结
  2. SSH--1
  3. SpringMvc简单实例
  4. lamp环境编译(apache2.4.7 php5.4.25 mysql 5.5.23)
  5. 用CorelDRAW勾画对象轮廓图的方法
  6. PHP基础语法3
  7. SVN中trunk,branches,tags用法详解
  8. CodeForces 610D Vika and Segments
  9. 关于combotree的用法总结
  10. JS非空验证及邮箱验证
  11. Zigbee技术开发一 设置NV_RESTORE
  12. 20175204 张湲祯 2018-2019-2《Java程序设计》
  13. 关于http协议的一些笔记
  14. QT QLabelde 使用技巧总结
  15. linux-shell-引用-命令替换-命令退出状态-逻辑操作符
  16. 3.7 C++派生类构造函数调用规则
  17. 分页插件 PageHelper
  18. 001_fpm打包命令详解
  19. windows下用nginx配置https服务器
  20. excel 鼠标上下左右移动

热门文章

  1. 如何将word内容粘贴到富文本编辑器里面
  2. [转]Html.DropDownList()的用法 ( Asp.Net MVC)
  3. centos 无界面安装selenium+chrome+chromedirver的设置
  4. 1208D Restore Permutation
  5. DB-MD:MD/主数据
  6. day36—javascript对表格table的操作应用(一)
  7. day32—CSS多列布局学习
  8. Vagrant 官网文档翻译汇总
  9. SAT算法
  10. C#的一般处理程序中Cookie的写入、读取、清除