对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、内存和网络利用率:

 
   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
10:48:30 all 100.00 0.00 0.00 0.00 0.00
10:48:31 all 100.00 0.00 0.00 0.00 0.00 02:27:31
kbmemfree kbmemused %memused kbswpfree kbswpused %swpused
02:29:31 200948 53228 20.94 530104 0 0.00 02:31:31
 199136 55040 21.65 530104 0 0.00 02:33:31
198824 55352 21.78 530104 0 0.00 02:35:31
199200 54976 21.63 530104 0 0.00 02:27:31
IFACE rxpck/s txpck/s rxbyt/s txbyt/s 02:29:31
 eth0 738.79 741.66 76025.55 136941.85 02:31:31
eth0 743.30 744.97 76038.82 136907.77 02:33:31
eth0 744.80 745.02 76135.53 136901.38 02:35:31
eth0 742.35 744.34 75947.45 136864.77

清单 1. sar 的输出示例

 
  分析内核代码覆盖率
 
  获得足够的内核覆盖率是系统压力测试的另一个职责。尽管所选的测试组合充分地利用了四种主要资源,它 也有可能只是执行了内核的一小部分。因而,您应该对覆盖率进行分析以确保组合可以成为一个系统压力 测试,而不是一个系统负载生成器。当前,有两个开放源代码工具可以帮助进行 Linux 内核的代码覆盖率分析:
 
  gcov:一个由 Linux Test Project 维护的开放源代码工具。 这个工具分析内核代码的覆盖率,并报告哪些行、函数和分支被覆盖以及它们被访问了多少次。
 
  lcov:另一个由 IBM 开发,由 Linux Test Project 维护的开放源代码工具。 这个工具由一组构建于基于文本的 gcov 输出之上的 Perl 脚本构成,以实现基于 HTML 的输出。 输出包括覆盖率百分比、图表以及概述页,可以快速浏览覆盖率数据。您可以自 Linux Test Project(LTP)主页 找到这两个工具(参阅 参考资料 以获得链接)。
 
  gcov 模块加载以后,所有运行于系统压力测试组合中的测试都必须执行。尽管原来的系统压力测试可以同时执行, 也应该同时执行,但是这次运行应该是循环进行的。每个测试都应该运行一次直到结束,一个接一个地运行, 不能重复运行任何测试。单个地、循环地运行,是为了减少在同时运行多个系统压力测试时,内核尝试 去平衡它们的负载而导致的不可预知的和无目的的内核代码执行。您应该在最后一个测试运行结束后再进行 gcov 分析。由于最终是要格式化数据以进行分析,所以运行 lcov 工具并加载 gcov 模块。
 
  lcov 工具会生成一棵完整的 HTML 树,其中包含有内核中代码的每一行以及关于每一行执行了 多少次的数据(如果有的话)。这个工具会量化覆盖率数据并生成关于内核中每一部分和 文件覆盖率的百分比数字。
 

本文作者:

对Linux系统内核版本稳定性测试介绍的更多相关文章

  1. [转贴]LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project

    https://blog.csdn.net/melody157398/article/details/24354415   LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---I ...

  2. LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project

    LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project Peter盼 2014-04-23 11:25:49  20302  收藏  ...

  3. LTP--linux稳定性测试 linux性能测试 ltp压力测试 内核更新 稳定性测试

    LTP--linux稳定性测试 linux性能测试 ltp压力测试 zhangzj1030关注14人评论33721人阅读2011-12-09 12:07:45   说明:在写这篇文章之前,本人也不曾了 ...

  4. LTP--linux稳定性测试 linux性能测试 ltp压力测试 ltp-pan

    LTP--linux稳定性测试 linux性能测试 ltp压力测试 zhangzj1030关注14人评论33710人阅读2011-12-09 12:07:45   说明:在写这篇文章之前,本人也不曾了 ...

  5. 1.3查看Linux内核版本

    1.目前Linux内核主要维护的三个版本:Linux2.4.Linux2.6和Linux3.x,Android使用的是Linux2.6:Linux3.x是最新推出的Linux内核版本: 2.查看Lin ...

  6. 五年26个版本:Linux系统内核全程回顾

    Phoronix.com今天将他们对Linux系统的研究发挥到了极致:从2005年年中的2.6.12,到正在开发中的2.6.37,五年多来的26个Linux内核版本来了个“群英荟萃”! 完成如此庞大规 ...

  7. Linux查看版本当前操作系统内核信息

    1. # uname -a (Linux查看版本当前操作系统内核信息) 输出 Linux xxx --generic #~-Ubuntu SMP Wed Jul :: UTC x86_64 x86_6 ...

  8. Linux内核版本介绍与查询

    Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...

  9. Linux 发行版本介绍

    引言 Linux 有非常多的版本,比如世面上常见的有 Ubuntu.RedHat.Fedora.Centos 等,这么多的版本我们究竟该选哪一个呢?对于 Linux 初学者有必要对这些 Linux 发 ...

随机推荐

  1. 配置Java环境变量时的一个常见错误

    我们在把JDK路径配置为环境变量时,有一个常用的配置方法,就是把JDK根路径配置为"JAVA_HOME"值,然后在Path中添加一条"%JAVA_HOME%\bin&qu ...

  2. K8S 上部署 Redis-cluster 三主三从 集群

    介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合. 由于Re ...

  3. JMeter元件作用域实践指南

    从一个问题说起 对于以下测试脚本: 为了能调用进入房间接口,需要从考场接口获取考场token.为了调用考场接口,需要从登陆接口获取登陆token.元件说明如下: 学生登录,提取登录${token}传入 ...

  4. [状压DP]吃奶酪

    吃 奶 酪 吃奶酪 吃奶酪 题目描述 房间里放着 n n n 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 ( 0 , 0 ) (0,0) (0,0)点处. 输入 第一行有一个整 ...

  5. Dynamics CRM使用JS隐藏自定义按钮

    在我们平时客制化开发的时候会经常遇到要制作自定义按钮的情况,而这个自定义按钮的功能又经常会有一些隐藏逻辑需要实现,所以每次通过获取控件查找这个按钮再隐藏比较麻烦,而且偶尔会出现代码没起作用的效果.下面 ...

  6. 期末考试复习c#时总结的抽象类与接口的一些区别

    抽象类: (1)抽象类中可以定义抽象方法,属性,变量 (2)抽象类的派生类必须实现所有的抽象方法.要求所有的派生非抽象类都要用override重写实现抽象方法. (3)抽象类可以存放抽象方法,属性,也 ...

  7. Oracle-buffer cache过小导致SQL执行时间长

    一.问题:客户反馈在生产库和测试库执行相同SQL,测试库执行比生产库慢一倍 问题摆在这里,需要进行分析? 啥??? 版本11.2.0.4,都是单实例,主机系统硬件配置差不多. 二.对比SQL的执行效率 ...

  8. Spring Boot demo系列(二):简单三层架构Web应用

    2021.2.24 更新 1 概述 这是Spring Boot的第二个Demo,一个只有三层架构的极简Web应用,持久层使用的是MyBatis. 2 架构 一个最简单的Spring Boot Web应 ...

  9. 从西天取经的九九八十一难来看Java设计模式:模板方法模式

    目录 示例 模板方法模式 定义 意图 主要解决问题 适用场景 优缺点 西天取经的九九八十一难 示例 当我们设计一个类时,我们能明确它对外提供的某个方法的内部执行步骤, 但一些步骤,不同的子类有不同的行 ...

  10. java中的|=符号

    今天看mybaits源码的时候,发现了这个特殊的符号用法,|=. for (ParameterMapping pm : boundSql.getParameterMappings()) { Strin ...