1、 Lmbench 工具1.工具介绍:Lmbench 用于测试 OS 提供的基本系统调用的性能,主要衡量两个关键特征:反应时间和带宽。LMbench 的主要功能:带宽测评工具:读取缓存文件、拷贝内存、读内存、写内存、管道、TCP。延时测评工具:上下文切换、网络(连接的建立,管道,TCP,UDP 和 RPC hot potato) 、文件系统的建立和删除、进程创建、信号处理、上层的系统调用、内存读入反应时间 。其 他:处理器时钟比率计算。2.安装与使用1、 解压工具包#tar zxvf lmbench-3.0-a9.tgz#cd lmbench-3.0-a92、 删除可能存在的编译文件和编译结果:
2、#ls results | grep vi Makefile | rm rf#make clean3、 配置运行一次:#make results配置相关参数MULTIPLE COPIES,同时运行并行测试数量,对应为结果中的 scal load 项Job placement selection,作业调度控制方法,选 1 允许作业调度Options to control job placement,选择 1Memory,设置为略大于 4 倍的 cache size,值越大结果越精确,运行时间越长SUBSE,所要运行的子集,包括 ALL/HARWARE/OS/DEVELOPMENTEmail 最好
3、选择 no 避免太长时间其余选项保持默认即可4、 写入结果并查看:#make see5、 再次运行:#make rerun 不必重新配置3.结果分析测试结果包含主机各种测试的速度或者延迟,单位-微秒。3.1. 系统基本参数Basic system parameters-Host OS Description Mhz tlb cache mem scalpages line par loadbytes- - - - - - - -c-Lenovo- Linux 3.8.13. i686-pc-linux-gnu 1731 84 128 3.4200 1Tlb pages: 转换后备缓存的页面数;
4、Cache line bytes: 高速缓存行字节数mem par: 存储器分层并行化scal load:并行执行的 Lmbench 数目3.2. 处理器 Processor 性能【单位:s ,值越小性能越好】Processor, Processes - times in microseconds - smaller is better-Host OS Mhz null null open slct sig sig fork exec shcall I/O stat clos TCP inst hndl proc proc proc- - - - - - - - - - - - -c-Leno
5、vo- Linux 3.8.13. 1731 0.19 0.36 1.48 3.05 7.60 0.53 2.32 497. 1474 3674null 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
6、 signal handler所耗用的时间;sig hndl: catch signal 所耗用的时间;fork proc: fork一个完全相同的process,并把原来的process关掉所耗用的时间。exec proc:模拟一个shell进程的工作过程:fork一个新进程执行新命令,所耗用时间。sh proc:模拟最常见情况:fork一个新进程,同时询问系统shell来找到并运行一个新程序所耗用时间。3.3. 数学运算【单位:ns,值越小性能越好 】整型:Basic integer operations - times in nanoseconds - smaller is better
7、-Host OS intgr intgr intgr intgr intgrbit 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 int64bit add mul div mod- - - - - - -c-Lenovo- Linux 3.8.13. 1.040 3.71
8、00 33.7 40.0浮点型:Basic float operations - times in nanoseconds - smaller is better-Host OS float float float floatadd 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 doubleadd mu
9、l div bogo- - - - - -c-Lenovo- Linux 3.8.13. 1.1600 2.3200 13.4 13.33.4. 上下文切换【单位:s,值越小性能越好 】Context switching - times in microseconds - smaller is better-Host OS 2p/0K 2p/16K 2p/64K 8p/16K 8p/64K 16p/16K 16p/64Kctxsw ctxsw ctxsw ctxsw ctxsw ctxsw ctxsw- - - - - - - - -c-Lenovo- Linux 3.8.13. 3.2100
10、 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 时上下文切换耗用的时间;3.5. 本地通讯延时【单位:s,值越小性能越好 】*Local* Co
11、mmunication latencies in microseconds - smaller is better-Host OS 2p/0K Pipe AF UDP RPC/ TCP RPC/ TCPctxsw 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 通信,一个
12、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,并连接到远程主机所
13、耗用的时间,这个时间仅指创建 socket 和建立连接本身,不包括解析主机名等等其他动作所用时间。3.6. 文档、内存延时【单位:s,值越小越好 】File & VM system latencies in microseconds - smaller is better-Host OS 0K File 10K File Mmap Prot Page 100fdCreate Delete Create Delete Latency Fault Fault selct- - - - - - - - - -c-Lenovo- Linux 3.8.13. 15.7 13.5 52.8 19.5 35
14、.8K 0.341 3.79810 3.5350k create: 0k 文件创建所花的时间;0k Delete: 0k 文件删除所花的时间;Mmap Latency: 将指定文件的开头 n 个字节 map 到内存,然后 umap,并记录每次 map 和 umap共耗用的时间;记录的是每次耗用时间的最大值;Prot Fault: 保护页延时时间;Page Fault: 缺页延时时间;100fd selct: 对 100 个文档描述符配置 select 的时间;3.7. 本地通信带宽【单位:MB/S,值越大越好 】*Local* Communication bandwidths in MB/s
15、- bigger is better-Host OS Pipe AF TCP File Mmap Bcopy Bcopy Mem MemUNIX 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 s
16、ocket,每个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
17、,累加数组中的整数值,测试把数据读入processor的带宽;Mem write:do bw_mem $i fwr,把整数数组的每个成员设置为1,测试写数据到内存的带宽;3.8. 内存操作延时【单位:ns,值越小性能越好 】Memory latencies in nanoseconds - smaller is better(WARNING - may not be correct, check graphs)-Host OS Mhz L1 $ L2 $ Main mem Rand mem Guesses- - - - - - - -c-Lenovo- Linux 3.8.13. 1731 2
18、.3130 11.6 55.6 194.6本测试执行lat_mem_rd,将整数数组每第4个元素的值累加起来;测试的是读数据到processor的带宽。如果测试配置为:执行快速测试,则本测试只测128M内存的情况,否则,将分别测试16 32 64 128 256 512 1024M的情况。测试结果:读输出结果中以stride=128 开头的段,段中两个字段单位为megabytes, megabytes_per_second;L1 $:输出结果中以 stride=128 开头的段中,首字段(size)为 0.00098 行的第二字段;L2 $:输出结果中以 stride=128 开头的段中,首字
19、段(size)为 0.12500行的第二字段;Main mem:最后行的第二字段值;Rand mem:系统内存随机访问操作延时;Guesses:判断前面得到的L1和L2值差值占其中最大值的百分比,如果大于20%,且L2和Main mem差值占其中最大值的百分比小于20%,则输出”No L2 cache“ ;否则,判断L1和L2差距与其中最大值的百分比,如果小于20%,则输出”No L1 cache“;否则什么也不输出。4.其他系统对比【从数据看,不同系统无可比性】处理器 Processor 性能测试:时间 -微秒交换上下文性能测试:时间-微秒本地通信延迟,单位-微秒,如下:文件虚拟系统延迟的测试,如下图所示:本地通信带宽的测试,单位-MB/s,如下图所示:内存延迟测试,单位-奈秒,如下图所示: