1.简介
LTP(Linux Test Project)是SGI、IBM、OSDL和Bull合作的项目,目的是为开源社区提供一个测试套件,用来验证Linux系统可靠性、健壮性、和稳定性。LTP是Linux内核和相关特点测试的一整套工具集,它力求通过自动化的测试方法改进Linux内核。
2.源码目录结构介绍
LTP源代码说明
INSTALL LTP安装配置指导文档
README 描述LTP包内容的文档
CREDITS 记录对LTP有很大贡献的人
COPYING GNU Public License
ChangeLog 描述版本的变化
ltpmenu 规划执行LTP的图形化界面接口
Makefile LTP顶层目录的Makefile,负责编译安装pan、testcases和tools
runalltests.sh 可以顺序运行全部测试例程并且报告结果的脚本
doc/* 工程文档包含工具和库函数使用手册,描述各种测试
include/* 通用的头文件目录
lib/* 通用的库函数目录
testcases/* 包含所有运行在LTP下的测试程序和链接
testscripts/* 存放分组的测试脚本
runtest/* 为自动测试提供命令列表
pan/* 测试的驱动装置。具备随即和并行测试的能力
scratch/* 存放零碎测试的东西
tools/* 存放自动化测试脚本和辅助工具
二、LTP安装
1.下载地址
http:/ltp.sourceforge.net/(以ltp-20110228版本说明。其他版本若有不同请参考官网)
2.编译
从官方网站下载最新的LTP测试套件包,解压后进入ltp源目录。执行make、makeinsatll命令即可。注意:“make install” 可以使用非root用户。但是在执行测试案例之前一定要使用root用户执行“IDcheck.sh”命令。在编译成功后会自动安装到/opt/ltp目录下。
[root@server20 ltp]# make
[root@server20 ltp]# make install
3.LTP 测试套件内容
(1)脚本
IDcheck.sh 检查系统是否缺少执行LTP测试套件所需的用户和用户组,如果缺少则为LTP测试套件创建所需的用户和用户组。
runltplite.sh 这个脚本用来测试LTP安装,也可用来对测试套件的子项目进行测试。详情参阅脚本
runltp 这个脚本能够测试LTP测试套件主要项目。其中包括:
- 硬盘 I/O 测试。
- 内存管理压力测试。
- IPC 压力测试。
- SCHED测试。
- 命令功能的验证测试。
- 系统调用功能的验证测试。
ver_linux 这个脚本是获取硬件、软件、环境信息。
runalltests.sh 测试内容同runltp。不同点在于runltp可以指定测试项进行组合测试,而runalltests.sh则会全部执行。
(2)目录
bin 存放LTP测试的一些辅助脚本
results 测试结果默认存储目录
testcases 测试项集
output 测试日志默认存储目录
share 脚本使用说明目录
runtest 测试驱动(用于链接testscripts内的测试脚本和testcases测试项目)
lib 通用的库函数目录
testscripts 列举了所有的子系统测试脚本
adp_children.sh sysfs.sh
ltp-aiodio.sh ltpstress.sh
runpan.sh networkstress.sh
adp.sh 等等
(3)其他
Version 版本说明
(4)测试过程
从一个测试命令文件中读取要测试的条目的要执行的命令行,然后等待该项测试的结束,并记录详细的测试输出。默认状态下pan会随机的选择一个命令行来运行,可以指定在同一时间要执行测试的次数。pan会记录测试产生的详细的格式复杂的输出,但它不进行数据的整理和统计,数据整理统计的工作由scanner来完成,scanner是一个测试结果分析工具,它会理解pan的输出格式,并输出成一个表格的形式来总结那些测试passed或failed。
LTP测试套件通过执行测试脚本runalltests.sh(或runltp或runltplite.sh),或/testscripts内的测试脚本调用驱动程序pan执行/testcases内的测试项目。
三、LTP使用说明
1.概述
LTP有两种测试方式。初始测试和自定义场景测试。自定义场景测试是指根据需求对拟定测试项目,自定义场景测试法使用的脚本是runltp(脚本使用方法下详),在执行runltp脚本的时,可以指定参数添加你需要的测试的项目(在/testscripts内)。初始测试是对linux系统主要项目(不是全部)进行测试。包括:
- 硬盘 I/O 测试。
- 内存管理压力测试。
- IPC 压力测试。
- SCHED测试。
- 命令功能的验证测试。
- 系统调用功能的验证测试。
初始测试的测试脚本是runalltests.sh或runltp(runltp默认执行的内容与runalltests相同)。
2.runltp命令介绍
用法:./runltp [option] [command]
-a EMAIL_TO 发送所有的报告到指定的邮箱
-c NUM_PROCS 添加后台测试CPU的进程数,默认1
-C FAILCMDFILE 失败案例存储文件
-d IMPDIR 临时存储目录,默认/tmp
-D NUM_PROCS,NUM_FILES,NUM_BYTES,CLEAN_FLA run LTP under additional background Load on Secondary Storage (Seperate by comma)
[NUM_PROCS = no. of processes creating Storage Load by spinning over write()]
[NUM_FILES = Write() to these many files (Defaults to 1 when value 0 or undefined)]
[NUM_BYTES = write these many bytes (defaults to 1GB, when value 0 or undefined)]
[CLEAN_FLAG = unlink file to which random data written, when value 1]
-e 输出目前LTP版本的日期
-f CMDFILES 执行用户自定义的测试案例,用“ ,”隔开(CMDFILES指runtest内的驱动程序)
-g HTMLFILE 添加html格式的输出文件HTMLFILE
-h 帮助信息
-i NUM_PROCS 添加后台测试IO bus总线的进程数
-l LOGFILE 记录测试日志的文件
-m NUM_PROCS,CHUNKS,BYTES,HANGUP_FLAG run LTP under additional background Load on Main memory (Seperate by comma)
[NUM_PROCS = no. of processes creating main Memory Load by spinning over malloc()]
[CHUNKS = malloc these many chunks (default is 1 when value 0 or undefined)]
[BYTES = malloc CHUNKS of BYTES bytes (default is 256MB when value 0 or undefined) ]
[HANGUP_FLAG = hang in a sleep loop after memory allocated, when value 1]
-N 添加所有的网络测试
-n 添加后台测试网络传输
-o OUTPUTFILE 直接打印测试输出到OUTPUTFILE
-p 人为指定日志格式
-q 打印少的测试输出到屏幕
-r LTPROOT
-s PATTERN 匹配PATTERN执行测试案例
-t DURATION 给定测试执行时间设置(s,m,h,d)
-T REPETITION 重复执行测试案例
-v 打印多的测试输出到屏幕
-w CMDFILEADDR 使用wget下载用户测试案例集合。
-x INSTALL 并行执行多个测试场景
3.压力测试
在testscripts目录中含有一个测试脚本ltpstress.sh,它可以对linux系统进行
-内存管理压力测试。
-文件系统压力测试。
-数学 (浮点) 测试。
- 多线程压力测试。
- 硬盘 I/O 测试。
- IPC (pipeio, semaphore) 测试。
- 系统调用功能的验证测试。
- 网络压力测试。
在使用ltpstress.sh脚本的之前需要对系统进行配置
-rsh必须配置完毕并在运行。
-内核支持NFS,并且安装NFS软件,通过网络测试。
-“sar”或"top"工具需要被安装,执行ltpstress时需要添加"sar"或“top”工具。
(1)ltpstress.sh命令
参数说明 :
-d datefile 指定sar或top记录文件,默认是/tmp/ltpstress.data
-i #(in sec) 指定sar或top快照时间间隔,默认是10s
-I iofile 记录"iostat"结果到isofile默认是/tmp/ltpstress.iostat
-l logfile 记录测试结果到logfile,默认是/tmp/ltpstress
-m #(in Mb) 指定最小的内存使用
-n 不对网络进行压力测试
-S 用 sar捕捉数据
-T 利用LTP修改过的top工具捕捉数据
-t duration 指定时间的设置
(2)"top"工具
使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
说明:即时显示 process 的动态
-d 改变显示的更新速度,或是在交谈式指令列( interactive command)按d
-q 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
-c 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
-S 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
-s 安全模式,将交谈式指令取消, 避免潜在的危机。
-i 不显示任何闲置 (idle) 或无用 (zombie) 的行程
-n 更新的次数,完成后将会退出 top
-b 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
(3)"sar"工具
sar [options] [-A] [-o file] t [n]
说明:在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有的参数,n为采样次数,是可选的,sar命令的选项很多,下面只列出常用选项:
-a 报告文件读写使用情况
-b 报告缓存的使用情况
-c 报告系统调用的使用情况
-d 报告磁盘的使用情况
-h 报告关于buffer使用的统计数据
-m 报告IPC消息队列和信号量的使用情况
-q 报告运行队列和交换队列的平均长度
-R 报告进程的活动情况
-r 报告没有使用的内存页面和硬盘块
-u 报告CPU的利用率
-v 报告进程、i节点、文件和锁表状态
-w 报告系统交换活动状况
四、测试案例
1.初始测试
[root@server25 ltp]# ./runalltests.sh
*******************************************************************
*******************************************************************
** **
** This script is being re-written to cover all aspects of **
** testing LTP, which includes running all those tests which **
** are not run by default with runltp script. Special setup **
** in system environment will be done to run all those tests **
** like the File System tests, SELinuxtest, etc **
** **
*******************************************************************
*******************************************************************
Running Default LTP...
INFO: creating /opt/ltp/results directory
INFO: no command files were provided. Will execute the following
runtest scenario files:
syscalls fs fs_perms_simple fsx dio io mm ipc sched math nptl pty containers fs_
bind controllers filecaps cap_bounds fcntl-locktests connectors admin_tools time
rs power_management_tests numa hugetlb commands hyperthreading
If some fields are empty or look unusual you may have an old version.
Compare to the current minimal requirements in Documentation/Changes.
NFS-Asianux Server
LSB_VERSION="3.1"
DISTRIB_ID="AsianuxServer"
DISTRIB_RELEASE="3"
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
Linux server25.nfs 2.6.18-128.7NFS #1 SMP Thu Aug 26 10:13:03 EDT 2010 x86_64 x8
6_64 x86_64 GNU/Linux
Gnu C gcc (GCC) 4.1.2 20080704 (Asianux 3.0 4.1.2-44)
Gnu make 3.81
util-linux pre7)
mount pre7)
modutils 3.3-pre2
e2fsprogs 1.39
PPP 2.4.4
isdn4k-utils 3.9
Linux C Library > libc.2.5
Dynamic linker (ldd) 2.5
Procps 3.2.7
Net-tools 1.60
iproute2 iproute2-ss061002
Kbd 1.12
Sh-utils 5.97
Modules Loaded i915 drm ipv6 xfrm_nalgo crypto_api dm_mirror dm_multipat
h scsi_dh video hwmon backlight sbs i2c_ec button battery asus_acpi acpi_memhotp
lug ac lp sg snd_intel8x0 snd_ac97_codec ac97_bus snd_seq_dummy snd_seq_oss snd_
seq_midi_event snd_seq snd_seq_device snd_pcm_oss ide_cd snd_mixer_oss i2c_i801
8139too pcspkr snd_pcm i2c_core 8139cp mii cdrom serio_raw parport_pc snd_timer
snd parport soundcore snd_page_alloc dm_raid45 dm_message dm_region_hash dm_log
dm_mod dm_mem_cache ata_piix libata sd_mod scsi_mod ext3 jbd uhci_hcd ohci_hcd e
hci_hcd
free reports:
total used free shared buffers cached
Mem: 501400 490124 11276 0 2432 87364
-/+ buffers/cache: 400328 101072
Swap: 2096472 136 2096336
/proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Pentium(R) 4 CPU 3.06GHz
stepping : 9
cpu MHz : 3059.069
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc
pni monitor ds_cpl tm2 cid cx16 xtpr lahf_lm
bogomips : 6121.34
clflush size : 64
cache_alignment : 128
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Pentium(R) 4 CPU 3.06GHz
stepping : 9
cpu MHz : 3059.069
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl tm2 cid cx16 xtpr lahf_lm
bogomips : 6117.09
clflush size : 64
cache_alignment : 128
address sizes : 36 bits physical, 48 bits virtual
power management:
remove test cases which require the block device.
You can specify it with option -b
COMMAND: /opt/ltp/bin/ltp-pan -e -S -a 5704 -n 5704 -p -f /tmp/ltp-c rOdkS5710/alltests -l /opt/ltp/results/LTP_RUN_ON-2011_ 3月_25-16h_36m_16s.log - o /opt/ltp/output/LTP_RUN_ON-2011_ 3月_25-16h_36m_16s.output -C /opt/ltp/output/ LTP_RUN_ON-2011_.failed
LOG File: /opt/ltp/results/LTP_RUN_ON-2011_ 3月_25-16h_36m_16s.log
OUTPUT File: /opt/ltp/output/LTP_RUN_ON-2011_ 3月_25-16h_36m_16s.output
FAILED COMMAND File: /opt/ltp/output/LTP_RUN_ON-2011_.failed
HTML File: /opt/ltp/output/2011_
Running tests.......
分析:
remove test cases which require the block device这句前面一部分是对系统信息的捕捉,后面是对记录结果的文件的说明。
详细测试结果略
2.压力测试
Linux 2.6.18-128.7NFS (server20) 2011年03月26日
Running LTP Stress for 24 hour(s) using 730 Mb
Test output recorded in:
/tmp/ltpstress.2496.output1
/tmp/ltpstress.2496.output2
/tmp/ltpstress.2496.output3
13时01分04秒 all 4.00 0.00 8.45 87.56 0.00 0.00
13时00分59秒 CPU %user %nice %system %iowait %steal %idle
13时01分09秒 all 4.35 0.00 9.50 86.14 0.00 0.00
13时01分14秒 all 5.56 0.00 13.46 80.98 0.00 0.00
13时01分19秒 all 6.20 0.00 16.10 77.70 0.00 0.00
13时01分24秒 all 7.80 0.00 15.15 77.05 0.00 0.00
13时01分29秒 all 9.05 0.00 12.81 78.14 0.00 0.00
分析:
sar会动态收集系统的状态信息。详细结果略。收集的信息保存在
tmp/ltpstress.data利用sar工具分析ltpstress.data。
(1)sar -u -f ltpstress.data //cpu 平均利用率
[root@server25 tmp]# sar -u -f ltpstress.data
Linux 2.6.18-128.7NFS (server25.nfs) 2011年03月25日
16时49分02秒 CPU %user %nice %system %iowait %steal %idle
16时49分12秒 all 3.81 0.00 3.50 92.69 0.00 0.00
16时49分22秒 all 14.17 0.00 7.14 78.69 0.00 0.00
16时49分45秒 all 31.94 0.00 5.30 62.76 0.00 0.00
16时50分11秒 all 6.25 0.00 5.38 88.36 0.00 0.02
16时50分49秒 all 9.13 0.00 3.21 87.65 0.00 0.00
Average: all 13.35 0.00 4.57 82.07 0.00 0.0
(2) sar -r -f ltpstress.data //内存平均利用率
inux 2.6.18-128.7NFS (server25.nfs) 2011年03月25日
16时49分02秒 kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
16时49分12秒 5036 496364 99.00 360 14804 1747512 348960 16.65 44664
16时49分22秒 5540 495860 98.90 464 11304 1633908 462564 22.06 58788
16时49分45秒 8428 492972 98.32 232 9660 1347532 748940 35.72 43848
16时50分11秒 4852 496548 99.03 432 10568 1468572 627900 29.95 39252
16时50分49秒 4772 496628 99.05 940 11980 1198232 898240 42.85 35224
Average: 5726 495674 98.86 486 11663 1479151 617321 29.45 44355
[root@server25 tmp]#
ltp 测试流程及测试脚本分析
1 pan
pan工作原理:LTP测试套件有一个专门的测试驱动程序pan,具体的测试用例的执行都是由pan来调用执行,它可以跟踪孤儿进程和抓取测试的输出信息。它的工作方式是这样的:
从一个测试命令文件中读取要测试的条目的要执行的命令行,然后等待该项测试的结束,并记录详细的测试输出。默认状态下pan会随机的选择一个命令行来运行,可以指定在同一时间要执行测试的次数。
pan会记录测试产生的详细的格式复杂的输出,但它不进行数据的整理和统计,数据整理统计的工作由scanner来完成,scanner是一个测试结果分析工具,它会理解pan的输出格式,并输出成一个表格的
形式来总结那些测试passed或failed。
2 ltp 测试过程
LTP测试的过程主要分为两个阶段:
第一阶段——初始测试,主要用于测试系统的可靠性,包括LTP测试套件在硬件和操作系统上24小时的成功运转。
第二阶段——压力测试,主要验证产品在系统高使用率时的健壮性。
初始测试
./runltp -p -l /tmp/resultlog.20061222 -d /tmp -o /tmp/ltpscreen.20061222
-t 24h
压力测试
./ltpstress.sh -m 35 -S -t 72h //-m:
表示genload不停的在分配和释放35m内存,
-S: 使用sar工具记录
-t: 测试时间
3 runltp 调试过程
将ltp安装在pc机上
make autotools
make
make install
在/opt/ltp 目录下就是安装好的ltp。可以在其中运行测试脚本
例如: ./runltp -p -l result.log (该命令没有指定测试案例,默认)
可以将输出结果重定向到一个文件如:rtp-info
就可以修改runltp脚本,看rtp-info的输出结果
4 ltp 在arm的交叉编译
$ make autotools
$./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux
--host=arm-linux CFLAGS="-static -pthread"
$make
make install
make时会报openlog的错误。将testcases/kernel/fs/fs-bench 文件夹移走,不编译
5 runltp 脚本
bash脚本,主要是通过调用ltp-pan 来运行testcas中的各个测试用例
还有根据参数来自定义测试,及对测试结果进行不同的保存
6 测试自己的用例
一 修改已有的测试命令文件
1 在runtest/syscalls 中加入moon01 (自己编写的脚本名,只打印)
2 将moon01 脚本放入testcase/bin 目录下
运行./runltp -p -l result.log 会看到打印。说明调用了moon01脚本
(由于没有-f 指定测试命令文件,用scenario_groups/default 文件读入默认
的测试命令文件,其中第一个为syscalls文件,该文件中写明了要测试的命令,
注意格式)
二 填写自己的命令文件
1 填写自己的命令文件my_cmd_file
写入 moon01 moon01
将该文件放入runtest 目录下
2将moon01脚本放入testcase/bin下
3执行./runltp -p -l result.log -f my_cmd_file
4 执行结果调用moon01打印出信息
ltp 测试流程及测试脚本分析
1 pan
pan工作原理:LTP测试套件有一个专门的测试驱动程序pan,具体的测试用例的执行都是由pan来调用执行,它可以跟踪孤儿进程和抓取测试的输出信息。它的工作方式是这样的:
从一个测试命令文件中读取要测试的条目的要执行的命令行,然后等待该项测试的结束,并记录详细的测试输出。默认状态下pan会随机的选择一个命令行来运行,可以指定在同一时间要执行测试的次数。
pan会记录测试产生的详细的格式复杂的输出,但它不进行数据的整理和统计,数据整理统计的工作由scanner来完成,scanner是一个测试结果分析工具,它会理解pan的输出格式,并输出成一个表格的
形式来总结那些测试passed或failed。
2 ltp 测试过程
LTP测试的过程主要分为两个阶段:
第一阶段——初始测试,主要用于测试系统的可靠性,包括LTP测试套件在硬件和操作系统上24小时的成功运转。
第二阶段——压力测试,主要验证产品在系统高使用率时的健壮性。
初始测试
./runltp -p -l /tmp/resultlog.20061222 -d /tmp -o /tmp/ltpscreen.20061222
-t 24h
压力测试
./ltpstress.sh -m 35 -S -t 72h //-m:
表示genload不停的在分配和释放35m内存,
-S: 使用sar工具记录
-t: 测试时间
3 runltp 调试过程
将ltp安装在pc机上
make autotools
make
make install
在/opt/ltp 目录下就是安装好的ltp。可以在其中运行测试脚本
例如: ./runltp -p -l result.log (该命令没有指定测试案例,默认)
可以将输出结果重定向到一个文件如:rtp-info
就可以修改runltp脚本,看rtp-info的输出结果
4 ltp 在arm的交叉编译
$ make autotools
$./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux
--host=arm-linux CFLAGS="-static -pthread"
$make
make install
make时会报openlog的错误。将testcases/kernel/fs/fs-bench 文件夹移走,不编译
5 runltp 脚本
bash脚本,主要是通过调用ltp-pan 来运行testcas中的各个测试用例
还有根据参数来自定义测试,及对测试结果进行不同的保存
6 测试自己的用例
一 修改已有的测试命令文件
1 在runtest/syscalls 中加入moon01 (自己编写的脚本名,只打印)
2 将moon01 脚本放入testcase/bin 目录下
运行./runltp -p -l result.log 会看到打印。说明调用了moon01脚本
(由于没有-f 指定测试命令文件,用scenario_groups/default 文件读入默认
的测试命令文件,其中第一个为syscalls文件,该文件中写明了要测试的命令,
注意格式)
二 填写自己的命令文件
1 填写自己的命令文件my_cmd_file
写入 moon01 moon01
将该文件放入runtest 目录下
2将moon01脚本放入testcase/bin下
3执行./runltp -p -l result.log -f my_cmd_file
4 执行结果调用moon01打印出信息