Lmbench 是一款简易可以移植的内存测试工具,其主要功能有,带宽测评(读取缓存文件、拷贝内存、读/写内存、管道、TCP),延时测评(上下文切换、网络、文件系统的建立和删除、进程创建、信号处理、上层系统调用、内存读入反应时间)等功能。
官网地址:http://www.bitmover.com/lmbench/
下载连接:lmbench-3.0
imaginemiracle:Downloads$ unzip lmbench-3.0-a9.zip 需要注意的是,目前解压出的 lmbench 中所有文件都不可被执行,当直接执行 make 编译后将会看到类似有 Permission denied 等一系列错误。
这里首先需要更改所有文件的权限:
imaginemiracle:Downloads$ sudo chmod 777 -R lmbench-3.0-a9/ 进入 lmbench 目录,其目录结构如下。
imaginemiracle:Downloads$ cd lmbench-3.0-a9/ imaginemiracle:lmbench-3.0-a9$ ls ACKNOWLEDGEMENTS CHANGES COPYING doc Makefile results src bin ChangeSet COPYING-2 hbench-REBUTTAL README scripts 执行 make results,执行后将会有以下选项提示需要设置:
scal load 项;1,表示允许作业调度;1;4 倍的 cache size,该值越大结果越精确,同时运行时间越长;ALL / HARWARE / OS / DEVELOPMENT,默认选 all;设置完成后测试程序开始运行,需要注意运行时间较久,需耐心等待,或先做其他事情至少 10 min 后再看。
执行 make see 查看运行结果,若只出现两行命令,显示运行结果输出到了 summary.out 文件中,则直接查看该文件即可。cat ./results/summary.out。
将会看到如下输出:

输出结果中开始显示系统的基本参数信息。
其中:
Lmbench 数目。如下输出结果单位均为 us,数值越小表示性能越好。
getppid 需要的时间;/dev/zero 读取一个字节的时长 t1,写一个字节到 /dev/null 的时长 t2,t1、t2 取平均值即为该项结果;stat 一个文件(即得到一个文件的信息)所需时长;open 一个文件接着再 close 掉该文件一共所用时间(不包含读目录和节点的时间);TCP 网络连接选择 100 个文件描述符所消耗的时间;install signal 所耗时长;handler signal 所耗时长;fork 一个完全相同的 process,并把原来的 process 关掉一共所消耗的时间;shell 进程的工作过程:fork 一个新进程执行新命令消耗的时间。fork 一个进程,同时询问系统 shell 来找到并运行一个新程序所用时间。如下输出结果单位均为 ns,数值越小表示性能越好。
(1) 整型计算

(2) 无符号整型计算

(3) 浮点型计算

(4) 双精度浮点型计算

如下输出结果单位均为 us,数值越小表示性能越好。

多个进程用 unix pipe 环连接起来,每个进程从自己的管道中读取 token,执行任务,然后将 token 写给下一个进程。
context swithing 时间包括:切换进程的时间,加上恢复进程所有状态所用的时间(包含恢复 cache 状态)。
size 为 0(不执行任何任务),进程数为 2 时上下文切换所消耗的时间;size 为 16K(执行任务),进程数为 2 时上下文切换所消耗的时间;之后的测试项以此类推。
如下输出结果单位均为 us,数值越小表示性能越好。

size 为 0(不执行任何任务),进程数为 2 时上下文切换所消耗的时间;hot potato 测试,两个没有具体任务的进程之间使用 pipe 通信,一个 token 在两个进程间来回传递,传递一个来回所消耗时长的平均值;Pipe 测试项,但进程间通信使用的是 socket 通信;Pipe 测试项,但进程间通信使用的是 UDP/IP 通信;Pipe 测试项,但进程间通信使用的是 sun RPC 通信,默认情况下,RPC 采用 UDP 协议传输;Pipe 测试项,但进程间通信使用的是 TCP/IP 通信;Pipe 测试项,但进程间通信使用的是 sun RPC 通信,指定 RPC 采用 TCP 协议传输;socket 描述符和建立连接所用时间。如下输出结果单位均为 us,数值越小表示性能越好。

0K 文件创建所用时间;0K 文件删除所用时间;10K 文件创建所用时间;10K 文件删除所用时间;n 个字节 mmap 到内存,然后 unmap,并记录每次 mmap 和 unmap 共消耗的时间,去每次消耗时间的最大值;100 个文件描述符配置 select 的时间。如下输出结果单位均为 MB/s,数值越大表示性能越好。

pipe,pipe 的每个 chunk 为 64K,通过该管道移动 50MB 数据所消耗的时间;unix stream socket 连接,每个 chunk 为 64K,通过该 socket 传输 10MB 数据所用的时间;Pipe 测试项,但进程间使用 TCP/IP socket 通信,传输数据量为 3MB;mmap 到内存中,从内存中读文件并将其汇总一起所用时间;do bw_mem $i bcopy,从指定内存区域拷贝指定数量的字节内容到另一个指定内存区域的速度;do bw_mem %i fcp,把数据从磁盘的一个位置拷贝到另一个位置所用的时间;bw_mem $i frd,累加数组中的整数值,测试把数据读入 processor 的带宽;do bw_mem $i fwr,把整数数组的每个成员设置为 1,测试写数据到内存的带宽。如下输出结果单位均为 ns,数值越小表示性能越好。

本地测试执行 lat_mem_rd,将整数数组中每第 4 个元素的值累加起来;测试的是读数据到 processor 的带宽。
L1 和 L2 近似,会显示 “No L1 cache?”L2 和 Main Mem 近似,会显示 “No L2 cache?”下一篇:服务器硬件以及RAID配置