8.3负载生成工具
8.3 负载生成工具实时性测试不仅要满足系统空载或低负载时的时延要求还必须满足高负载情况下的时延要求。通过负载生成工具模拟高负载场景进行压力测试是评估实时系统在高负载情况下的稳定性和可靠性的有效手段。压力测试是一种破坏性的测试即系统在非正常的、超负荷的条件下的运行情况 。用来评估在超越最大负载的情况下系统将如何运行是系统在正常的情况下对某种负载强度的承受能力的考验。dohell是 Xenomai 测试套件中的一项工具旨在生成高负载条件从而测试系统的响应与稳定性。dohell自身可以生成不同的负载同时支持调用外部工具hackbench和 LTP 测试套件以生成更为复杂的负载。stress工具也可以用于生成高负载但其功能更为简单更为常用。它用于生成 CPU、内存、磁盘等资源的高负载。不同的负载加压工具所生成的系统负载类型、强度及运行时间都有所不同。在进行带负载的实时性对比测试时应该使用相同的负载工具及参数以公正地评估系统的稳定性、性能及反应能力。8.3.1dohell脚本解析与功能说明dohell脚本的主要作用是在指定时间内生成多种类型的高负载以便对系统进行压力测试检验系统在高负载条件下的稳定性、性能及反应能力。这些负载包括但不限于模拟网络流量、磁盘写入操作、进程生成与调度以及中断处理等从而全面考验系统的极限能力。1. 选项说明dohell脚本提供了一系列命令行选项允许用户根据具体需求调整负载生成方式和强度。以下是dohell脚本中所支持的主要选项及其说明/usr/xenomai/bin/dohell [ -b path ] [ -s server ] [ -p port ] [ -m mntpoint ] [ -l path | seconds ] Generate load, using an assorted set of commands and optionnaly: - hackbench if the path to the hackbench binary is specified with -b; - nc to send TCP data to server port port if -s is specified (if -p is not specified, the port 9, aka discard is used); - dd to write data under mntpoint if -m is specified. during the runtime of the LTP test if the path to the LTP installation directory is specifed with -l or during seconds seconds.选项说明-b指定hackbench可执行文件的路径。hackbench是一个用于模拟多线程环境下进程调度与同步机制压力测试的工具。-s指定目标服务器的 IP 地址用于模拟向该服务器发送大量 TCP 数据流。-p指定发送 TCP 数据的端口号默认值为 9Discard 端口。-m指定一个挂载点路径用于模拟向该路径写入大量数据的操作。-l指定 LTPLinux Test Project的安装目录路径以便在系统运行 LTP 测试套件期间生成高负载。-h显示脚本的使用说明信息。如果用户未指定 LTP 安装目录-l则必须提供一个时间参数作为脚本的运行时长。例如dohell 60表示脚本将在运行 60 秒后结束负载生成并终止相关进程。2. 负载类型dohell脚本生成的高负载主要包含以下几种类型默认负载使用cat /proc/interrupts命令循环监控系统的中断处理情况。使用ps w命令循环监控系统当前运行的进程状态包括进程的详细信息。使用dd if/dev/zero of/dev/null命令模拟磁盘写入操作但目标文件为/dev/null实际上不会占用磁盘空间。使用ls -lR /命令循环递归列出文件系统的全部内容并丢弃输出结果模拟文件系统 I/O 压力。进程生成与调度使用hackbench工具生成高负载的进程调度任务。hackbench工具是 rt-tests 套件中的一部分既是 Linux 内核调度器的基准测试工具也是一种压力测试工具。可以指定启动指定数量的进程进行竞争模拟多进程环境下的调度压力。具体操作为循环运行命令$hackbench 1其传入的参数1没有实际意义。最终用默认参数运行以进程模式运行包含 10 组每组使用 40 个文件描述符 400 个任务每个发送者将传递 100 条 100 字节的消息。网络流量模拟使用nc或netcat发送大量 TCP 数据到指定的服务器和端口。通过循环读取/tmp/netcat.data文件中的数据并每 15 秒发送一次来模拟持续的网络流量。磁盘写入操作使用dd命令向指定的挂载点路径写入大量数据模拟磁盘 I/O 压力。具体操作为循环从/dev/zero设备读取数据并写入到mntpoint/bigfile文件中每次写入 100MB 数据之后执行同步操作。LTP 测试套件如果用户指定了 LTP 安装目录路径-l则调用 LTP 测试套件runalltests.sh执行 LTP 中定义的初始一系列的测试用例。包括文件系统压力测试、硬盘 I/O 测试、内存管理压力测试、IPC 压力测试、SCHED 测试、命令功能的验证测试、系统调用功能的验证测试。3. 其他设计细节系统配置调整脚本会在运行期间将/proc/sys/kernel/hung_task_timeout_secs设置为 0以禁用内核挂起任务超时检测功能从而避免在高负载情况下因检测到假阳性而产生日志干扰。进程管理脚本在生成高负载的过程中会将所有负载生成进程的 PID 保存到变量pids中。在负载生成结束后脚本会通过kill命令终止所有已记录的负载生成进程然后等待 5 秒钟最后通过killall -KILL命令强制终止所有相关进程确保测试结束后系统状态的恢复。综上所述dohell脚本作为 Xenomai 测试套件的一部分其主要功能是在指定时间内生成多种类型的高负载以便对系统进行全面的压力测试。8.3.2 调度器基准测试/压力测试工具hackbenchhackbench工具是 rt-tests 套件中的一部分既是 Linux 内核调度器的基准测试工具也是一种压力测试工具。它的主要任务是创建指定数量的可调度实体对可以是线程或传统进程这些实体对通过套接字或管道进行通信并测量每对实体相互发送和接收数据所需的时间。因此此外它在一定程度上也对进程间通信例如本地套接字、管道施加了压力。然而由于该程序不测试与设备的通信因此无法准确模拟任何特定实时RT应用程序所产生的负载。hackbench V 2.20 Usage: hackbench options -f --fdsNUM number of fds -F --fifo use SCHED_FIFO for main thread -g --groupsNUM number of groups to be used -h --help print this message -l --loopsLOOPS how many message should be send -p --pipe send data via a pipe -s --datasizeSIZE message size -T --threads use POSIX threads -P --process use fork (default)-f, --fds文件描述符数:定义每个子进程应使用的文件描述符数量。请注意实际使用的数量将是您设置值的两倍因为发送者和接收者的子进程各自都会打开指定数量的文件描述符。默认值为20。-F, --fifo:使用 SCHED_FIFO 策略来调度主线程默认不使用 SCHED_FIFO。-g, --groups组数:定义应启动的发送者和接收者组的数量默认为10。-h, --help: 显示使用说明信息。-l, --loops循环次数:设置每个发送者/接收者对发送的消息数量。默认值为100。-p, --pipe:通过管道发送数据而不是通过套接字默认使用套接字。-s, --datasize字节数:设置每条消息中发送的数据量。默认值为100。-T, --threads: 每个发送者/接收者将作为父进程的一个子线程运行使用pthread_create()创建。-P, --process: 每个发送者/接收者将作为父进程的一个子进程运行使用fork()创建。示例 1: 不带任何选项运行 hackbench 将使用默认行为即使用 fork() 并通过套接字在发送者和接收者之间传输数据。userhost: ~ $ hackbench 以进程模式运行包含 10 组每组使用 40 个文件描述符 400 个任务 每个发送者将传递 100 条 100 字节的消息 时间0.890示例 2若要在发送者和接收者之间使用管道并使用线程而非 fork()请运行userhost: ~ $ hackbench --pipe --threads (或 hackbench -p -T) 以线程模式运行包含 10 组每组使用 40 个文件描述符 400 个任务 每个发送者将传递 100 条 100 字节的消息 时间0.497示例 3设置数据大小为 512 字节每个发送者/接收者对发送 200 条消息使用 15 组每个子进程使用 25 个文件描述符以进程模式运行。userhost: ~ $ hackbench -s 512 -l 200 -g 15 -f 25 -P 以进程模式运行包含 15 组每组使用 50 个文件描述符 750 个任务 每个发送者将传递 200 条 512 字节的消息 时间4.4978.3.3 LTPLinuxTest Project测试套件LTPLinuxTest Project是SGI、IBM、OSDL和Bull合作的项目目的是为开源社区提供一个测试套件用来验证Linux系统可靠性、健壮性和稳定性。LTP测试套件是测试Linux内核和内核相关特性的工具的集合。该工具的目的是通过把测试自动化引入到Linux内核测试提高Linux的内核质量。LTP提供了验证linux系统稳定性的标准设计标准的压力场景通过对linux系统进行压力测试对系统的功能、性能进行分析并以此确定linux系统的可靠性、健壮性和稳定性。LTP 的测试用例通常分为5类系统调用System Calls、I/O系统I/O System、文件系统File System、进程竞争Process Contention和网络测试Network Testing。它们可以用来测试不同类型的 Linux 内核行为和功能比如内存管理、文件系统等。LTP 的测试方法有两个阶段: 初始测试和压力测试。第一阶段: 初始测试主要用于测试系统的可靠性包括LTP测试套件在硬件和操作系统上24小时的成功运转。第二阶段: 压力测试主要验证产品在系统高使用率时的健壮性。1. 初始测试初始测试的测试脚本是runalltests.sh或runltp(runltp默认执行的内容与runalltests相同)。在执行runltp脚本的时可以指定参数添加你需要的测试的项目在/testscripts内。初始测试是对linux系统主要项目不是全部进行测试。包括文件系统压力测试。硬盘 I/O 测试。内存管理压力测试。IPC 压力测试。SCHED 测试。命令功能的验证测试。系统调用功能的验证测试。执行命令./runalltests.sh 或者 ./runltp -p -l /tmp/resultlog.20111207 -d /tmp -o /tmp/ltpscreen.20111207 -t 24h -p人为指定日志格式,保证日志为可读格式 -l记录测试日志的文件 -d指定临时存储目录,默认为/tmp -o直接打印测试输出到/tmp/ltpscreen.20111207 -t:指定测试的持续时间 -t 60s 60 seconds -t 45m 45 minutes -t 24h 24 hours -t 2d 2 days在 dohell 脚本中可以通过指定 LTP 安装目录路径-l来执行 LTP 测试套件。其实际执行的测试脚本为runalltests.sh。2. 压力测试压力测试可以验证产品在系统高使用率时的健壮性。作为runalltests.sh的补充特别设计了一个名为ltpstress.sh的测试场景在测试系统上生成高压力负荷。ltpstress.sh 压力测试主要执行:NFS 压力测试。内存管理压力测试。文件系统压力测试。数学 (浮点) 测试。多线程压力测试。硬盘 I/O 测试。IPC (pipeio, semaphore) 测试。系统调用功能的验证测试。网络压力测试。执行命令./ltpstress.sh -d /tmp/sardata -l /tmp/ltpstress.log -I /tmp/iofile -i 5 -m 128 -t 24 -S -d datefile 指定sar或top记录文件默认是/tmp/ltpstress.data -i #in sec 指定sar或top快照时间间隔默认是10s -I iofile 记录iostat结果到isofile默认是/tmp/ltpstress.iostat -l logfile 记录测试结果到logfile默认是/tmp/ltpstress -m #(in Mb) 指定最小的内存使用 -n 不对网络进行压力测试 -S 用 sar捕捉数据 -T 利用LTP修改过的top工具捕捉数据 -t duration 指定时间的设置注意在使用ltpstress.sh脚本的之前需要对系统进行配置rsh必须配置完毕并在运行。内核支持NFS并且安装NFS软件。sar或top工具需要被安装。参考https://blog.csdn.net/weixin_41028621/article/details/107434624https://zhuanlan.zhihu.com/p/14521507992https://www.cnblogs.com/xiaomawo/p/179847978.3.4stress工具解析与功能说明stress工具是 Linux 系统中一个用于生成 CPU、内存、磁盘等资源的高负载的工具。stress-ng是stress的升级版它兼容stress的选项并提供更多的选项和能力。在嵌入式系统中stress更为常用本文主要介绍stress工具的基本使用方法。其语法格式如下stress options 常用选项 -c, --cpu N 产生 N 个进程每个进程都反复不停的计算随机数的平方根 -i, --io N 产生 N 个进程每个进程反复调用 sync() 将内存上的内容写到硬盘上 -m, --vm N 产生 N 个进程每个进程不断分配和释放内存 --vm-bytes B 指定分配内存的大小 --vm-stride B 不断的给部分内存赋值让 COW(Copy On Write)发生 --vm-hang N 指示每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒然后释放内存一直重复执行这个过程 --vm-keep 一直占用内存区别于不断的释放和重新分配(默认是不断释放并重新分配内存) -d, --hadd N 产生 N 个不断执行 write 和 unlink 函数的进程(创建文件写入内容删除文件) --hadd-bytes B 指定文件大小 -t, --timeout N 在 N 秒后结束程序 --backoff N 等待N微妙后开始运行 -q, --quiet 程序在运行的过程中不输出信息 -n, --dry-run 输出程序会做什么而并不实际执行相关的操作 --version 显示版本号 -v, --verbose 显示详细的信息stress工具支持同时设置多个选项例如可以通过--cpu 4 --vm 4同时模拟CPU和内存负载。示例 1 压测CPU# 使用4个CPU进程测试60秒 stress-ng --cpu 4 --timeout 60s示例 2 压测内存# 开启2个进程分配内存每次分配1GB内存保持60秒后释放60秒后退出。 stress --vm 2 --vm-bytes 1G --vm-hang 60 --timeout 60s示例 3 压测磁盘# 产生2个进程每个进程不停的调用sync()将内存上的内容写到硬盘上测试60秒 stress --io 2 --timeout 60s示例 4 压测磁盘及CPU# 使用4个CPU进程2个I/O进程测试60秒 stress-ng --cpu 4 -i 2 --timeout 60s示例 5 压测磁盘及IO# 一个进程不断的在磁盘上创建 10M 大小的文件并写入内容 stress-ng -d 10 --hdd-bytes 100M参考https://blog.csdn.net/code_lyb/article/details/135840458
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2422453.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!