LTP 测试分析
date:2008.10.29
author:yinkaizhong(kaizhongyin@hotmail.com)
1.LTP介绍
LTP--linut test project ,ltp套件是由Linux Test Project所开发的一套系统测试套件。它基于系统资源的利用率统计开发了一个测试的组合,为系统提供足够的压力。
通过压力测试来判断系统的稳定性和可靠性。
压力测试是一种破坏性的测试,即系统在非正常的、超负荷的条件下的运行情况 。用来评估在超越最大负载的情况下系统将如何运行,是系统在正常的情况下对某种负载强度的承受能力的考验 。
使用 LTP 测试套件对 Linux 操作系统进行超长时间的测试,重点在于 Linux 用户环境相关的工作负荷(参阅 参考资料 以深入了解 LTP)。而并不是致力于证明缺陷。
重点: 测试选择,评价系统资源利用率,分析内核代码覆盖率,评价最终压力测试
更加具体的参考:
http://www.ibm.com/developerworks/cn/linux/l-rel/index.html
或者网上相关信息
在这里,主要介绍LTP结构,测试方法,测试组合的选择,工具介绍,环境搭建,需要修改地方,分析测试结果,LTP操作流程
2.LTP结构
从下载LTP测试源码包
LTP的目录结构基本上分为文档目录(doc)、测试驱动程序目录(pan)、测试脚本目录(testscripts)、测试用例库(testcase)、测试命令文件目录(runtest)、头文件目录(include)、库目录(lib)等。
Doc:该目录是说明文件和帮助文档的所在地,这个目录中对LTP的内容和每个工具都有详细的说明。
Pan:该目录存储的是LTP测试套件的测试驱动程序pan。
Testscripts:该目录中存储的是可执行的测试脚本,不同方面的测试脚本的集合。
Testcase:该目录存储了所有LTP测试套件中所使用的测试用例的源码。
Runtest:该目录中的每个文件都是要执行的测试用例的命令集合,每个文件针对测试的不同方面。
Include:LTP测试套件的头文件目录,定义了LTP自身的数据结构和函数结构。
Lib:LTP测试套件运行时自身需要的库文件,定义了LTP自身的各种函数。
各个文件结构之间的联系:
---->testscripts中ltpstress.sh
---->runtest(stress.part1,stress.part2,stress.part3)
---->pan后台运行
---->最终运行Testcase中的各个测试案例
其中runtest中 stree.part1,stree.part2,stree.part3中的测试命令或脚本 如 mmstress;来源于testcase/bin 中mmstress;而testcase/bin 中mmstress 可执行脚本或命令来源于/testcase中如 kernel,network, pounder21, commands 等源代码编译生成的,
mmstress:kernel/mem/mtest05/mmstress.c
stress.part[n](n=1,2,3)中测试命令如何看?
这些命令文件包含测试用例的tag和带有参数的测使用里,格式如下:
#tag test case
test1 test1 -l 10
mtest01 mtest01 -m 20
fork01 fork01
pan工作原理:LTP测试套件有一个专门的测试驱动程序pan,具体的测试用例的执行都是由pan来调用执行,它可以跟踪孤儿进程和抓取测试的输出信息。它的工作方式是这样的:
从一个测试命令文件中读取要测试的条目的要执行的命令行,然后等待该项测试的结束,并记录详细的测试输出。默认状态下pan会随机的选择一个命令行来运行,可以指定在同一时间要执行测试的次数。
pan会记录测试产生的详细的格式复杂的输出,但它不进行数据的整理和统计,数据整理统计的工作由scanner来完成,scanner是一个测试结果分析工具,它会理解pan的输出格式,并输出成一个表格的
形式来总结那些测试passed或failed。
3.LTP测试方法
测试方法有两个的阶段:一个是“初始测试”,一个是“压力测试”。
初始测试是开始测试的必要条件。初始测试包括 LTP 测试套件在硬件和操作系统上成功运转,这些硬件和操作系统将用于可靠性运转。LTP 测试套件包附带的驱动程序脚本 runalltest.sh 用于验证内核。这个脚本串行地运行一组成包的测试,并报告全部结果。也可以选择同时并行地运行几个实例。默认地,这个脚本执行:
- 文件系统压力测试。
- 硬盘 I/O 测试。
- 内存管理压力测试。
- IPC 压力测试。
- SCHED测试。
- 命令功能的验证测试。
- 系统调用功能的验证测试。
压力测试可以验证产品在系统高使用率时的健壮性。作为 runalltest.sh 的补充,特别设计了一个名为 ltpstress.sh 的测试场景,在使用网络与内存管理的同时并行地运行大范围的内核组件,并在测试系统上生成高压力负荷。ltpstress.sh 也是 LTP 测试套件的一部分。这个脚本并行地运行相似的测试用例,串行地运行不同的测试用例,这样做是为了避免由于同时访问同一资源或者互相干扰而引起的间歇性故障。默认地,这个脚本执行:
- NFS 压力测试。
- 内存管理压力测试。
- 文件系统压力测试。
- 数学 (浮点) 测试。
- 多线程压力测试。
- 硬盘 I/O 测试。
- IPC (pipeio, semaphore) 测试。
- 系统调用功能的验证测试。
- 网络压力测试。
4.测试组合的选择
所选择的测试的组合必须给系统的资源带来足够的压力。Linux 内核的四个主要方面可以影响系统的 响应和执行时间:
- CPU:用于在机器的 CPU(s)上处理数据的时间。
- Memory:用于自真实存储器中读写数据的时间。
- I/O:用于自磁盘存储器读写数据的时间。
- Networking:用于自网络读写数据的时间。
系统资源利用率评价阶段通常需要多次尝试才能得到合适的测试组合,并得到期望水平的利用率。在这个评价过程中,sar 工具也应该在运行。在评价运行的结论中,您应该收集并评价所有四种资源的利用率水平。
具体的测试组合修改方法。
修改方法一:
runtest中 stress.part1,stress.part2,stress.part3。
如修改stress.part1中有这样一个测试mem02,根据阅读testcases/kernel/mem/mem/mem02.c 源代码,可将他修改为mem02 -m 15,意思是测试15m内存。
同样的也可以在 stress.part1,stress.part2,stress.part3 中添加、删除一些测试,
如我们测试时就把
stress.part3中关于swap交换分区的去掉
#swapoff01 swapoff01
#swapoff02 swapoff02
#swapon01 swapon01
#swapon02 swapon02
#swapon03 swapon03
修改方法二:
前面提到的初始测试或者压力测试都是测试的默认的,如果想测试其他的或者自己的测试案例,需要修改testcase的
Makefile,因为通过它的Makefile可以看到
SUBDIRS = `ls */Makefile | sed "s/Makefile//g" | grep -v open | grep -v pounder | grep -v DOTS | grep -v kdump | grep -v realtime`
sed 's/\:/ /g' :想把文本中的冒号替换成空格
grep -v:显示所有与指定模式不匹配的行
也就是说open,pounder,DOTS,kdump,realtime没有测试,当然你可以选上或者,添加上自己的测试案例。
5.工具介绍
Gcov,lcove:
分析代码覆盖率
sar:
帮助我们掌握系统资源的使用情况,特别是内存和CPU 的使用情况,
是UNIX系统使用者应该掌握的工具之一
在我们的测试中,sar工具每 10 秒(当然时间间隔可以修改)钟截取一次系统利用率的快照,并保存到结果文件。
针对sar生成的sar.data使用方法:
sar -u sar.data //查看cpu使用情况
sar -r sar.data //看看memory,swap使用情况
……………………
Top:
跟sar差不多的功能,这里我们就用sar 了。
Rsh:
用处就不用介绍了,主要介绍建立信任主机
http://blog.chinaunix.net/u/7121/showart_576215.html 这个比较全面
我们自己211服务器上写的也比较全面,但特别注意的细节就是/root/.rhosts权限600这个问题。因为我为它浪费了半天时间。
Ssh:
建立信任主机
#aptitude install openssh-server openssh-client
1、a>更改/etc/hosts文件
#vi /etc/hosts 打开hosts文件,更改如下:
127.0.0.1 localhost.localdomain localhost
192.168.4.211 ub-server
192.168.4.40 gengmj-desktop
192.168.4.32 zjx-desktop //ip:被信任主机的IP,zjx-desktop:被信任主机的用户名
b>更改 /etc/hosts.equiv文件 // /etc/hosts.equiv里的主机不需要提供密码就可以访问本机.
# vim /etc/hosts.equiv
# /etc/hosts.equiv: list of hosts and users that are granted "trusted" r
# command access to your system .
#127.0.0.1 localhost.localdomain localhost
ub-server mpich
debian mpich
gmj-desktop mpich
zjx-desktop mpich //被信任的zjx-desktop用户,以mpich用户登录本机
festival-desktop mpich
liu-desktop mpich
yym-desktop mpich
2、在node01生成SSH秘钥对.
$ssh-keygen -t rsa 一路回车即可
产生.ssh文件,
$ls -a 查看是否有.ssh文件夹/cluster/server/
3、进入.ssh目录
$cd .ssh
4、生成authorized_keys文件
$cp id_rsa.pub authorized_keys
5、退出到root目录
$cd ..
6、建立本身的信任连接
$ssh ub-server 按提示输入yes(三个字母要打全)
7、设置node02(node02的root目录下)
$ssh-keygen -t rsa 生成.ssh文件夹
$scp mpich@ub-server:/home/mpich/.ssh/* ~/.ssh/ 拷贝ub-server上的.ssh文件夹覆盖本地的
#scp root@ub-server:/etc/hosts /etc/hosts 拷贝node01上的hosts文件覆盖本地的
$ssh node01 提示处输入yes回车
8、确认机器的信任连接已建立
对每个节点执行:
$ssh ub-server
$ssh gengmj-desktop
在提示处输入yes回车,最后确定无需输入密码并且没有任何提示信息即可登陆("Last login:时间日期"提示信息除外)
6.环境搭建
开发板: v1.2
CPU:
内核:Linux 2.6.22.8 交叉编译时需要选上ide,nfs server support
LTP 版本:20080831 交叉编译
pc机:
CPU:Intel(R) Celeron(R) CPU 2.26GHz
内核:2.6.24-16-generic
LTP 版本:20080831
pc机做服务器使用
7.需要修改地方
修改一:/ltp-full-20080831/testcases/network/nfs
下的nfs01 , nfs01 ,nfs03 nfs04 , nfsstress,将修改RHOST=192.168.4.68,让它测试远程的主机
nfs04: 中139行nfs04_create_file--绝对路径
修改二:/ltp-full-20080831/testcases/network/rpc/basic_tests/rpc01
中rpc01 , 将修改RHOST=192.168.4.68,让它测试远程的主机
修改三:/ltp-full-20080831/testcases/kernel/mem/mem/mem02.c --->#define MEMSIZE 15*1024*1024 #15M
修改四:fork09: 最多能OPEN 800 个文件,然后才能创建进程
………………等
8.测试结果分析
默认情况下,测试结果放在/tmp
ltpstress.log---记录相关日志信息,主要是测试是否通过(pass or fail)
ltpstress.data ----sar工具记录的日子文件,包括cpu,memory,i/o等
ltpstress.611.output1---对应stress.part1,测试命令的一些输出信息
ltpstress.611.output2---对应stress.part2,测试命令的一些输出信息
ltpstress.611.output3---对应stress.part3,测试命令的一些输出信息
cpu 平均使用率:sar -u -f ltpstress.data
memory 平均使用率:sar -r -f ltpstress.data
fail分析:
ltpstress.log 将所有FAIL过滤出来,得到完整的所有FAIL的testcase。
方法如下:用sort把FAIL的项排序,再用uniq排除重复项输出到一个文件就可以了:
grep FAIL ltpstress。log | sort | uniq >failcase.txt
至此,得到的failcase.txt为所有FAIL的testcase名字。要注意分析case失败的原因是什么,并下结论:是配置的问题,还是稳定性的问题(有失败也有成功)。并将结论加注在failcase.txt中,方便查看。
9.软件操作流程
1.下载源码包
对开发板
tar zxzf ltp-full-20050608.tgz
cd ltp-full-20050608
make cross_compile=mipsel-linux-;
make install cross_compile=mipsel-linux-;
copy到硬盘文件系统的/ 根目录下
对pc机
tar zxzf ltp-full-20050608.tgz
cd ltp-full-20050608
make;
make install;
注意:ltp-full-20050608 必须跟开发板上路径一样,即在/ 根目录下
2.测试运行
初始测试
./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.结果分析
默认 情况下
cd /tmp
sar -u -f ltpstress.data //cpu 平均利用率
sar -r -f ltpstress.data //内存平均利用率
grep FAIL ltpstress.log | sort | uniq >failcase.txt //失败情况分析
计算出成功率
压力测试参考结果( DVR)
测试工具是 LTPstress,测试用例以并行和串行方式执行
时间24h
cpu 平均利用率:99.99% (用户:33.21% 系统:66.78%)
memory 平均利用率:68%
成功率:96.17%
没有严重的系统故障
10.总结
高内核代码覆盖率,少量内核运行失败都暗示了linux内核的可靠性增加,但是这些测试用例的完整性还有待于分析和加强,如果内核开发人员和测试人员能够勤于提交他们发现的测试缺陷,那么该套件将更能帮助减少在linux中发现的回归缺陷。
阅读(1398) | 评论(0) | 转发(0) |