自动软件测试让您可以在一段时间内运行相同的测试,从而确保您所比较的内容具备真正的可比性。在本文中,Linux Test Project 团队的成员们分享了他们对 Linux® 内核进行压力所使用的测试的方法、原理以及脚本和工具。
在对 Linux 内核版本稳定性的测试中,需要明确地声明并证明为什么版本是稳定的或者是不稳定的。然而还没有被证明和证实当前现有的系统范围内的压力测试可以测试 Linux 内核整体上的稳定性。本文给出了一个创建系统范围内 Linux 压力测试并证明其结果正确性的方法。不同的 Linux 开发者、用户和发行版本会使用他们自己的方法来测试内核的稳定性。不过,关于他们决定运行哪些测试、覆盖的代码、达到的压力级别等的基础信息都没有发布,这就大大降低了结果的价值。
使用实验室的机器以及来自 Linux Test Project 测试套件的测试,我们基于系统资源的利用率统计开发了一个测试的组合,为系统提供足够的压力。我们对这个组合测试进行了分析,以确定 Linux 内核的哪些部分在测试执行中得到了使用。然后,我们修改了组合测试,在保持期望的高强度系统压力的同时提高代码覆盖率的百分比。最终得到的压力测试涵盖了 Linux 内核的足够多部分,有助于稳定性声明,并且有系统使用情况和内核代码覆盖情况的数据来支持它。
这一组合测试方法的四个步骤是:测试选择、系统资源利用率评价、内核代码覆盖分析以及最终的压力测试评价。
选择测试
测试选择包括选择达成两方面目的的测试:
测试应该可以得到 CPU(s)、内存、I/O 和网络等主要内核区域的高水平的资源利用率。
测试应该充分地覆盖内核代码,以帮助支持自其结果中生成的稳定性声明。
只要有可能,都要使用自动化的或者易于修改的测试,以支持自动操作。自动操作可以使得测试更快而且可以重复进行,并帮助降低人为错误的风险。选择合适的测试时需要考虑的另一个方面是,使用可以自由发布结果的应用程序。最好是选择坚决拥护开放源代码方法 和/或 GPL 的测试和测试套件,以助于确保发布过程的简便。
评价系统资源利用率
所选择的测试的组合必须给系统的资源带来足够的压力。Linux 内核的四个主要方面可以影响系统的响应和执行时间:
CPU:用于在机器的 CPU(s)上处理数据的时间。
Memory:用于自真实存储器中读写数据的时间。
I/O:用于自磁盘存储器读写数据的时间。
Networking:用于自网络读写数据的时间。
测试设计者应该使用下面这两个著名的且广为应用的开放源代码 Linux 资源监控工具来评价资源利用率水平。(请参阅本文稍后的 参考资料 以获得下载这些工具的链接。)
top:由 Albert D. Cahalan 维护着的一个开放源代码工具,包含于大部分 Linux 发行版本中,可用于当前的 2.4 和 2.6 内核。
sar:另一个开放源代码工具;它由 Sebastien Godard 维护。这个工具也包含于大部分 Linux 发行版本中,可用于当前的 2.4 和 2.6 内核。
方法中的系统资源利用率评价阶段通常需要多次尝试才能得到合适的测试组合,并得到期望水平的利用率。当确定测试组合时,过度利用总是一个至关重要的问题。例如,如果选择的组合过于受 I/O 所限,可能会导致 CPU 的测试结果不好,反之亦然。方法的这一部分主要是大量的试验和出错,直到所有资源达到期望水平。
top 工具可用于迅速确定每个测试影响哪个资源(CPU、内存或者 I/O),并实时地显示出它们使用了多少资源。 sar 工具用于收集一段时间内的网络利用率统计数据,并将所有利用率数据的快照记录到一个文件。
当选定一个组合后,测试必须长时间运行以准确评价资源的利用率。测试运行的时间长短取决于每个测试的长度。假如多个测试同时运行,则时间必须足够长以使得这些测试中最长的那个可以完成。在这个评价过程中,sar 工具也应该在运行。在评价运行的结论中,您应该收集并评价所有四种资源的利用率水平。
下面的例子显示了 sar 输出的 CPU、内存和网络利用率:
清单 1. sar 的输出示例
10:48:27 CPU %user %nice %system %iowait %idle
10:48:28 all 0.00 0.00 0.00 0.00 100.00
10:48:29 all 3.00 0.00 1.00 0.00 96.00
原文转自:http://www.uml.org.cn/Test/200707091.asp