一、lmbench的编译与安装
1.1 获取lmbench源码
开源工具lmbench可以进行对系统进行多项性能测试,如任务切换、IO、内存等等。可以从http://www.bitmover.com/lmbench/get_lmbench.html下载工具包源码lmbench3.tar.bz2,下载后解压为lmbench3/目录,测试工具源码及框架都在这里。
1.2 编译、安装与测试
1.2.1 编译
在编译前我们需要修改lmbench/src/Makefile文件,不然会编译失败。修改如下:
将
$O/lmbench : ../scripts/lmbench bk.ver
改为
$O/lmbench : ../scripts/lmbenc
1)本地编译
进入到lmbench3/目录,执行:
make OS=$OS build
即可。
编译完成后生成的文件都放在 lmbench3/bin/$OS 这个目录下,$OS的值我们可以自己指定。
默认情况下“$OS”的值与编译lmbench时的环境有关:OS="${MACHINE}-${SYSTEM}"。其中MACHINE则是编译lmbench工具时的机器名称,即用“uname -m”取得;SYSTEM表示我们的操作系统,可以通过“uname -s”拼接而成。
2)交叉编译
以arm单板为例进行说明。执行如下编译命令:
make OS=$OS CC=xxxx/arm-linux-gnueabi-gcc AR=xxxx/arm-linux-gnueabi-ar build
这里的OS含义与设置方法与1)相同,编译后生成的文件也都在lmbench3/bin/$OS 目录下。
1.2.2 改造与安装
1)改造
编译完成后会在 lmbench3/bin/$OS目录下生成一个lmbench文件,这个文件包含了所有的测试条目。在某些情况下,我们只想只想测试、关注特定的项目,这时可以通过修改此文件,去掉我们不需要测试的项目即可。
2)安装
编译完成后,我们只需要将lmbench3/ 整个目录放到我们的测试环境机器上即可。即本地编译直接就可以测试,交叉编译需要拷贝到待测开发环境。
1.2.3配置
在进行测试前需要进行配置,以配置测试参数以及获取测试环境的信息(如测试size、cpu频率等等),配置脚本在 lmbench3/scripts 目录下,名字叫config-run。
# cd lmbench3/scripts
/* config-run会进行一些配置,这个需要我们根据自己的需求和单板实际情况进行配置 */
# env OS="$OS" ./config-run /* "OS"为编译lmbench3后在bin目录下生成的目录*/
# export PATH=$PATH:/lmbench3/bin/$OS /* 需要指定可执行文件的搜索路径 */
1.2.4测试与结果
脚本lmbench/results会启动我们的测试:
# env OS="$OS" BENCHMARK_OS=YES ./results /* BENCHMARK_OS 可选 */
测试完毕后其结果在lmbench3/results/$OS 目录下。
二、测试结果
2.1 环境配置结果
在上面的1.2.4步骤测试完毕后,会在lmbench3/results/$OS目录下生成测试结果,测试结果文件的名字与我们操作系统的名字有关。而所有的环境配置会在结果文件中开头打印出来,部分信息类似如下:
[LMBENCH_VER: ]
[BENCHMARK_HARDWARE: NO]
[BENCHMARK_OS: YES]
[ALL: 512 1k 2k 4k 8k 16k 32k 64k 128k 256k 512k 1m 2m 4m 8m]
[DISKS: ]
[DISK_DESC: ]
[ENOUGH: 5000]
[FAST: ]
[FASTMEM: NO]
[FILE: /usr/tmp/XXX]
[FSDIR: /usr/tmp]
2.2 lmbench测试过程与原理
2.2.1 lmbench的测试参数
在我们调用lmbench3/scripts/results脚本进行测试时,实际调用的是lmbench3/bin/lmbench脚本进行测试,测试中会依次执行其中的多个测试项目。
这里用任务切换测试用例lat_ctx测试的脚本举例说明:
for size in $CTX
do
lat_ctx -P $SYNC_MAX -s $size $N
done
上面几个参数的取值(这些值和我们1.2.3配置有关)和含义:
CTX= {0 4 8 16 32 64},表示一些时间消耗操作(进行内存操作时内存的大小);
N = {2 4 8 16 24 32 64 96},表示进程数,整个测试会进行2、4、8…64、96个任务时的切换性能。
其中SYNC_MAX这个参数在1.2.3步骤执行env OS="$OS" ./config-run 时由我们自己指定。
2.2.2 lmbench测试结果分析
不同的测试用例有不同的测试结果输出格式。一般是一个二维的输出结构:
条件A 条件B 条件C
条件a 结果Aa 结果Ba 结果Ca
条件b 结果Ab 结果Bb 结果Cb
条件c 结果Ac 结果Bc 结果Cc
对于性能的测试,结果一般是以微秒为单位的时间值。根据我们输入值的不同,可能会有多组输出结果。