Linux内核测试三部曲(2)

Posted on 2008-06-19 13:20 Test8848-谷峰 阅读(1100) 评论(0)  编辑 收藏 引用
阶段二(自动测试)

测试的下一阶段是,使用专门设计的程序来检查特定的内核子系统能否正常工作。我们还执行内核的退化以及性能测试。后者对于内核开发员(还有我们)来说,相当地重要,因为它使得我们能识别出损害性能的改变。比如,如果我们把内核从2.6.x-rc1升级到2.6.x-rc2后,有种文件系统的性能却降低了10%,查找导致这种情况发生的补丁无疑是个好主意。

关于内核的自动测试,我们推荐你使用AutoTest 套件(http://test.kernel.org/autotest/)。该套件包含了很多测试应用程序以及统计工具,而且相当简单的用户界面。

为了安装AutoTest你以root帐户可以进入到/usr/local 目录并运行

# svn checkout svn://test.kernel.org/autotest/trunk autotest

虽然通常不推荐以root帐户运行类似命令,但这个命令应该是安全的,除非你不信任你的DNS服务器,因为它只是下载一些文件,并保存到/usr/local下。除此之外,你还得以root帐户运行AutoTest,因为它的一些测试要求超级用户权限才能完成。所以,你不应该在生产系统上使用AutoTest:在极端情况下,保存在进行特权级测试的系统中的数据可能会受到损坏甚至毁坏,我们相信你不喜欢你的产品数据会发生这种情况。
根据设计,AutoTest是非交互式性的,所以一旦启动,你就不需要再关心它了(当然了,如果有坏事真的发生了,你就要不得不恢复系统了,但这是另外一个话题)。要启动测试,你可以到/usr/local/autotest/client目录下 (我们假设AutoTest被安装到了/usr/local下),然后以root身份执行:

# bin/autotest tests/test_name/control

这里,test_name是位于目录/usr/local/autotest/client/tests中的目录名称,该目录中含有你想要进行的测试。控制文件tests/test_name/control包含了为AutoTest准备的指令。最简单的情况下,只需要一个这样的指令,也就是:

job.run_test(’test_name’)

这里,test_name是包含控制文件的目录名称。更加复杂的控制文件的内容可能类似下面:

job.run_test(’pktgen’, ’eth0’, 50000, 0, tag=’clone_skb_off’)
job.run_test(’pktgen’, ’eth0’, 50000, 1, tag=’clone_skb_on’)

这里,测试名称后面的字符串表示的是应当要传递到测试程序的参数。你可以修改这些参数,但是首先要阅读测试程序的文档以及脚本tests/test_name/test_name.py(比如tests/pktgen/pktgen.py)。实际上AutoTest就是使用该脚本来启动测试的(可能你已经注意到,
AutoTest脚本是用Python语言写的)。脚本sts/test_name/test_name.py的执行结果保存在目录results/default/test_name/中,该目录中的status文件包含着标识测试是否已经成功完成的信息。想取消正在进行的测试,按Ctrl+C即可。
如果你想连续运行一串测试,最好的做法是准备单独一个文件,该文件中包含着多个AutoTest的指令。这个文件中的指令和上面提到的控制文件中的指令类似。比如,文件samples/all_tests包含有运行所有可以测试指令,其中前五行如下

job.run_test(’aiostress’)
job.run_test(’bonnie’)
job.run_test(’dbench’)
job.run_test(’fio’)
job.run_test(’fsx’)

要运行这个文件中的指令所请求的全部测试,你可以做使用命令bin/autotest samples/all_tests。但是要记得这要花很长的时间才能完成。类似地,要运行定制的一串测试,得把为AutoTest准备的指令们放到一个文件里面,然后给这个文件起个名称,这个名称将作为命令行的一个参数传递给autotest.要并行地运行几个测试,你得准备一个特殊的控制文件,这个控制文件包含的指令如下:

def kernbench():
job.run_test(’kernbench’, 2, 5)
def dbench():
job.run_test(’dbench’)
job.parallel([kernbench], [dbench])

在测试执行的过程序中,在任何时间里,你都可以通过按Ctrl+C来停止它们。
为了造福那些不喜欢命令行和配置文件的朋友,ATCC (AutoTest Control Center )已经被发明出来了。如果你运行它,比如通过命令ui/menu,将会得到一个用菜单驱动的简单界面,你可以通过界面选择测试和profiling工具,浏览测试结果,还可以通过它来限制范围,配置它们。
如果你厌烦了AutoTest套件中包含的一系列工具,可以访问站点http://ltp.sourceforge.net/tooltable.php 。该站点有可以用于linux内核测试的全面的工具清单。

posts - 28, comments - 17, trackbacks - 0, articles - 0

Copyright © Test8848-谷峰