Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1522482
  • 博文数量: 290
  • 博客积分: 3468
  • 博客等级: 中校
  • 技术积分: 3461
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-28 22:21
文章分类

全部博文(290)

文章存档

2016年(13)

2015年(3)

2014年(42)

2013年(67)

2012年(90)

2011年(75)

分类: 嵌入式

2012-01-04 18:56:43

一、引言

要评价一个系统的性能,通常有不同的指标,相应的会有不同的测试方法和测试工 具,一般来说为了确保测试结果的公平和权威性,会选用比较成熟的商业测试软件。但在特定情形下,只是想要简单比较不同系统或比较一些函数库性能时,也能够 从开源世界里选用一些优秀的工具来完成这个任务,本文就通过lmbench 简要介绍系统综合性能测试。

二、测试软件

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

软件说明:
lmbench是个用于评价系统综合性能的多平台开源benchmark,能够测试包括文档读写、内存操作、进程创建销毁开销、网络等性能,测试方法简单。
Lmbench 是个多平台软件,因此能够对同级别的系统进行比较测试,反映不同系统的优劣势,通过选择不同的库函数我们就能够比较库函数的性能;更为重要的是,作为一个 开源软件,lmbench提供一个测试框架,假如测试者对测试项目有更高的测试需要,能够通过少量的修改源代码达到目的(比如现在只能评测进程创建、终止 的性能和进程转换的开销,通过修改部分代码即可实现线程级别的性能测试)。
下载:
,最新版本3.0-a9

LMbench的主要功能:
*带宽测评工具
         —读取缓存文件
          —拷贝内存
          —读内存
          —写内存
          —管道
          —TCP
    * 反应时间测评工具
          —上下文切换
          —网络: 连接的建立,管道,TCP,UDP和RPC hot potato
          —文件系统的建立和删除
          —进程创建
          —信号处理
          —上层的系统调用
          —内存读入反应时间
    * 其他
          —处理器时钟比率计算
 
LMbench的主要特性:
—对于操作系统的可移植性测试
评测工具是由C语言编写的,具有较好的可移植性(尽管它们更易于被GCC编译)。这对于产生系统间逐一明细的对比结果是有用的。
 
—自适应调整
Lmbench对于应激性行为是非常有用的。当遇到BloatOS比所有竞争者慢4倍的情况时,这个工具会将资源进行分配来修正这个问题。
 
— 数据库计算结果
  数据库的计算结果包括了从大多数主流的计算机工作站制造商上的运行结果。
 
—存储器延迟计算结果
   存储器延迟测试展示了所有系统(数据)的缓存延迟,例如一级,二级和三级缓存,还有内存和TLB表的未命中延迟。另外,缓存的大小可以被正确划分成一些结果集并被读出。硬件族与上面的描述相象。这种测评工具已经找到了操作系统分页策略的中的一些错误。
 
—上下文转换计算结果
   很多人好象喜欢上下文转换的数量。这种测评工具并不是特别注重仅仅引用“在缓存中”的数量。它时常在进程数量和大小间进行变化,并且在当前内容不在缓存中的时候,将结果以一种对用户可见的方式进行划分。您也可以得到冷缓存上下文切换的实际开销。
 
 — 回归测试
   Sun公司和SGI公司已经使用这种测评工具以寻找和补救存在于性能上的问题。
   Intel公司在开发P6的过程中,使用了它们。
   Linux在Linux的性能调整中使用了它们。
 
 
— 新的测评工具
   源代码是比较小的,可读并且容易扩展。它可以按常规组合成不同的形式以测试其他内容。举例来说,如包括处理连接建立的库函数的网络测量,服务器关闭等

三、测试

在此次测试中我分两种测试,一个是在我的pc机上测试的,一个是在loonson 1B平台上测试的:
(1)     在pc机上的测试
测试平台:x86,ubuntu10.04
1、  确认安装了C编译器,假如没有需要先安装
2、  拷贝lmbench源码文档lmbench-3.0-a9.tgz到ubuntu的/root/test目录下,解压到当前目录即可
3、  cd lmbench-3.0-a9,在命令行键入make results即可开始编译测试
4、  假 如编译没有错误,会出现一些选择提示以对测试进行一个配置并生成配置脚本,后续的测试将使用该配置脚本,在以后测试中也能够直接使用同样的配置多次测试。 配置提示除了测试的内存范围(如“MB [default 371]”时,对内存较大的应该避免选择太大值,否则测试时间会很长)和是否Mail results外,基本上都能够选择缺省值。
5、  Lmbench根据配置文档执行任何测试项,在results目录下根据系统类型、系统名和操作系统类型等生成一个子目录,测试结果文档(system name+序号)存放于该目录下。
6、  测试完毕执行make see可查看到测试结果报告,则可以将测试数据/results/i686-pc-linux-gnu/目录下的文件导出为测试报告/results/summary.out文件,我们查看summary.out文件就可以看测试结果了。

(2)    在loongson1B上的测试
测试平台:Loongson1B, Linux 2.6.21
1、  确认宿主机上安装了交叉编译编译器mipsel-linux-gcc,假如没有需要先安装
2、 拷贝lmbench源码lmbench-3.0-a9.tgz到ubuntu的/home/loongson目录下,解压到当前目录即可
3、  cd lmbench-3.0-a9,在命令行键入make CC=mipsel-linu-gcc OS=mipsel-linux 即可开始编译测试用例,编译完成后,会在/home/loongson/lmbench-3.0-a9/bin下出现一个mipsel-linux目录, 在这个目录下就 是测试用例的目标文件。由于我们的目标平台(1b开发板)不支持make命令,所以我们必须另外写一个运行脚本,脚步名为run_all.sh,放在 scripts下 面,内容是:
#!/bin/sh
echo run the lmbench on Loongson1B
env OS=mipsel-linux ./config-run
env OS=mipsel-linux ./results

若系统不认识 env 命令,则可以改为如下命令
#!/bin/sh
echo run the lmbench on Loongson1B
export  OS=mipsel-linux
./config-run
export  OS=mipsel-linux
./results


4、  然后将整个lmbench-3.0-a9目录拷贝到1B开发板的根目录下面,然后进入1B开发板的串口终端,在/lmbench-3.0-a9/scripts下面执行./run_all.sh
假如交叉编译没有错误,会出现一些选择提示以对测试进行一个配置并生成配置脚本,后续的测试将使用该配置脚本,在以后测试中也能够直接使用同样 的配置多次测试。配置提示除了测试的内存范围(如“MB [default 19]”时,对内存较大的应该避免选择太大值,否则测试时间会很长)和是否Mail results外,基本上都能够选择缺省值。
5、  Lmbench根据配置文档执行任何测试项,在results目录下根据系统类型、系统名和操作系统类型等生成一个子目录,测试结果文档(system name+序号)存放于该目录下。
6、  测 试完毕执行,然后从1B开发板将lmbench-3.0-a9目录复制到pc机上任意目录中,然后进入此目录(我的是在:/home/loongson /lmbench-3.0-a9) 键入make see命令可生成测试结果报告,它可以将测试数据/results/mipsel-linux/目录下的文件导出为测试报告/results /summary.out文件,我们查看summary.out文件就可以看测试结果了。

 
四、关于测试结果及说明


make[1]: Entering directory `/nfs/lmbench-3.0-a9/results'

                 L M B E N C H  3 . 0   S U M M A R Y
                 ------------------------------------
         (Alpha software, do not distribute)

Basic system parameters
------------------------------------------------------------------------------
Host                 OS Description              Mhz  tlb  cache  mem   scal
                                                     pages line   par   load
                                                           bytes 
--------- ------------- ----------------------- ---- ----- ----- ------ ----
jz_4750   Linux 2.6.24.            mipsel-linux  381     8    32 1.0200    1
jz_4750   Linux 2.6.24.            mipsel-linux  381     8    32 1.0000    1
Loongson- Linux 2.6.21.            mipsel-linux  254                       1
Loongson- Linux 2.6.18.            mipsel-linux         25    32 1.0000    1
Loongson- Linux 2.6.18.            mipsel-linux         26    32 1.0000    1

Processor, Processes - times in microseconds - smaller is better
------------------------------------------------------------------------------
Host                 OS  Mhz null null      open slct sig  sig  fork exec sh 
                             call  I/O stat clos TCP  inst hndl proc proc proc
--------- ------------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
jz_4750   Linux 2.6.24.  381 0.62 1.65 13.8 24.1      2.05 17.2 1796 6818 19.K
jz_4750   Linux 2.6.24.  381 0.62 1.65 13.7 24.1      2.05 16.5 1766 6777 18.K
Loongson- Linux 2.6.21.  254 0.69 1.78 80.3 149.      3.60 63.2 5184 19.K 30.K
Loongson- Linux 2.6.18.    0 0.95 4.87 26.2 60.6      4.02 28.1 3054 15.K 23.K
Loongson- Linux 2.6.18.    0 0.95 4.87 25.7 61.5      4.03 27.3 3071 14.K 22.K

Basic integer operations - times in nanoseconds - smaller is better
-------------------------------------------------------------------
Host                 OS  intgr intgr  intgr  intgr  intgr 
                          bit   add    mul    div    mod  
--------- ------------- ------ ------ ------ ------ ------
jz_4750   Linux 2.6.24. 2.6500 2.8700 1.9600   94.8   44.4
jz_4750   Linux 2.6.24. 2.6300 2.8700 1.9600   94.8   44.4
Loongson- Linux 2.6.21. 3.9400 3.9600 1.5000   73.5   43.8
Loongson- Linux 2.6.18. 4.0400 4.4700 1.8300  142.0  150.4
Loongson- Linux 2.6.18. 4.0500 4.4600 1.8300  142.3  150.4

Basic uint64 operations - times in nanoseconds - smaller is better
------------------------------------------------------------------
Host                 OS int64  int64  int64  int64  int64 
                         bit    add    mul    div    mod  
--------- ------------- ------ ------ ------ ------ ------
jz_4750   Linux 2.6.24.  5.320        7.1800  547.4  466.0
jz_4750   Linux 2.6.24.  5.280        7.1800  547.5  462.5
Loongson- Linux 2.6.21.  4.010        3.8900  429.7  370.3
Loongson- Linux 2.6.18.  8.180        8.1400  937.4  889.3
Loongson- Linux 2.6.18.  8.200        8.1200  940.2  888.8

Basic float operations - times in nanoseconds - smaller is better
-----------------------------------------------------------------
Host                 OS  float  float  float  float
                         add    mul    div    bogo
--------- ------------- ------ ------ ------ ------
jz_4750   Linux 2.6.24. 1303.0 1282.6 2061.1 7076.0
jz_4750   Linux 2.6.24. 1303.3 1282.4 2061.8 7060.0
Loongson- Linux 2.6.21. 5311.1 5305.8 7902.5  33.6K
Loongson- Linux 2.6.18. 2559.1 2573.1 3882.1  13.9K
Loongson- Linux 2.6.18. 2565.3 2577.4 3880.0  14.0K

Basic double operations - times in nanoseconds - smaller is better
------------------------------------------------------------------
Host                 OS  double double double double
                         add    mul    div    bogo
--------- ------------- ------  ------ ------ ------
jz_4750   Linux 2.6.24. 1430.4 1647.1 5139.0  12.1K
jz_4750   Linux 2.6.24. 1430.4 1647.1 5140.0  12.1K
Loongson- Linux 2.6.21. 2120.2 2795.9 7237.1  35.7K
Loongson- Linux 2.6.18. 2698.5 2820.2 8616.7  21.6K
Loongson- Linux 2.6.18. 2695.2 2825.0 8648.3  21.6K

Context switching - times in microseconds - smaller is better
-------------------------------------------------------------------------
Host                 OS  2p/0K 2p/16K 2p/64K 8p/16K 8p/64K 16p/16K 16p/64K
                         ctxsw  ctxsw  ctxsw ctxsw  ctxsw   ctxsw   ctxsw
--------- ------------- ------ ------ ------ ------ ------ ------- -------
jz_4750   Linux 2.6.24.   23.5   77.2   45.9   83.2   53.6    84.8    56.5
jz_4750   Linux 2.6.24.   27.0   75.4   46.8   81.3   55.9    83.5    57.4
Loongson- Linux 2.6.21.   45.4   81.2   68.7  101.7  100.7   106.0    90.0
Loongson- Linux 2.6.18.   11.7   40.0   50.8   53.4   54.9    57.7    54.8
Loongson- Linux 2.6.18.   13.4   41.0   51.8   53.2   63.2    56.3    54.5

*Local* Communication latencies in microseconds - smaller is better
---------------------------------------------------------------------
Host                 OS 2p/0K  Pipe AF     UDP  RPC/   TCP  RPC/ TCP
                        ctxsw       UNIX         UDP         TCP conn
--------- ------------- ----- ----- ---- ----- ----- ----- ----- ----
jz_4750   Linux 2.6.24.  23.5  67.3 104.                            
jz_4750   Linux 2.6.24.  27.0  70.9 94.1                            
Loongson- Linux 2.6.21.  45.4 182.4 374.                            
Loongson- Linux 2.6.18.  11.7  72.7 181.                            
Loongson- Linux 2.6.18.  13.4  71.9 197.                            

*Remote* Communication latencies in microseconds - smaller is better
---------------------------------------------------------------------
Host                 OS   UDP  RPC/  TCP   RPC/ TCP
                               UDP         TCP  conn
--------- ------------- ----- ----- ----- ----- ----
jz_4750   Linux 2.6.24.                            
jz_4750   Linux 2.6.24.                            
Loongson- Linux 2.6.21.                            
Loongson- Linux 2.6.18.                            
Loongson- Linux 2.6.18.                            

File & VM system latencies in microseconds - smaller is better
-------------------------------------------------------------------------------
Host                 OS   0K File      10K File     Mmap    Prot   Page   100fd
                        Create Delete Create Delete Latency Fault  Fault  selct
--------- ------------- ------ ------ ------ ------ ------- ----- ------- -----
jz_4750   Linux 2.6.24. 2145.9 5848.0  11.1K 2958.6  1114.0 2.923 7.20180  36.8
jz_4750   Linux 2.6.24. 1845.0 5714.3  11.2K 2985.1  1109.0 3.032 7.18550  36.8
Loongson- Linux 2.6.21.  242.5  143.2  674.3  222.6  2756.0 6.306    23.1  31.0
Loongson- Linux 2.6.18.  110.9   57.0  540.5  130.6  1239.0 6.143 9.93180  72.4
Loongson- Linux 2.6.18.  112.4   54.2  533.3  128.8  1244.0 4.225 9.81310  70.6

*Local* Communication bandwidths in MB/s - bigger is better
-----------------------------------------------------------------------------
Host                OS  Pipe AF    TCP  File   Mmap  Bcopy  Bcopy  Mem   Mem
                             UNIX      reread reread (libc) (hand) read write
--------- ------------- ---- ---- ---- ------ ------ ------ ------ ---- -----
jz_4750   Linux 2.6.24. 32.1 31.8        47.3  155.6   66.3   67.7 154. 100.3
jz_4750   Linux 2.6.24. 32.1 31.8        46.9  155.7   67.4   67.1 154. 103.2
Loongson- Linux 2.6.21. 25.5 20.1        35.6   92.4   64.5   61.3 92.5 191.2
Loongson- Linux 2.6.18. 24.1 21.9        34.6  109.7   52.8   54.2 112.  96.0
Loongson- Linux 2.6.18. 24.0 21.9        34.6  109.5   52.8   54.1 112.  95.9

Memory latencies in nanoseconds - smaller is better
    (WARNING - may not be correct, check graphs)
------------------------------------------------------------------------------
Host                 OS   Mhz   L1 $   L2 $    Main mem    Rand mem    Guesses
--------- -------------   ---   ----   ----    --------    --------    -------
jz_4750   Linux 2.6.24.   381   10.6  142.9       153.5       406.4    No L2 cache?
jz_4750   Linux 2.6.24.   381   10.6  142.9       153.4       406.7    No L2 cache?
Loongson- Linux 2.6.21.   254 7.7750  313.2       316.5       836.6    No L2 cache?
Loongson- Linux 2.6.18.     0   12.7  258.5       263.0       567.0    No L2 cache?
Loongson- Linux 2.6.18.     0   12.7  258.5       263.0       567.9    No L2 cache?
make[1]: Leaving directory `
/nfs/lmbench-3.0-a9/results'

技术参数
参数说明
1Basic system parameters(系统基本参数)
Tlb pages:TLB
Translation Lookaside Buffer)的页面数
Cache line bytes
:(cache的行字节数)
Mem par
memory hierarchy parallelism
Scal load
:并行的lmbench
2Processor, Processes(处理器、进程操作时间)
Null call
:简单系统调用(取进程号)
Null I/O
:简单IO操作(空读写的平均)
Stat
:取文档状态的操作
Open clos
:打开然后立即关闭关闭文档操作
Slct tcp
Select
:配置
Sig inst
:配置信号
Sig hndl
:捕获处理信号
Fork proc
Fork进程后直接退出
Exec proc
Fork后执行execve调用再退出
Sh proc
Fork后执行shell再退出
3Basic integer/float/double operations


4Context switching 上下文切换时间
2p/16K
表示2个并行处理16K大小的数据

5*Local* Communication latencies(本地通信延时,通过不同通信方式发送后自己立即读)
Pipe
:管道通信
AF UNIX
Unix
协议
UDP
UDP
RPC/UDP
TCP
RPC/TCP
TCP conn
TCP
建立connect并关闭描述字
6File & VM system latencies(文档、内存延时)
File Create & Delete
:创建并删除文档
MMap Latency
:内存映射
Prot Fault
Protect fault
Page Fault
:缺页
100fd selct
:对100个文档描述符配置select的时间
7*Local* Communication bandwidths(本地通信带宽)
Pipe
:管道操作
AF UNIX
Unix
协议
TCP
TCP
通信
File reread
:文档重复读
MMap reread
:内存映射重复读
Bcopy(libc)
:内存拷贝
Bcopy(hand)
:内存拷贝
Mem read
:内存读
Mem write
:内存写
8Memory latencies(内存操作延时)
L1
:缓存1
L
2:缓存2
Main Mem
:连续内存
Rand Mem
:内存随机访问延时
Guesses
假如L1L2近似,会显示“No L1 cache?”
假如L2Main Mem近似,会显示“No L2 cache?”

参考网站:http://blog.chinaunix.net/space.php?uid=21961753&do=blog&id=1810645

阅读(1860) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~