1、文件系统测试工具简介
一、LTP
参考网站:http://oss.sgi.com/projects/ltp/ php
LTP(Linux Test Project)是由SGI和IBM联合发起的项目,提供一套验证Linux系统可靠性、健壮性、稳定性的测试套件,也可用来进行POSIX兼容测试和功 能性测试。LTP提供了2000多个测试工具,能够根据须要自行进行定制。同时,LTP仍是一个优秀的自动化测试框架,基于它经过设计测试用例和测试工具 能够实现更多功能的测试自动化。 html
稳定性测试相关参考: linux
基于LTP《测试Linux的可靠性》http://www.ibm.com/developerworks/cn/linux/l-rel/ web
二、fstest
参考网站:http://www.tuxera.com/community/posix-test-suite/ shell
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”里面的相关命令 后端
三、locktests
参考网站:http://nfsv4.bullopensource.org/tools/tests/locktest.php 缓存
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)
|
四、PCTS
参考网站:http://www.opengroup.org/testing/downloads.html
PCTS(Posix Complicance Testing Suite),POSIX一致性测试套件,是从POSIX标准出发,经过严格的、定量地测试,以验证、评价、认证操做系统符合POSIX标准的程序的测试 软件。IEEE std2003.1是PCTS的设计标准,常见的PCTS主要有VSX-PCTS、NIST-PCTS、OPTS-PCTS三种实现,上面提供的链接为 VSX-PCTS。
五、iozone
Iozone是目前应用很是普遍的文件系统测试标准工具,它可以产生并测量各类的操做性能,包括read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread ,mmap, aio_read, aio_write等操做。Iozone目前已经被移植到各类体系结构计算机和操做系统上,普遍用于文件系统性能测试、分析与评估的标准工具。
六、Postmark
参考网站:http://openbenchmarking.org/test/pts/postmark
Postmark 是由著名的 NAS 提供商 NetApp 开发,用来测试其产品的后端存储性能。Postmark主要用于测试文件系统在邮件系统或电子商务系统中性能,这类应用的特色是:须要频繁、大量地存取小 文件。 Postmark 的测试原理是建立一个测试文件池。文件的数量和最大、最小长度能够设定,数据总量是必定的。建立完成后, Postmark 对文件池进行一系列的事务( transaction )操做,根据从实际应用中统计的结果,设定每个事务包括一次建立或删除操做和一次读或添加操做,在有些状况下,文件系统的缓存策略可能对性能形成影响, Postmark 能够经过对建立 / 删除以及读 / 添加操做的比例进行修改来抵消这种影响。事务操做进行完毕后, Post 对文件池进行删除操做,并结束测试,输出结果。 Postmark是用随机数来产生所操做文件的序号,从而使测试更加贴近于现实应用。输出结果中比较重要的输出数据包括测试总时间、每秒钟平均完成的事务 数、在事务处理中平均每秒建立和删除的文件数,以及读和写的平均传输速度。
1、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 命令表示在当前的配置下运行程序
四.postmark命令使用例子
postmark有两种使用方法:
一、 使用配置文件
./postmark XXX.cfg
配置文件方式,是将全部配置命令及run放入文件中,由postmark自动读取
配置文件示例:
set size 10000 50000
set location /mnt/cfs
set transactions 5000
set number 5000
run result.txt
show
quit
二、命令行模式
./postmark
进入命令行模式,而后打入相应命令,进行配置,run命令按当前配置运行postmark将上面配置文件中的命令在命令行中依次执行,结果是相同的,没有任何区别。
七、fio
参考网站:http://freecode.com/projects/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等操做系统。
八、filebench
参考网站:http://sourceforge.net/projects/filebench/
Filebench 是一款文件系统性能的自动化测试工具,它经过快速模拟真实应用服务器的负载来测试文件系统的性能。它不只能够仿真文件系统微操做(如 copyfiles, createfiles, randomread, randomwrite ),并且能够仿真复杂的应用程序(如 varmail, fileserver, oltp, dss, webserver, webproxy )。 Filebench 比较适合用来测试文件服务器性能,但同时也是一款负载自动生成工具,也可用于文件系统的性能。
九、bonnie
参考网站:
http://sourceforge.net/projects/bonnie/
http://www.textuality.com/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系统中操做的有效性指标。
2、内存测试工具简介
一、memtester
参考网站:http://pyropus.ca/software/memtester/
memtester是用户态工具,用于测试内存子系统的故障。很是方便,支持32位或64位Unix-like系统。对于硬件开发开发者来讲,memtester能够定位到物理地址。
一、安装
下载获取memtester-4.3.0.tar.gz源码包。
#tar –zxvf memtester-4.3.0.tar.gz
#make
#make install
二、测试
./memtester [-p physaddrbase] [B|K|M|G] [loops]
其中:
Physaddrbase:须要测试的物理地址;
<mem>[B|K|M|G]:测试内存的大小;
[loops]:测试次数
案例:
# ./memtester -p 0x0a0000 4k 1
memtester version 4.3.0 (32-bit)
Copyright (C) 2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).
pagesize is 4096
pagesizemask is 0xfffff000
want 0MB (4096 bytes)
Loop 1/1:
Stuck Address :testing 0FAILURE: possible bad addressline at physical address 0x000a0000.
Skipping to next test…
Random Value : ok
Compare XOR : ok
Compare SUB : ok
Compare MUL : ok
Compare DIV : ok
Compare OR : ok
Compare AND : ok
Sequential Increment : ok
Solid Bits : ok
Block Sequential : ok
Checkerboard : ok
Bit Spread : ok
Bit Flip : ok
Walking Ones : ok
Walking Zeroes : ok
8-bit Writes : ok
16-bit Writes : ok
Done.