linux 测试程序性能,linux 压力测试性能IO MEM CPU

一、文件系统测试工具简介

1、LTP

LTP(Linux Test Project)是由SGI和IBM联合发起的项目,提供一套验证Linux系统可靠性、健壮性、稳定性的测试套件,也可用来进行POSIX兼容测试和功 能性测试。LTP提供了2000多个测试工具,可以根据需要自行进行定制。同时,LTP还是一个优秀的自动化测试框架,基于它通过设计测试用例和测试工具 可以实现更多功能的测试自动化。

稳定性测试相关参考:

2、fstest

fstest是一套简化版的文件系统POSIX兼容性测试套件,它可以工作在FreeBSD, Solaris, Linux上用于测试UFS, ZFS, ext3, XFS and the NTFS-3G等文件系统。fstest目前有3601个回归测试用例,测试的系统调用覆盖chmod, chown, link, mkdir, mkfifo, open, rename, rmdir, symlink, truncate, unlink。

该用例测试以上几个常用的文件系统调用,涉及用例约2K条左右,基于Android系统的测试,需要将相关测试用例的shell脚本稍微做下适配,可以基 于busybox下的相关命令(如dirname修改为busybox dirname),另外还需要适配主脚本“misc.sh”里面的相关命令

3、locktests

locktest用于fcntl锁功能的压力测试。运行时,主进程先在指定文件区域设置字节范围的记录锁,然后多个从进程尝试在该文件区域执行read, write, 加新锁操作。这些操作结果是可预期的(矩阵如下),如果操作结果与预期一致则测试通过,否则测试失败。

Expected results

Here is the table of expected results, depending on :Slave test operations (READ, WRITE, SET A WRITE LOCK … )

Master Operation (SET A READ LOCK, SET A WRITE LOCK )

Slave types (Processes, threads)

Locking profile (POSIX locking, Mandatory locking)Master

Slave typeTest operationadvisorylockingmandatorylocking

read lockwrite lockread lockwrite lock

threadset a read lockAllowedAllowedAllowedAllowed

set a write lockAllowedAllowedAllowedAllowed

readAllowedAllowedAllowedAllowed

writeAllowedAllowedAllowedAllowed

processset a read lockAllowedDeniedAllowedDenied

set a write lockDeniedDeniedDeniedDenied

readAllowedAllowedDeniedAllowed

writeAllowedAllowedDeniedDenied

4、PCTS

PCTS(Posix Complicance Testing Suite),POSIX一致性测试套件,是从POSIX标准出发,通过严格的、定量地测试,以验证、评价、认证操作系统符合POSIX标准的程序的测试 软件。IEEE std2003.1是PCTS的设计标准,常见的PCTS主要有VSX-PCTS、NIST-PCTS、OPTS-PCTS三种实现,上面提供的连接为 VSX-PCTS。

5、iozone

Iozone是目前应用非常广泛的文件系统测试标准工具,它能够产生并测量各种的操作性能,包括read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread ,mmap, aio_read, aio_write等操作。Iozone目前已经被移植到各种体系结构计算机和操作系统上,广泛用于文件系统性能测试、分析与评估的标准工具。

6、Postmark

Postmark 是由著名的 NAS 提供商 NetApp 开发,用来测试其产品的后端存储性能。Postmark主要用于测试文件系统在邮件系统或电子商务系统中性能,这类应用的特点是:需要频繁、大量地存取小 文件。 Postmark 的测试原理是创建一个测试文件池。文件的数量和最大、最小长度可以设定,数据总量是一定的。创建完成后, Postmark 对文件池进行一系列的事务( transaction )操作,根据从实际应用中统计的结果,设定每一个事务包括一次创建或删除操作和一次读或添加操作,在有些情况下,文件系统的缓存策略可能对性能造成影响, Postmark 可以通过对创建 / 删除以及读 / 添加操作的比例进行修改来抵消这种影响。事务操作进行完毕后, Post 对文件池进行删除操作,并结束测试,输出结果。 Postmark是用随机数来产生所操作文件的序号,从而使测试更加贴近于现实应用。输出结果中比较重要的输出数据包括测试总时间、每秒钟平均完成的事务 数、在事务处理中平均每秒创建和删除的文件数,以及读和写的平均传输速度。

一、Postmark原理

Postmark是由着名的NAS提供商NetApp开发,用来测试其产品的后端存储性能。

Postmark主要用于测试文件系统在邮件系统或电子商务系统中性能,这类应用的特点是:需要频繁、大量地存取小文件。

Postmark的测试原理是创建一个测试文件池。文件的数量和最大、最小长度可以设定,数据总量是一定的。创建完成后,Postmark对文件池进行一 系列的事务(transaction)操作,根据从实际应用中统计的结果,设定每一个事务包括一次创建或删除操作和一次读或添加操作,在有些情况下,文件 系统的缓存策略可能对性能造成影响,Postmark可以通过对创建/删除以及读/添加操作的比例进行修改来抵消这种影响。事务操作进行完毕后,Post 对文件池进行删除操作,并结束测试,输出结果。

Postmark是用随机数来产生所操作文件的序号,从而使测试更加贴近于现实应用。

输出结果中比较重要的输出数据包括测试总时间、每秒钟平均完成的事务数、在事务处理中平均每秒创建和删除的文件数,以及读和写的平均传输速度。

二.Postmark的安装:

postmark软件只有一个.c文件,在gcc下编译即可。假定编译之后的可执行文件名为postmark。

三.postmark命令集3.1 postmark命令解析

postmark的操作是在命令行的环境下的。

一个配置文件(在命令行中被指定)包含了一组可以直接运行的命令。

在命令行提示下,有如下命令:

pm > ?

set size : 设置文件大小的上限和下限。(low bound and high bound)

set number : 设置并发的文件数(simultaneous files)

set seed : 为随机数产生器设置种子(sets seed for random number generator)

set transactions : 设置事务处理的数目(set number of transactions)

set location : 设定工作文件的location(sets location of working files)

set read : 设定读取block的大小(sets read block size)

set write : 设定写block的大小(sets write block size)

set buffering : (set usage of buffered I/O)

set bias read : 设置读操作发生的频率(sets the chance of choosing read over append)

set bias create : 设置删除操作发生的频率(sets the chance of choosing create over delete)

run : 运行该软件

show : 显示当前的配置信息(displays current configuration)

help : 显出可用的命令(prints out available commands )

quit : Exit program

pm >

show命令显示可用于下次run的当前的配置信息。系统的默认配置信息如下:

pm>show

Current configuration is:

Transactions: 500 事务处理的数目是500个;

Files range between 500 bytes and 9.77 kilobytes in size

文件大小的上下限分别是500字节和9.77K字节。

Random number generator seed is 42 随机数产生器的种子是42

The base number of files is 500 并发的文件数是500个

The working directory is: . 工作目录是 .

Block sizes are: read=512 bytes, write=512 bytes 块大小是:读:512字节,写:512字节

Biases are: read/append=5, create/delete=5

读/追加发生的概率相等;创建/删除发生的概率相等。

Using Unix buffered file I/O 文件操作将使用标准的缓冲区I/O

pm>

If this configuration is run:

500 files will be initially created, between .. and 10 Kilobytes in size

The files will be processed in the current directory

All reads will occur in 512 byte blocks

All writes will occur in 512 byte blocks

Reads and appends are equally likely to occur

Creates and deletes are equally likely to occur

File operations will be performed using the standard buffered I/O in the runtime library

部分命令解释:

pm > set size 10000 20000 表示文件大小的下限是10000字节,文件大小的上限是20000字节;

pm > set size 15000 表示文件的大小只能固定是15000字节,不能变化。

pm > set number 整数 注意:后面的整数可以是任何大于1的整数,但是要保证文件系统有足够的空间来存放结果文件;设置并发的文件数;

pm > set seed 整数; 表示随机数产生器的种子。注意:任何整数都是可以的。但是这个项很少被自行设置,因为改变这个数之后测试结果将与原先测试的结果不同。

pm > set transaction 表示即将到来的下一次run中读/追加、创建/删除等操作的事务数目。任何大于1的整数都是可以的。

pm > set location 表示程序运行过程中产生文件的工作目录。例如:pm > set location user2/tmp

pm > set read 整数 以及 pm > set write 整数 表示从文件中一次读取的数据的大小或者一次写进文件的数据的大小。这两个整数的取值范围是:1 

pm > set buffering true(默认是true) 或者 pm > set buffering false

true表示buffering is enabled.

false表示buffering is not enabled.

pm > set bias read整数 和 pm > set bias create 整数 两个整数分别表示该操作发生的频率;

其取值范围是:-1,0,1,2,3,…,10

当取值为-1时,表示系统禁止read和append这两个操作;取值从0到10变化过程中,值越小,表示read操作发生的几率小于append操作发 生的几率;值越大,表示read操作发生的几率大于append操作发生的几率。默认是5,表示read和append两种操作发生的几率相等。

同样,对于pm > set bias write 整数 和 pm > set bias delete 整数 两个整数分别表示该操作发生的频率;

其取值范围是:-1,0,1,2,3…10;

当取值为-1时,表示系统禁止write和delete这两个操作;取值从0到10变化过程中,值越小,表示write操作发生的几率小于delete操 作发生的几率;值越大,表示write操作发生的几率大于delete操作发生的几率。默认是5,表示write和delete两种操作发生的几率相等。

set bias read n n为read/append中read所占比例 n/10

set bias create n create/delete中create所占比例 n/10

set report verbose(default)/terse 设置报告模式,terse模式的输出没有文字说明,便于通过批处理运行多个测试之后,使用excel对结果进行分析

pm > run 命令表示在当前的配置下运行程序

7、fio

fio是一个I/O标准测试和硬件压力验证工具,它支持13种不同类型的I/O引擎(sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio等),I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs等等。fio可以支持块设备和文件系统测试,广泛用于标准测试、QA、验证测试等,支持Linux, FreeBSD, NetBSD, OS X, OpenSolaris, AIX, HP-UX, Windows等操作系统。

8、filebench

Filebench 是一款文件系统性能的自动化测试工具,它通过快速模拟真实应用服务器的负载来测试文件系统的性能。它不仅可以仿真文件系统微操作(如 copyfiles, createfiles, randomread, randomwrite ),而且可以仿真复杂的应用程序(如 varmail, fileserver, oltp, dss, webserver, webproxy )。 Filebench 比较适合用来测试文件服务器性能,但同时也是一款负载自动生成工具,也可用于文件系统的性能。

9、bonnie

参考网站:

Bonnie++是一个用来测试UNIX文件系统性能的测试工具,主要目的是为了找出系统的性能瓶颈,其名字来源于作者喜爱的歌手Bonnie Raitt。

Bonnie++在类似的测试工具和软件中不是最大的和最复杂的,但是在易用性和输出结果显示方面很不错。

为什么需要bonnie++?

我们有以下假设:

内存是有限的,因此cache经常会达到上限;因此

许多I/O操作最终需要真正执行I/O;因此

有必要测试真实I/O的速度,而且

在UNIX文件系统中随机搜索是非常慢的;

Bonnie++做了什么?

Bonnie++在一个已知文件大小的文件上执行一系列的测试操作。如果不指定文件大小,Bonnie++默认使用100MB。这个默认大小对于大型服务器来说可能不够大,因此文件的大小最好比可用RAM的大小大一点,一般会要求大两倍。

Bonnie++的使用说明

Bonnie++将长时间的执行磁盘文件读写操作(中间不断给出进程报告),然后生成一个小而精的报告。

下载Bonnie++的源码;

解压tar -xzf bonnie++-1.03e.tgz

进入解压后的目录

编译Bonnie++:make

至此,Bonnie++就已经安装,并可以使用了。

命令:[cpp] view plaincopyprint?

01.#./Bonnie

02.You must use the "-u" switch when running as root.

03.usage: bonnie++ [-d scratch-dir] [-s size(MiB)[:chunk-size(b)]]

04. [-n number-to-stat[:max-size[:min-size][:num-directories]]]

05. [-m machine-name]

06. [-r ram-size-in-MiB]

07. [-x number-of-tests] [-u uid-to-use:gid-to-use] [-g gid-to-use]

08. [-q] [-f] [-b] [-D] [-p processes | -y]

09.

10.11.Version: 1.03e

方括号中的选项都是可选,其含义如下:

Bonnie

程序名字。

-d 起始路径

目录名字;Bonnie将在该目录下创建测试文件并进行读写,即为需要测试的文件系统挂载的目录。bonnie不会对目录名字进行任何特殊的解释,只是按照原名字使用。

-s size-in-MB

测试文件的大小,以MB为单位。默认是100MB大小。文件大小一定要是数倍于可用内存的大小,否则操作系统将会把文件的大部分文件cache到内存中,从而导致bonnie执行的真正的I/O次数非常少。建议设置至少为可用内存大小的2倍(另一种说法为4倍)。

-m machine-label

给出bonnie用来生成报告的标识。如果不使用该选项,bonnie将不在报告中提供特定标识。

-html

以html的格式输出测试结果

-m 机器名

实际上我们可以认为是本次测试的方案名,可以随便定义。默认是本机的hostname。

-r 内存大小

指定内存大小,这样可以通过-s参数创建r*2大小的文件,通常用于缩短测试时间,但是需要注意这样由于内存的cache可能导致测试结果的不准确

-x 测试的次数

-u 测试文件的属主和组,默认是执行bonnie++的当前用户和当前组

-g 测试文件的组,默认是执行bonnie++的当前用组

-b 在每次写文件时调用fsync()函数,对于测试邮件服务器或者数据库服务器这种通常需要同步操作的情况比较适合,而不使用该参数则比较适合测试copy文件或者编译等操作的效率。在此,我们的文件系统挂载在/mnt目录下,因此我们将工作目录定为/mnt

[cpp] view plaincopyprint?

01.[root@de18 bonnie++-1.03e]# ./bonnie++ -d /mnt -s 1000 -u root

02.Using uid:0, gid:0.

03.File size should be double RAM for good results, RAM is 1000M.

说明我们的文件大小设置小了,RAM的大小为1000M,因此我们设置文件大小为2000M:

#./bonnie++ -d /test -s 2000 -u root

则可以得到测试结果:

[cpp] view plaincopyprint?

01.Version 1.03e ——Sequential Output—— –Sequential Input- –Random-

02. -Per Chr- –Block– -Rewrite- -Per Chr- –Block– –Seeks–

03.Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP

04.de18 2000M 7849 44 16681 34 15773 37 60869 86 215620 36 9076 98

05. ——Sequential Create—— ——–Random Create——–

06. -Create– –Read— -Delete– -Create– –Read— -Delete–

07. files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP

08. 16 1993 24 8381 16 2545 11 2025 30 8922 17 2576 15

09.de18,2000M,7849,44,16681,34,15773,37,60869,86,215620,36,9075.7,98,16,1993,24,8381,16,2545,11,2025,30,8922,17,2576,15

测试结果分析:

Sequential Output部分表示写文件的相关信息

Sequential Input部分表示读文件的相关信息

Per Chr表示以字符为单位读写文件

Block表示以block为单位读写文件

Rewrite表示修改并重写已经存在的文件的每一个block

K/sec表示每秒读或写文件的速率,以K为单位

%CP表示在某阶段执行操作时平均消耗的CPU

Sequential Output

1. Per Char

就是Per-Character的含义。使用putc()函数进行循环写入,每次写入的字节很小,基本上可以放入任意一种I-Cache中,这种情况下的CPU消耗在处理putc()代码和分配磁盘文件空间上。

2. Block

使用write(2)函数创建文件。这种情况下的CPU消耗只是在分配磁盘文件空间上。

3. Rewrite

使用read(2)函数读取文件,然后修改再用write(2)函数写回。由于文件的空间已经分配好,所以这种方式可以很有效地测试文件系统缓存和数据传输的速度。

Sequential Input

1. Per Char

使用getc()函数循环 读取文件内容

2. Block

使用read(2)函数循环读取文件内容,有效测试磁盘读取的效率。

Random Seek

默认3个seeks进程作8000次的测试。用read(2)函数读取文件的block,同时有10%的操作是用write(2)函数将block修改以 后写回文件中。在这个测试中,如果内存容量大于创建的文件大小,那么将会出现比较高的数值,而这个数值可能并不能准确反映磁盘本身的I/O效率。

Sequential Create和Radom Create

这两大类测试均是用创建,读取,删除大量的小文件来测试磁盘效率。文件名用7位数字和任意个数(0-12)的任意英文字母来组成。在Sequential部分,字母在数字之后,而Random部分则是字母在数字之前。

创建文件的最小值和最大值等参数可以在bonnie++命令行中用-n参数来控制。

最后需要注意的是,在测试RAID的时候,对于多CPU的系统,bonnie++并没有发挥CPU的最大潜力,也就是说bonnie++发出的I/O请求 通常不够达到CPU和磁盘的最大压力,这时候显示的吞吐量就不是存储设备能够达到的最大值。因此,这些数字智能作为在单CPU系统中操作的有效性指标。

二、内存测试工具简介

1、memtester

memtester是用户态工具,用于测试内存子系统的故障。非常方便,支持32位或64位Unix-like系统。对于硬件开发开发者来说,memtester可以定位到物理地址。

1、安装

下载获取memtester-4.3.0.tar.gz源码包。

#tar –zxvf memtester-4.3.0.tar.gz

#make

#make install

2、测试

./memtester [-p physaddrbase] [B|K|M|G] [loops]

其中:

Physaddrbase:需要测试的物理地址;

[B|K|M|G]:测试内存的大小;

[loops]:测试次数

案例:

# ./memtester -p 0x0a0000 4k 1二、网络带宽IO测试工具简介

在进行SDN研究和开发时经常要进行网络性能的测试,iperf是一款非常出色的网络性能测试工具(Mininet自带iperf)。

jperf是iperf的GUI接口,可以实时的以图形方式显示性能测试结果,并可以保存测试结果。jperf也需要调用iperf来完成测试,它只是iperf的GUI外壳而已,所以本质的还是要掌握iperf的用法。

1 iperf的下载与安装

由于是开发源代码的,可以下载源码进行编译安装。如果仅仅是测试只用的话,推荐直接使用编译好的二进制版本即可。

iperf的官方网址 :

jperf的下载链接:

2 使用方法

由于Iperf工具是基于服务器和客户端的工作模式,所以在进行测试之前应先在目标计算机上启动服务器端程序,Iperf客户端和服务器端程序其实都是同一个程序,只是使用了不同的命令选项而已。

iperf服务器端选项和启动:-s 以server模式启动,eg:*iperf –s* 。Server端为数据的接收端。

-D 以服务方式运行ipserf,eg:*iperf -s -D*

-R 停止iperf服务,针对-D,eg:iperf -s -R

-o   重定向输出报告或错误信息到指定文件。

-c  如果Iperf运行为服务器模式,则可利用-c参数指定一个客户端,本机将接受指定客户端的连接,但不支持UDP协议。

-P,--parallel #  设置Iperf服务模式下的最大连接数,默认值为0,表示不限制连接数量。

iperf客户端选项-b,--bandwidth 指定客户端通过UDP协议发送信息的带宽,默认值为1Mbit/s

-c,--client  指定Iperf服务器的主机名和IP地址

-d,--dualtest 同时进行双向传输测试

-n,--num 指定传输的字节数,eg:*iperf -c 222.35.11.23 -n 100000*

-r,--tradeoff 单独进行双向传输测试

-t,--time 指定Iperf测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5

-L,--listenport 指定一个端口,服务器将利用这个端口与客户机连接

-P, --parallel 设置Iperf客户端至Iperf服务器的连接数,默认值为1

-S, --tos  设置发出包的类型,具体类型请参阅man文档

-F 指定需要传输的文件

-T 指定ttl值

通用参数-f [kmKM] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,eg:*iperf -c 222.35.11.23 -f K*

-i sec 以秒为单位显示报告间隔,eg:iperf -c 222.35.11.23 -i 2

-l 缓冲区大小,默认是8KB,eg:iperf -c 222.35.11.23 -l 16

-m 显示tcp最大mtu

-o 将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o ciperflog.txt

-p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999

-u 使用udp协议

-w 指定TCP窗口大小,默认是8KB

-B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)

-C 兼容旧版本(当server端和client端版本不一样时使用)

-M 设定TCP数据包的最大mtu值

-N 设定TCP不延时

-V 传输ipv6数据包

3 iperf应用实例

3.1 以服务器模式启动iperf

使用 iperf -s 命令将 Iperf 启动为 server 模式:iperf –s

————————————————————

Server listening on TCP port 5001

TCP window size: 8.00 KByte (default)

————————————————————

3.2 启动iperf客户端

向IP为10.230.48.65的主机发出TCP测试,并每2秒返回一次测试结果:iperf -c 10.230.48.65 -i 2

3.3 以Mbytes/sec为单位显示测试结果:iperf -c 10.230.48.65 -f M -i 2

3.4 设置TCP传输窗口大小为300Kiperf -s -w 300K

————————————————————

Server listening on TCP port 5001

TCP window size: 300 KByte

———————————————————

3.5 指定传输约1MB数据iperf -c 59.125.103.56 -f K -i 2 -w 300K –n 1000000

3.6 指定测试持续时间

指定测试持续时间为36秒:iperf -c 59.125.103.56 -f K -i 2 -w 300K –t 36

3.7 测试双向传输iperf -c 220.112.45.87 -f K -i 2 -w 300k -n 1000000 -d

3.8 UDP测试iperf -c 59.125.103.56 -f K -i 2 -w 300K –u

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值