一、引言
要评价一个系统的性能,通常有不同的指标,相应的会有不同的测试方法和测试工
具,一般来说为了确保测试结果的公平和权威性,会选用比较成熟的商业测试软件。但在特定情形下,只是想要简单比较不同系统或比较一些函数库性能时,也能够
从开源世界里选用一些优秀的工具来完成这个任务,本文就通过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'
技术参数
参数说明
(1)Basic system parameters(系统基本参数)
Tlb pages:TLB(Translation Lookaside Buffer)的页面数
Cache line bytes :(cache的行字节数)
Mem par
memory hierarchy parallelism
Scal load:并行的lmbench数
(2)Processor, 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再退出
(3)Basic integer/float/double operations
略
(4)Context switching 上下文切换时间
2p/16K: 表示2个并行处理16K大小的数据
(5)*Local* Communication latencies(本地通信延时,通过不同通信方式发送后自己立即读)
Pipe:管道通信
AF UNIX
Unix协议
UDP
UDP
RPC/UDP
TCP
RPC/TCP
TCP conn
TCP建立connect并关闭描述字
(6)File & 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:内存写
(8)Memory latencies(内存操作延时)
L1:缓存1
L2:缓存2
Main Mem:连续内存
Rand Mem:内存随机访问延时
Guesses
假如L1和L2近似,会显示“No L1 cache?”
假如L2和Main Mem近似,会显示“No L2 cache?”
参考网站:http://blog.chinaunix.net/space.php?uid=21961753&do=blog&id=1810645
阅读(1915) | 评论(0) | 转发(0) |