Linux文件系统测试工具

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

1、LTP

参考网站:http://oss.sgi.com/projects/ltp/

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

稳定性测试相关参考:

基于LTP《测试Linux的可靠性》http://www.ibm.com/developerworks/cn/linux/l-rel/

 

2、fstest

 

参考网站:http://www.tuxera.com/community/posix-test-suite/

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

 

参考网站:http://nfsv4.bullopensource.org/tools/tests/locktest.php

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

Expected results

Here is the table of expected results, depending on :

  1. Slave test operations (READ, WRITE, SET A WRITE LOCK … )
  2. Master Operation (SET A READ LOCK, SET A WRITE LOCK )
  3. Slave types (Processes, threads)
  4. Locking profile (POSIX locking, Mandatory locking)
     

Master

   

Slave type

Test operation

advisory

locking 

  mandatory

locking 

   

read lock 

write lock 

read lock 

write lock 

thread

set a read lock

Allowed

Allowed

Allowed

Allowed

 

set a write lock

Allowed

Allowed

Allowed

Allowed

 

read

Allowed

Allowed

Allowed

Allowed

 

write

Allowed

Allowed

Allowed

Allowed

process

set a read lock

Allowed

Denied

Allowed

Denied

 

set a write lock

Denied

Denied

Denied

Denied

 

read

Allowed

Allowed

Denied

Allowed

 

write

Allowed

Allowed

Denied

Denied

4、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。

 

5、iozone

 

参考网站:http://www.iozone.org/

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

clip_image002

 

6、Postmark

 

参考网站:http://openbenchmarking.org/test/pts/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 命令表示在当前的配置下运行程序

四.postmark命令使用例子

postmark有两种使用方法:

1、 使用配置文件

./postmark XXX.cfg

配置文件方式,是将所有配置命令及run放入文件中,由postmark自动读取

配置文件示例:

set size 10000 50000

set location /mnt/cfs

set transactions 5000

set number 5000

run result.txt

show

quit

2、命令行模式

./postmark

进入命令行模式,然后打入相应命令,进行配置,run命令按当前配置运行postmark将上面配置文件中的命令在命令行中依次执行,结果是相同的,没有任何区别。

 

7、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等操作系统。

 

8、filebench

 

参考网站:http://sourceforge.net/projects/filebench/

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

 

9、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系统中操作的有效性指标。

 

二、内存测试工具简介

 

1、memtester

参考网站:http://pyropus.ca/software/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:需要测试的物理地址;

<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.

posted @ 2014-06-09 15:07  Jessica程序猿  阅读(11505)  评论(2编辑  收藏  举报