一、文件系统测试工具简介
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 std.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.1postmark命令解析
postmark的操作是在命令行的环境下的。
一个配置文件(在命令行中被指定)包含了一组可以直接运行的命令。
在命令行提示下,有如下命令:
pm>?
setsize:设置文件大小的上限和下限。(lowboundandhighbound)
setnumber:设置并发的文件数(simultaneousfiles)
setseed:为随机数产生器设置种子(setsseedforrandomnumbergenerator)
settransactions:设置事务处理的数目(setnumberoftransactions)
setlocation:设定工作文件的location(setslocationofworkingfiles)
setread:设定读取block的大小(setsreadblocksize)
setwrite:设定写block的大小(setswriteblocksize)
setbuffering:(setusageofbufferedI/O)
setbiasread:设置读操作发生的频率(setsthechanceofchoosingreadoverappend)
setbiascreate:设置删除操作发生的频率(setsthechanceofchoosingcreateoverdelete)
run:运行该软件
show:显示当前的配置信息(displayscurrentconfiguration)
help:显出可用的命令(printsoutavailablecommands)
quit:Exitprogram
pm>
show命令显示可用于下次run的当前的配置信息。系统的默认配置信息如下:
pm>show
Currentconfigurationis:
Transactions:500事务处理的数目是500个;
Filesrangebetween500bytesand9.77kilobytesinsize
文件大小的上下限分别是500字节和9.77K字节。
Randomnumbergeneratorseedis42随机数产生器的种子是42
Thebasenumberoffilesis500并发的文件数是500个
Theworkingdirectoryis:.工作目录是.
Blocksizesare:read=512bytes,write=512bytes块大小是:读:512字节,写:512字节
Biasesare:read/append=5,create/delete=5
读/追加发生的概率相等;创建/删除发生的概率相等。
UsingUnixbufferedfileI/O文件操作将使用标准的缓冲区I/O
pm>
Ifthisconfigurationisrun:
500fileswillbeinitiallycreated,between..and10Kilobytesinsize
Thefileswillbeprocessedinthecurrentdirectory
Allreadswilloccurin512byteblocks
Allwriteswilloccurin512byteblocks
Readsandappendsareequallylikelytooccur
Createsanddeletesareequallylikelytooccur
FileoperationswillbeperformedusingthestandardbufferedI/Ointheruntimelibrary
部分命令解释:
pm>setsize1000020000表示文件大小的下限是10000字节,文件大小的上限是20000字节;
pm>setsize15000表示文件的大小只能固定是15000字节,不能变化。
pm>setnumber整数注意:后面的整数可以是任何大于1的整数,但是要保证文件系统有足够的空间来存放结果文件;设置并发的文件数;
pm>setseed整数;表示随机数产生器的种子。注意:任何整数都是可以的。但是这个项很少被自行设置,因为改变这个数之后测试结果将与原先测试的结果不同。
pm>settransaction表示即将到来的下一次run中读/追加、创建/删除等操作的事务数目。任何大于1的整数都是可以的。
pm>setlocation表示程序运行过程中产生文件的工作目录。例如:pm>setlocationuser2/tmp
pm>setread整数以及pm>setwrite整数表示从文件中一次读取的数据的大小或者一次写进文件的数据的大小。这两个整数的取值范围是:1
pm>setbufferingtrue(默认是true)或者pm>setbufferingfalse
true表示bufferingisenabled.
false表示bufferingisnotenabled.
pm>setbiasread整数和pm>setbiascreate整数两个整数分别表示该操作发生的频率;
其取值范围是:-1,0,1,2,3,…,10
当取值为-1时,表示系统禁止read和append这两个操作;取值从0到10变化过程中,值越小,表示read操作发生的几率小于append操作发生的几率;值越大,表示read操作发生的几率大于append操作发生的几率。默认是5,表示read和append两种操作发生的几率相等。
同样,对于pm>setbiaswrite整数和pm>setbiasdelete整数两个整数分别表示该操作发生的频率;
其取值范围是:-1,0,1,2,3…10;
当取值为-1时,表示系统禁止write和delete这两个操作;取值从0到10变化过程中,值越小,表示write操作发生的几率小于delete操作发生的几率;值越大,表示write操作发生的几率大于delete操作发生的几率。默认是5,表示write和delete两种操作发生的几率相等。
setbiasreadnn为read/append中read所占比例n/10
setbiascreatencreate/delete中create所占比例n/10
setreportverbose(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]viewplaincopyprint?
01.#./Bonnie
02.Youmustusethe"-u"switchwhenrunningasroot.
03.usage:bonnie++[-dscratch-dir][-ssize(MiB)[:chunk-size(b)]]
04.[-nnumber-to-stat[:max-size[:min-size][:num-directories]]]
05.[-mmachine-name]
06.[-rram-size-in-MiB]
07.[-xnumber-of-tests][-uuid-to-use:gid-to-use][-ggid-to-use]
08.[-q][-f][-b][-D][-pprocesses|-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]viewplaincopyprint?
01.[root@de18bonnie++-1.03e]#./bonnie++-d/mnt-s1000-uroot
02.Usinguid:0,gid:0.
03.FilesizeshouldbedoubleRAMforgoodresults,RAMis1000M.
说明我们的文件大小设置小了,RAM的大小为1000M,因此我们设置文件大小为2000M:
#./bonnie++-d/test-s2000-uroot
则可以得到测试结果:
[cpp]viewplaincopyprint?
01.Version1.03e——SequentialOutput——–SequentialInput-–Random-
02.-PerChr-–Block–-Rewrite--PerChr-–Block––Seeks–
03.MachineSizeK/sec%CPK/sec%CPK/sec%CPK/sec%CPK/sec%CP/sec%CP
04.de182000M78494416681341577337608698621562036907698
05.——SequentialCreate————–RandomCreate——–
06.-Create––Read—-Delete–-Create––Read—-Delete–
07.files/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP
08.16199324838116254511202530892217257615
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
测试结果分析:
SequentialOutput部分表示写文件的相关信息
SequentialInput部分表示读文件的相关信息
PerChr表示以字符为单位读写文件
Block表示以block为单位读写文件
Rewrite表示修改并重写已经存在的文件的每一个block
K/sec表示每秒读或写文件的速率,以K为单位
%CP表示在某阶段执行操作时平均消耗的CPU
SequentialOutput
1.PerChar
就是Per-Character的含义。使用putc()函数进行循环写入,每次写入的字节很小,基本上可以放入任意一种I-Cache中,这种情况下的CPU消耗在处理putc()代码和分配磁盘文件空间上。
2.Block
使用write(2)函数创建文件。这种情况下的CPU消耗只是在分配磁盘文件空间上。
3.Rewrite
使用read(2)函数读取文件,然后修改再用write(2)函数写回。由于文件的空间已经分配好,所以这种方式可以很有效地测试文件系统缓存和数据传输的速度。
SequentialInput
1.PerChar
使用getc()函数循环读取文件内容
2.Block
使用read(2)函数循环读取文件内容,有效测试磁盘读取的效率。
RandomSeek
默认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-c222.35.11.23-n100000*
-r,--tradeoff单独进行双向传输测试
-t,--time指定Iperf测试时间,默认10秒,eg:iperf-c222.35.11.23-t5
-L,--listenport指定一个端口,服务器将利用这个端口与客户机连接
-P,--parallel设置Iperf客户端至Iperf服务器的连接数,默认值为1
-S,--tos设置发出包的类型,具体类型请参阅man文档
-F指定需要传输的文件
-T指定ttl值
通用参数-f[kmKM]分别表示以Kbits,Mbits,KBytes,MBytes显示报告,默认以Mbits为单位,eg:*iperf-c222.35.11.23-fK*
-isec以秒为单位显示报告间隔,eg:iperf-c222.35.11.23-i2
-l缓冲区大小,默认是8KB,eg:iperf-c222.35.11.23-l16
-m显示tcp最大mtu
-o将报告和错误信息输出到文件eg:iperf-c222.35.11.23-ociperflog.txt
-p指定服务器端使用的端口或客户端所连接的端口eg:iperf-s-p9999;iperf-c222.35.11.23-p9999
-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
————————————————————
ServerlisteningonTCPport5001
TCPwindowsize:8.00KByte(default)
————————————————————
3.2 启动iperf客户端
向IP为10.230.48.65的主机发出TCP测试,并每2秒返回一次测试结果:iperf-c10.230.48.65-i2
3.3 以Mbytes/sec为单位显示测试结果:iperf-c10.230.48.65-fM-i2
3.4 设置TCP传输窗口大小为300Kiperf-s-w300K
————————————————————
ServerlisteningonTCPport5001
TCPwindowsize:300KByte
———————————————————
3.5 指定传输约1MB数据iperf-c59.125.103.56-fK-i2-w300K–n1000000
3.6 指定测试持续时间
指定测试持续时间为36秒:iperf-c59.125.103.56-fK-i2-w300K–t36
3.7 测试双向传输iperf-c220.112.45.87-fK-i2-w300k-n1000000-d
3.8 UDP测试iperf-c59.125.103.56-fK-i2-w300K–u