[引言]:在进行操作系统移植、适配完成后,需要对稳定性和性能进行测试。本文主要记录一下测试Linux主机性能的一些常用工具和测试方法。内容正在施工。
Linux稳定性与性能测试工具集和使用方法汇总
1.压力测试:
1.1 unixbench
unixbench是一个用于测试unix系统性能的工具,也是一个比较通用的benchmark, 此测试的目的是对类Unix 系统提供一个基本的性能指示,很多测试用于系统性能的不同方面,这些测试的结果是一个指数值(index value,如520),这个值是测试系统的测试结果与一个基线系统测试结果比较得到的指数值,这样比原始值更容易得到参考价值,测试集合里面所有的测试得到的指数值结合起来得到整个系统的指数值。
各项的测试有得分,然后有一个综合的得分,这样可以很方便的通过分数去比较。
源于1995 年,基线系统是“George”,一个工作站:SPARCstation 20‐61,128MB RAM,Solaris2.3,此系统的指数值被设定为10,所以,如果一个系统的最后结果分数为520,意思是指此系统比基线系统运行快52 倍。
UnixBench也包含一些非常简单的2D和3D图形测试。
UnixBench也支持多CPU系统的测试,默认的行为是测试两次,第一次是一个进程的测试,第二次是N份测试,N等于CPU个数。这样的设计是为了以下目标:
- 测试系统的单任务性能
- 测试系统的多任务性能
- 测试系统并行处理的能力
UnixBench一个基于系统的基准测试工具,不单纯是CPU 内存 或者磁盘测试工具。测试结果不仅仅取决于硬件,也取决于系统、开发库、甚至是编译器。
1.1.1 安装和运行测试
Unixbench-5.1.2.tar.gz 下载地址:http://soft.vpser.net/test/unixbench/
1 # 解压缩
2 tar -xzvf unixbench-5.1.2.tar.gz
3 # 进入解压缩路径
4 cd unixbench-5.1.2
5 # 编译
6 make
7 # 运行默认测试
8 ./Run
运行时可以直接指定测试核心数目
1 ./Run -c 32
运行时也可以指定执行多个测试任务
1 ./Run -c 1 -c 8 -c 16 -c 24 -c 32
1.1.2 可能出现的问题
测试环境:在VMware内使用ISO镜像文件建立的Ubuntu 20.04 LTS 虚拟机运行测试。
1.1.2.1 编译报错:找不到libXext
1 sudo apt-get install libxext-dev
1.1.2.2 编译报错:找不到cos/sin函数
打开Makefile,在“GL_LIBS = ”尾部增加“ -lm”
1.1.3 测试项目和结果解读
Dhrystone测试
测试聚焦在字符串处理,没有浮点运算操作。这个测试用于测试链接器编译、代码优化、内存缓存、等待状态、整数数据类型等,硬件和软件设计都会非常大的影响测试结果。
Whetstone 测试
这项测试项目用于测试浮点运算效率和速度。这项测试项目包含若干个科学计算的典型性能模块,包含大量的C语言函数,sin cos sqrt exp和日志以及使用整数和浮点的数学操作。包含数组访问、条件分支和过程调用。
Execl Throughput(execl 吞吐)测试
【注】这里的execl是类unix系统非常重要的函数,非办公软件的execl
这项测试测试每秒execl函数调用次数。execl是 exec函数家族的一部分,使用新的图形处理代替当前的图形处理。有许多命令和前端的execve()函数命令非常相似。
File Copy测试
这项测试衡量文件数据从一个文件被传输到另外一个,使用大量的缓存。包括文件的读、写、复制测试,测试指标是一定时间内(默认是10秒)被重写、读、复制的字符数量。
Pipe Throughput(管道吞吐)测试
pipe是简单的进程之间的通讯。管道吞吐测试是测试在一秒钟一个进程写512比特到一个管道中并且读回来的次数。管道吞吐测试和实际编程有差距。
Pipe-based Context Switching (基于管道的上下文交互)测试
这项测试衡量两个进程通过管道交换和整数倍的增加吞吐的次数。基于管道的上下文切换和真实程序很类似。测试程序产生一个双向管道通讯的子线程。
Process Creation(进程创建)测试
这项测试衡量一个进程能产生子线程并且立即退出的次数。新进程真的创建进程阻塞和内存占用,所以测试程序直接使用内存带宽。这项测试用于典型的比较大量的操作系统进程创建操作。
Shell Scripts测试
shell脚本测试用于衡量在一分钟内,一个进程可以启动并停止shell脚本的次数,通常会测试1,2, 3, 4, 8 个shell脚本的共同拷贝,shell脚本是一套转化数据文件的脚本。
System Call Overhead (系统调用消耗)测试
这项测试衡量进入和离开系统内核的消耗,例如,系统调用的消耗。程序简单重复的执行getpid调用(返回调用的进程id)。消耗的指标是调用进入和离开内核的执行时间。
Graphical Tests(图形)测试
由”ubgears”程序组成,测试非常粗的2D和3D图形性能,尤其是3D测试非常有限。测试结果和硬件,系统合适的驱动关系很大。
1.2 tress
该工具可以模拟CPU、内存、磁盘和I/O的负载,测试系统在高负载下的表现。
1.3 sysbench
该工具可以进行CPU、内存、文件IO和数据库性能测试。
Apache JMeter:该工具可用于测试Web应用的性能,模拟多用户并发访问等。
2.CPU测试
2.1 lmbench
该工具可用于评估系统的CPU性能,包括计算、内存访问等方面。
2.2 stress-ng
该工具可用于测试系统在高负载下的CPU性能。
3.内存测试:
3.1 memtest86+
该工具可用于测试计算机的内存是否正常工作。
3.2 stressapptest
该工具可用于测试系统内存的稳定性和可靠性。
4.硬盘/磁盘测试:
4.1 dd
Linux dd 命令用于读取、转换并输出数据。
dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
参数说明:
if=文件名:输入文件名,默认为标准输入。即指定源文件。
of=文件名:输出文件名,默认为标准输出。即指定目的文件。
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
conv=<关键字>,关键字可以有以下11种:
conversion:用指定的参数转换文件。
ascii:转换ebcdic为ascii
ebcdic:转换ascii为ebcdic
ibm:转换ascii为alternate ebcdic
block:把每一行转换为长度为cbs,不足部分用空格填充
unblock:使每一行的长度都为cbs,不足部分用空格填充
lcase:把大写字符转换为小写字符
ucase:把小写字符转换为大写字符
swap:交换输入的每对字节
noerror:出错时不停止
notrunc:不截短输出文件
sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
--help:显示帮助信息
--version:显示版本信息
#测试连续写入速度
dd if=/dev/zero of=./test.file bs=2G count=1 oflag=direct
#测试4K连续写入速度
dd if=/dev/zero of=./test.file bs=4K count=1000 oflag=direct
#测试连续读取速度
dd if=./test.file of=/dev/null bs=2G count=1 iflag=direct
#测试4K连续读取速度
dd if=./test.file of=/dev/null bs=4K count=1000 oflag=direct
4.2 fio
该工具可用于测试硬盘和文件系统的性能,包括顺序读写、随机读写等。
4.3 iozone
该工具用于测试文件系统的性能,包括随机读写、顺序读写等。
5.网络测试:
5.1 iperf
该工具可用于测量网络带宽、延迟和丢包率。
5.2 netperf
该工具可用于测试网络性能,包括吞吐量、延迟、连接数等。
6.显卡测试:
6.1 glmark2
该工具可用于测试显卡的3D图形性能。
6.3 phoronix-test-suite
该工具可以进行全面的硬件性能测试,包括显卡性能。