Linux压力测试与LTP体系结构

2024-04-07 17:18

本文主要是介绍Linux压力测试与LTP体系结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、几个问题

开始正题之前,我们先看几个问题:什么是稳定性和可靠性?什么是压力测试?为什么要进行压力测试?

什么是稳定性和可靠性?
稳定性反映的是系统不会出现异常情况;可靠性反映的是系统能够保持正常运行而不受外界影响的能力。
系统的稳定性和可靠性通常以连续运转时间和系统的可靠运行时间来度量。

什么是压力测试?
压力测试是一种破坏性的测试,即系统在非正常的、超负荷的条件下的运行情况 。用来评估在超越最大负载的情况下系统将如何运行,是系统在正常的情况下对某种负载强度的承受能力的考验 。

为什么要进行压力测试?
通常我们用压力测试来判断系统的稳定性和可靠性。


了解了上面的问题之后,我们来看看该如何进行压力测试的设计。

二、压力测试的设计

在对Linux内核版本稳定性的测试中,需要明确地声明并证明为什么该版本是稳定的或者是不稳定的。不同的 Linux 开发者、 用户和发行商会使用他们自己的方法来测试内核的稳定性,但是,如果他们对运行了哪些测试、覆盖的代码、达到的压力级别等的基础信息都没有发布,那么这就会大大降低了结果的价值。

为此要有一个合适的测试方法来规范Linux内核稳定性的测试,以系统资源的利用率统计为基准制定了一个组合的测试方法,这一组合测试方法的四个步骤是:测试选择、系统资源利用率评价、内核代码覆盖分析以及最终的压力测试评价。


1 测试选择
  测试选择包括达成两方面目的的测试:
  - 测试应该可以得到 CPU(s)、内存、I/O 和网络等主要内核区域的高水平的资源利用率。
  - 测试应该充分地覆盖内核代码,以帮助支持自其结果中生成的稳定性声明。


2 评价系统资源利用率
  所选择的测试的组合必须给系统的资源带来足够的压力。Linux 内核的四个主要方面可以影响系统的 响应和执行时间:
  - CPU:用于在机器的 CPU(s)上处理数据的时间。
  - Memory:用于自真实存储器中读写数据的时间。
  - I/O:用于自磁盘存储器读写数据的时间。
  - Networking:用于自网络读写数据的时间。

系统资源利用率评价阶段通常需要多次尝试才能得到合适的测试组合,并得到期望水平的利用率。当确定测试组合时,过度利用总是一个至关重要的问题。例如,如果选择的组合过于受 I/O 所限,可能会 导致 CPU 的测试结果不好,反之亦然。方法的这一部分主要是大量的试验和出错,直到所有资源达到期望水平。
当选定一个组合后,测试必须长时间运行以准确评价资源的利用率。测试运行的时间长短取决于每个测试的长度。假如多个测试同时运行,则时间必须足够长以使得这些测试中最长的那个可以完成。在这个评价过程中,sar 工具也应该在运行。在评价运行的结论中,您应该收集并评价所有四种资源的利用率水平。


3 分析内核代码覆盖率
  获得足够的内核覆盖率是系统压力测试的另一个职责。尽管所选的测试组合充分地利用了四种主要资源,它也有可能只是执行了内核的一小部分。因而,应该对覆盖率进行分析以确保组合可以成为一个系统压力测试,而不是一个系统负载生成器。


4 评价最终压力测试
  之所以要执行方法中的这最后一步,是为了对系统压力测试进行核实。在一个被认为是稳定的内核上执行压力测试; 通常,发行版本中的内核可以满足这一要求,但不总是如此。要长时间地执行压力测试,同时运行sar 工具,原因有以下两点:
  - 长时间运行有助于发现组合中的所有问题,否则,在短时间的“取样测试(sniff test)”中这些问题可能会被忽略。
  - sar 生成的数据构成以后测试运行中进行比较的基线。
  
  长时间运行结束后,现在可以基于收集的所有数据来决定这个测试组合是否是系统压力测试的合适候选者。

三、LTP(Linux Test Project)

LTP工作组在设计Linux 内核压力测试脚本 ltpstress.sh 时使用了这一设计方法,为给系统提供足够的压力,LTP工作组对这个组合测试进行了分析,以确定 Linux 内核的哪些部分在测试执行中得到了使用。然后,修改了组合测试,在保持期望的高强度系统压力的同时提高代码覆盖率的百分比。最终得到的压力测试涵盖了Linux 内核的足够多部分,有助于稳定性声明,并且有系统使用情况和内核代码覆盖情况的数据来支持它。

有两个开放源代码工具可以帮助进行 Linux 内核的代码覆盖率分析:
  - gcov:一个由 LTP 维护的开放源代码工具。这个工具分析内核代码的覆盖率,并报告哪些行、函数和分支被覆盖以及它们被访问了多少次。
  - lcov:另一个由 IBM 开发,由 LTP 维护的开放源代码工具。 这个工具由一组构建于基于文本的 gcov 输出之上的 Perl 脚本构成,以实现基于 HTML 的输出。输出包括覆盖率百分比、图表以及概述页,可以快速浏览覆盖率数据。可以自LTP主页找到这两个工具。
lcov 工具会生成一棵完整的 HTML 树,其中包含有内核中代码的每一行以及关于每一行执行了 多少次的数据(如果有的话)。这个工具会量化覆盖率数据并生成关于内核中每一部分和 文件覆盖率的百分比数字。
内核的代码覆盖率分析只是在ltpstress.sh的设计和开发过程中用到,目的是保证lptsress.sh的可用性,我们在实际测试的时候就不需要再做内核的代码覆盖率分析了。

1 LTP的ltpstress.sh目标
ltpstress.sh的目标,是使用 LTP 测试套件对Linux 操作系统进行超长时间的测试,重点在于Linux 用户环境相关的工作负荷,而并不是致力于证明缺陷。这个应用程序组合了来自 LTP 的测试套件不同方面的多个测试以及内存和网络传输负载生成器。在执行之前,测试会根据系统中存在多少物理和虚拟内存来调整其总的内存使用情况。


2 ltpstress.sh的测试方法
测试方法有两个的阶段:一个是“初始测试”,一个是“压力测试”。通过初始测试是开始测试的必要条件。初始测试包括 LTP 测试套件在硬件和操作系统上成功运转,这些硬件和操作系统将用于可靠性运转。LTP 测试套件包附带的驱动程序脚本 runalltest.sh 用于验证内核。这个脚本串行地运行一组成包的测试,并报告全部结果。也可以选择同时并行地运行几个实例。默认地,这个脚本执行:

- 文件系统压力测试。
- 硬盘 I/O 测试。
- 内存管理压力测试。
- IPC 压力测试。
- SCHED测试。
- 命令功能的验证测试。
- 系统调用功能的验证测试。

压力测试可以验证产品在系统高使用率时的健壮性。作为 runalltest.sh 的补充,特别设计了一个名为 ltpstress.sh 的测试场景,在使用网络与内存管理的同时并行地运行大范围的内核组件,并在测试系统上生成高压力负荷。ltpstress.sh 也是 LTP 测试套件的一部分。这个脚本并行地运行相似的测试用例,串行地运行不同的测试用例,这样做是为了避免由于同时访问同一资源或者互相干扰而引起的间歇性故障。默认地,这个脚本执行:

- NFS 压力测试。
- 内存管理压力测试。
- 文件系统压力测试。
- 数学 (浮点) 测试。
- 多线程压力测试。
- 硬盘 I/O 测试。
- IPC (pipeio, semaphore) 测试。
- 系统调用功能的验证测试。
- 网络压力测试。


3 系统监控
LTP 测试套件附带的 top 工具是经过修改的,用作系统监控工具。使用 top 可以实时地观察处理器的行为。改进的 top 工具具有附加的功能,可以将 top 结果的快照保存到文件中,并给出结果文件的平均总结,包括 CPU、内存和交换空间利用率等信息。

在我们的测试中,sar工具每 10 秒钟截取一次系统利用率的快照,并保存到结果文件。

测试之前所有选定的测试系统的硬件配置尽可能相同。去掉额外的硬件以减少潜在的硬件故障。在映像安装过程中选择最低的安全选项。预留至少 2 GB 的硬盘空间以保存 top 数据文件和 LTP 日志文件。

在测试期间系统不要受到干扰。偶尔访问一下系统以确认测试仍在进行是可以接受的。确认的手段包括使用 ps 命令、检查 top 数据和检查 LTP 日志数据。


4 LTP的结构
LTP的目录结构基本上分为文档目录(doc)、测试驱动程序目录(pan)、测试脚本目录(testscripts)、测试用例库(testcase)、测试命令文件目录(runtest)、头文件目录(include)、库目录(lib)等。
Doc:该目录是说明文件和帮助文档的所在地,这个目录中对LTP的内容和每个工具都有详细的说明。
Pan:该目录存储的是LTP测试套件的测试驱动程序pan。
Testscripts:该目录中存储的是可执行的测试脚本,不同方面的测试脚本的集合。
Testcase:该目录存储了所有LTP测试套件中所使用的测试用例的源码。
Runtest:该目录中的每个文件都是要执行的测试用例的命令集合,每个文件针对测试的不同方面。
Include:LTP测试套件的头文件目录,定义了LTP自身的数据结构和函数结构。
Lib:LTP测试套件运行时自身需要的库文件,定义了LTP自身的各种函数。


5 LTP 的测试方法

LTP测试套件有一个专门的测试驱动程序pan,具体的测试用例的执行都是由pan来调用执行,它可以跟踪孤儿进程和抓取测试的输出信息。它的工作方式是这样的:
从一个测试命令文件中读取要测试的条目的要执行的命令行,然后等待该项测试的结束,并记录详细的测试输出。默认状态下pan会随机的选择一个命令行来运行,可以指定在同一时间要执行测试的次数。
pan会记录测试产生的详细的格式复杂的输出,但它不进行数据的整理和统计,数据整理统计的工作由scanner来完成,scanner是一个测试结果分析工具,它会理解pan的输出格式,并输出成一个表格的
形式来总结那些测试passed或failed。

6 LTP的实际运行
实际运行当中,您还需要配置一些必要的服务才可以正确的运行LTP的测试套件,以ltprunall.sh为例,它是不需要配置其他服务就可以运行的,但是对于ltpstress.sh,是需要配置一些相关服务之后才可以正确运行的,需要您配置的服务如下:

配置rsh和rlogin服务,使用户能以root身份不需密码验证直接登录本机。
开启xinetd服务。
在用户主目录下建立一个名为.rhosts的文件,文件内容是允许对本机进行rsh和rlogin操作的主机名和IP地址。一个相应的例子如下:
# vi .rhosts
test.my.domain
192.168.1.11
localhost.localdomain
127.0.0.1

配置工作最后要做的就是重启xinetd服务,因为rsh和rlogin是受xinetd服务控制的:
/etc/init.d/ xinetd restart

或service xinetd restart



http://shop104965075.taobao.comhttp://shop104965075.taobao.com

http://linuxeden.com/doc/24305.html


这篇关于Linux压力测试与LTP体系结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883202

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念