-Lmbench综合性能测试

Lmbench综合性能测试

hades 61天前 105

介绍

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

 

软件说明

lmbench是个用于评价系统综合性能的多平台开源benchmark,能够测试包括文档读写、内存操作、进程创建销毁开销、网络等性能,测试方法简单。

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

 

LMbench的主要功能

带宽测评工具

  • 读取缓存文件
  • 拷贝内存
  • 读内存
  • 写内存
  • 管道
  • TCP

 

反应时间测评工具

  • 上下文切换
  • 网络: 连接的建立,管道,TCP,UDP和RPC hot potato
  • 文件系统的建立和删除
  • 进程创建
  • 信号处理
  • 上层的系统调用
  • 内存读入反应时间

 

其他

  • 处理器时钟比率计算

 

 

 

测试

1、调频模式设置为performance;

2、配合UOS时,可能存在测试结果显示不全问题,需要修改lmbench-3.0-a9/scripts/getsummary文件;

       $mhz = 0;
       while () {
               chop;
               next if m|scripts/lmbench: /dev/tty|;
               #以下三行新增
               if(/^\[mount:/){
                       next
               }
               
               if (/^\[lmbench/) {
                       $version = -1;

3、make results执行测试。

配置相关参数

# 问题 1 ,MULTIPLE COPIES [default 1]: 1#  对于多路多核心机器,可以并行运行多个 lmbench 实例,但这会大大降低 lmbench 测试速度,约 100 倍#  但要注意,这是个还处于试验阶段的特性,开启后会使许多结果产生未知错误,不建议开启#  原则上可以填核心数目,但并不是必须的,多路并行执行对这个 benchmark 来说并不是必须的。

 

# 问题 2 ,Job placement selection [default 1]: 1#  默认选 1 ,Allow scheduler to place jobs ,允许调度器调度 benchmark 过程中产生的子进程

 

# 问题 3 ,内存消耗 MB [default 366020]: 1024#  默认是 70% 总内存大小,最小不能小于 CPU 全部缓存(L1 L2 L3 cache)的四倍大小,最大不应超过 80% 总内存大小#  内存越大,benchmark 结果越准确,但消耗时间就越长

 

# 问题 4 ,benchmark 项目,SUBSET (ALL|HARWARE|OS|DEVELOPMENT) [default all]: #  默认全部,但如果要得到一个可信的、值得发布的结果,应该选择 ALL ,或者单独一个 OS 或 Hardware 子项目

 

# 问题 5、6、7 可以忽略选默认

 

# 问题 8 ,提供一个用于存放临时文件的目录,FSDIR [default /usr/tmp]: /tmp#  这个目录会存放相当于问题 3 指定内存大小的文件,以及 benchmark 过程中产生的大量临时小文件

 

# 问题 9 ,忽略选默认

 

# 问题 10 ,是否将结果发电子邮件,Mail results [default yes]: no#  设定为不发送电子邮件

 

make see查看测试结果,测试结果保存在results目录下的summary.out文件中,若没有,则执行make see | tee -a lmbench.log保存。

 

结果

系统基本参数

Basic system parameters
------------------------------------------------------------------------------
Host                 OS Description              Mhz  tlb  cache  mem   scal
                                                    pages line   par   load
                                                          bytes
--------- ------------- ----------------------- ---- ----- ----- ------ ----
c-Lenovo- Linux 3.8.13.       i686-pc-linux-gnu 1731    84   128 3.4200    1
  • Tlb pages: 转换后备缓存的页面数;
  • Cache line bytes: 高速缓存行字节数
  • mem par: 存储器分层并行化
  • scal load:并行执行的Lmbench数目

处理器Processor性能【单位:μs,值越小性能越好】

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
--------- ------------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
c-Lenovo- Linux 3.8.13. 1731 0.19 0.36 1.48 3.05 7.60 0.53 2.32 497. 1474 3674
  • null call: 执行getppid需要的时间;
  • null I/O: 从/dev/zero读一个字节的时间长A,写一个字节到/dev/null需要的时间长B,A和B取平均得本值;
  • stat:stat一个文件(即得到一个文件的信息)需用的时间;
  • open close: open一个文件然后再close它总共需用的时间(不包括读目录和节点的时间); selct TCP:通过TCP网络连接选择100个文件描述符所耗用的时间;
  • sig inst: install signal handler所耗用的时间;
  • sig hndl: catch signal 所耗用的时间;
  • fork proc: fork一个完全相同的process,并把原来的process关掉所耗用的时间。
  • exec proc:模拟一个shell进程的工作过程:fork一个新进程执行新命令,所耗用时间。
  • sh proc:模拟最常见情况:fork一个新进程,同时询问系统shell来找到并运行一个新程序所耗用时间。

数学运算【单位:ns,值越小性能越好】

整型:

Basic integer operations - times in nanoseconds - smaller is better
-------------------------------------------------------------------
Host                 OS  intgr intgr  intgr  intgr  intgr
                         bit   add    mul    div    mod
--------- ------------- ------ ------ ------ ------ ------
c-Lenovo- Linux 3.8.13. 0.5800 0.2900 1.1600   13.1   12.0

无符号整形:

Basic uint64 operations - times in nanoseconds - smaller is better
------------------------------------------------------------------
Host                 OS int64  int64  int64  int64  int64
                        bit    add    mul    div    mod
--------- ------------- ------ ------ ------ ------ ------
c-Lenovo- Linux 3.8.13.  1.040        3.7100   33.7   40.0

浮点型:

Basic float operations - times in nanoseconds - smaller is better
-----------------------------------------------------------------
Host                 OS  float  float  float  float
                        add    mul    div    bogo
--------- ------------- ------ ------ ------ ------
c-Lenovo- Linux 3.8.13. 1.1600 2.0300   13.7   13.3

双精度型:

Basic double operations - times in nanoseconds - smaller is better
------------------------------------------------------------------
Host                 OS  double double double double
                        add    mul    div    bogo
--------- ------------- ------  ------ ------ ------
c-Lenovo- Linux 3.8.13. 1.1600 2.3200   13.4   13.3

上下文切换【单位:μs,值越小性能越好】

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
--------- ------------- ------ ------ ------ ------ ------ ------- -------
c-Lenovo- Linux 3.8.13. 3.2100 1.0800 5.1300 4.5200 6.5200    13.0    29.9
  • 多个进程用unix pipe环连接起来,每个进程从自己的管道中读取token,执行任务,然后将token写给下一个进程。
  • context swithing时间包括:切换进程的时间,加上恢复进程所有状态所用时间(包括恢复cache状态)。
  • 2p/0K: 每个进程的size为0(不执行任何任务),进程数为2时上下文切换耗用的时间;
  • 2p/16K:每个进程的size为16K(执行任务),进程数为2时上下文切换耗用的时间;

本地通讯延时【单位:μs,值越小性能越好】

*Local* Communication latencies in microseconds - smaller is better
---------------------------------------------------------------------
Host                 OS 2p/0K  Pipe AF     UDP  RPC/   TCP  RPC/ TCP
                       ctxsw       UNIX         UDP         TCP conn
--------- ------------- ----- ----- ---- ----- ----- ----- ----- ----
c-Lenovo- Linux 3.8.13. 3.210  16.0 12.6  12.9        21.5       103.
  • 2p/0K: 每个进程的size为0(不执行任何任务),进程数为2时上下文切换耗用的时间;
  • Pipe:所谓的hot potato测试:两个没有具体任务的进程用unix pipe通信,一个token在两个进程间来回传递,传递一个来回所耗用的平均时间;
  • AF UNIX:同Pipe,不同的是两个进程采用unix socket通信。
  • UDP:同Pipe,不同的是两个进程采用UDP/IP 通信;
  • RPC/UDP:同Pipe,不同的是两个进程采用sun RPC 通信;默认情况下,RPC通过udp协议传送。
  • TCP:同Pipe,不同的是两个进程采用TCP/IP;
  • RPC/TCP:同Pipe,不同的是两个进程采用sun RPC 通信;指定RPC通过tcp协议传送。
  • TCP conn:创建一个AF_INET (aka TCP/IP)socket,并连接到远程主机所耗用的时间,这个时间仅指创建socket和建立连接本身,不包括解析主机名等等其他动作所用时间。

 

文档、内存延时【单位:μs,值越小越好】

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
--------- ------------- ------ ------ ------ ------ ------- ----- ------- -----
c-Lenovo- Linux 3.8.13.   15.7   13.5   52.8   19.5   35.8K 0.341 3.79810 3.535
  • 0k create: 0k文件创建所花的时间;
  • 0k Delete: 0k文件删除所花的时间;
  • Mmap Latency: 将指定文件的开头n个字节map到内存,然后umap,并记录每次map和umap共耗用的时间;记录的是每次耗用时间的最大值;
  • Prot Fault: 保护页延时时间;
  • Page Fault: 缺页延时时间;
  • 100fd selct: 对100个文档描述符配置select的时间;

本地通信带宽【单位:MB/S,值越大越好】

*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
--------- ------------- ---- ---- ---- ------ ------ ------ ------ ---- -----
c-Lenovo- Linux 3.8.13. 836. 1268 916. 1239.2 2947.9 1298.4 1360.6 2972 1829.
  • Pipe:在两个进程间建立一个unix pipe,pipe的每个chunk为64K,通过该管道移动50M数据所用的时间。
  • AF UNIX:在两个进程间建立一个unix stream socket,每个chunk为64K,通过该socket移动10M数据所用的时间。
  • TCP:同Pipe,不同的是进程间通过TCP/IP socket 通信,传输的数据为3MB;
  • File reread:读文件并把他们汇总起来所用的时间;
  • Mmap reread:将文件map到内存中,从内存中读文件并把他们汇总起来所用的时间;
  • Bcopy(libc): do bw_mem $i bcopy,从指定内存区域拷贝指定数目的字节内容到指定的另一个内存区域的速度;
  • Bcopy(hand):do bw_mem $i fcp,把数据从磁盘上一个位置拷贝到另一个位置所用的时间;
  • Mem read:bw_mem $i frd,累加数组中的整数值,测试把数据读入processor的带宽;
  • Mem write:do bw_mem $i fwr,把整数数组的每个成员设置为1,测试写数据到内存的带宽;

 

 

 

 

最新回复 (0)
返回
发新帖
0