zoukankan      html  css  js  c++  java
  • 嵌入式系统的性能测试(1) – lmbench篇

    要评价一个系统的性能,通常有不同的指标,相应的会有不同的测试方法和测试工具。既有比较成熟的商业测试软件,也有许多优秀的开源工具来完成这个任务。本文简要介绍如何使用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的内容。编译完成后,会在lmbench3in目录下生成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

  • 相关阅读:
    微信 token ticket jsapi_ticket access_token 获取 getAccessToken get_jsapi_ticket方法
    PHP 日志 记录 函数 支持 数组 对象 新浪 sae 环境 去掉 空格 换行 格式化 输出 数组转字符串
    原生 原始 PHP连接MySQL 代码 参考mysqli pdo
    PHP 数字金额转换成中文大写金额的函数 数字转中文
    使用PHPMailer发送带附件并支持HTML内容的邮件
    设置输出编码格式 header 重定向 执行时间 set_time_limit 错误 报告 级别 error_reporting
    html5 bootstrap pannel table 协议 公告 声明 文书 模板
    指向指针的指针
    二级指针
    c语言:当指针成为参数后
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/11276926.html
Copyright © 2011-2022 走看看