linux内核测试:多种测试linux内核的思路方法



1. 在平时工作中使用内核测试版本.

2. 在新内核上运行专用测试套件比如LTP.

3. 新内核安装后做些非常规事情.

4. 新内核安装后测试系统性能.

        当然测试过程它们可以混合运用所以可以认为它们是测试过程区别阶段


阶段:内核冒烟测试

        内核测试阶段很简单:我们尝试着启动内核然后把它用在平时工作中

        • 在以全功能配置启动系统的前推荐先用init=/bin/bash命令行参数来启动内核它使得内核只启动个bash进程这样你可以检查在最小配置下是否能正常挂载和卸载文件系统然后你可以测试些更加复杂内核功能比如挂起到disk或RAM缓冲这种情况下被挂载了模块是位于initrd映象中那些模块提到 了initrd映象通常你可以参考你boot loader文档来获取更多有关手工向内核传递命令行信息(我们观点是如果使用是GRUB会更容易操作些)

        • 接着建议以runlevel 2来启动系统(通常是通过把数字2作为命令行参数传递给内核)这时网络服务器和X服务器还没启动(你系统有可能为这个用途使用是另个runlevel尽管不大可能所以你应该查看/etc/inittab文件确认下)在这个配置下你可以检查网络接口是否能工作你还可以尝试手工启动X服务器来确认它不会崩溃掉

        • 最后根据需要你可以把系统启动到runlevel 5(也就是全功能)或者3(也就是除了X全功能开启)
        现在你已经可以按平时样子使用系统段时间了但是如果想快点测试内核你可以执行些典型操作比如下载些文件读取邮件浏览些站点抓取些音轨(我们假设使用是合法买来音频CD)刻录张CD或DVD等等操作来连续地检查是否有任何项会出错出错就意味着内核有问题存在了

阶段 2(自动测试)

        测试阶段是使用专门设计来检查特定内核子系统能否正常工作我们还执行内核退化以及性能测试后者对于内核开发员(还有我们)来说相当地重要它使得我们能识别出损害性能改变比如如果我们把内核从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包含有运行所有可以测试指令其中前 5行如下

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内核测试全面工具清单

阶段 3 容错性测试

        你新内核已经通过了测试前两个阶段了吗?现在可以开始实验了那就是些任何个正常人在普通工作中都不会做蠢事没人会知道那些蠢事会导致内核崩溃那到底需要做些什么事呢?好如果存在个“标准那它当然早就被包含在些测试套件中了

        例如第 3阶段可以从拔掉和重插USB设备开始从理论上讲重插个USB设置不应该会产生任何事情至少从用户角度看来如果USB子系统存在bug,连续进行很多次这样测试就可能会导致内核崩溃(这个测试如果出现问题介绍说明了的前未曾有人在类似系统配置下尝试这个测试)
        接下来你可以编写个脚本连续读取/proc目录中文件内容等等句话在这阶段你应该做些普通用户永远不会做事(或者极常少做:为什么有人会不断重复地挂载和卸载某个文件系统呢?)


Tags:  深入理解linux内核 linux内核 linux内核升级方法 linux内核测试

延伸阅读

最新评论

发表评论