Iozone 文件系统的读写性能测试工具的使用

iozone 文件系统的读写性能测试工具的使用

1、工具介绍:

iozone是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能。可以测试 Read, write, re-read,re-write,read backwards, read strided, fread, fwrite, random read, pread, mmap,aio_read, aio_write 等等不同的模式下的硬盘的性能。测试的时候请注意,设置的测试文件的大小一定要大过你的内存(最佳为内存的两倍大小),不然linux会给你的读写的内容进行缓存。会使数值非常不真实。

2、安装条件:

首先确认有make命令及gcc编译环境(缺少时可通过apt-get安装);

首先从官方下载最新的iozone源码包,然后编译适合自己target的执行文件。

  #tar iozone3_347.tar

  #cd iozone3_347/src/current

  #make linux(直接执行make 有帮助选项)

等待约5分钟即可安装完毕

3、参数介绍:

-a 全面测试,比如块大小它会自动加

-i N 用来选择测试项, 比如Read/Write/Random比较常用的是0 1 2,可以指定成-i 0 -i 1 -i2.

  0=write/rewrite

  1=read/re-read

  2=random-read/write

  3=Read-backwards

  4=Re-write-record

  5=stride-read

  6=fwrite/re-fwrite

  7=fread/Re-fread

  8=random mix

  9=pwrite/Re-pwrite

  10=pread/Re-pread

  11=pwritev/Re-pwritev

  12=preadv/Re-preadv

  -r blocksize 指定一次写入/读出的块大小

  -s file size指定测试文件的大小

  -f filename 指定测试文件的名字,完成后会自动删除(这个文件必须指定你要测试的那个硬盘中)

  -F file1file2... 指定多线程下测试的文件名

  批量测试项:

  -g -n 指定测试文件大小范围,最大测试文件为4G,可以这样写 -g 4G

  -y -q 指定测试块的大小范围

  输出:

  下面是几个日志记录的参数.好像要输出成图象进行分析,需要指定-a的测试才能输出

  -R 产生Excel到标准输出

  -b 指定输出到指定文件上. 比如 -Rb ttt.xls

#./iozone -a -n 512m -g 4g-i 0 -i 1 -i 5 -f /mnt/iozone -Rb ./iozone.xls

  注:进行全面测试.最小测试文件为512M直到测试到4G.测试read,write,和Strided Read.测试的地方在mnt下。生成Excel的文件.

  ./iozone -i0 -i 1 -f /iozone.tmpfile -Rab /test-iozone.xls -g 8G -n 4G-C

 

4、内容定义:

  Write: 测试向一个新文件写入的性能。当一个新文件被写入时,不仅仅是那些文件中的数据需要被存储,还包括那些用于定位数据存储在存储介质的具体位置的额外信息。这些额外信息被称作“元数据”。它包括目录信息,所分配的空间和一些与该文件有关但又并非该文件所含数据的其他数据。拜这些额外信息所赐,Write的性 能通常会比Re-write的性能低。

  Re-write: 测试向一个已存在的文件写入的性能。当一个已存在的文件被写入时,所需工作量较少,因为此时元数据已经存在。Re-write的性能通常比Write的性能高。

  Read: 测试读一个已存在的文件的性能。

  Re-Read: 测试读一个最近读过的文件的性能。Re-Read性能会高些,因为操作系统通常会缓存最近读过的文件数据。这个缓存可以被用于读以提高性能。

  Random Read:测试读一个文件中的随机偏移量的性能。许多因素可能影响这种情况下的系统性能,例如:操作系统缓存的大小,磁盘数量,寻道延迟和其他。

  RandomWrite: 测试写一个文件中的随机偏移量的性能。同样,许多因素可能影响这种情况下的系统性能,例如:操作系统缓存的大小,磁盘数量,寻道延迟和其他。

  Random Mix: 测试读写一个文件中的随机偏移量的性能。同样,许多因素可能影响这种情况下的系统性能,例如:操作系统缓存的大小,磁盘数量,寻道延迟和其他。这个测试只有在吞吐量测试模式下才能进行。每个线程/进程运行读或写测试。这种分布式读/写测试是基于round robin 模式的。最好使用多于一个线程/进程执行此测试。

  BackwardsRead: 测试使用倒序读一个文件的性能。这种读文件方法可能看起来很可笑,事实上,有些应用确实这么干。MSC Nastran是一个使用倒序读文件的应用程序的一个例子。它所读的文件都十分大(大小从G级别到T级别)。尽管许多操作系统使用一些特殊实现来优化顺序 读文件的速度,很少有操作系统注意到并增强倒序读文件的性能。

  RecordRewrite: 测试写与覆盖写一个文件中的特定块的性能。这个块可能会发生一些很有趣的事。如果这个块足够小(比CPU数据缓存小),测出来的性能将会非常高。如果比 CPU数据缓存大而比TLB小,测出来的是另一个阶段的性能。如果比此二者都大,但比操作系统缓存小,得到的性能又是一个阶段。若大到超过操作系统缓存,又是另一番结果。

  StridedRead: 测试跳跃读一个文件的性能。举例如下:在0偏移量处读4Kbytes,然后间隔200Kbytes,读4Kbytes,再间隔200Kbytes,如此反 复。此时的模式是读4Kbytes,间隔200Kbytes并重复这个模式。这又是一个典型的应用行为,文件中使用了数据结构并且访问这个数据结构的特定区域的应用程序常常这样做。

  许多操作系统并没注意到这种行为或者针对这种类型的访问做一些优化。同样,这种访问行为也可能导致一些有趣的性能异常。一个例子是在一个数据片化的文件系统里,应用程序的跳跃导致某一个特定的磁盘成为性能瓶颈。

  Fwrite: 测试调用库函数fwrite()来写文件的性能。这是一个执行缓存与阻塞写操作的库例程。缓存在用户空间之内。如果一个应用程序想要写很小的传输块,fwrite()函数中的缓存与阻塞I/O功能能通过减少实际操作系统调用并在操作系统调用时增加传输块的大小来增强应用程序的性能。

  这个测试是写一个新文件,所以元数据的写入也是要的。

  Frewrite:测试调用库函数fwrite()来写文件的性能。这是一个执行缓存与阻塞写 操作的库例程。缓存在用户空间之内。如果一个应用程序想要写很小的传输块,fwrite()函数中的缓存与阻塞I/O功能能通过减少实际操作系统调用并在 操作系统调用时增加传输块的大小来增强应用程序的性能。

  这个测试是写入一个已存在的文件,由于无元数据操作,测试的性能会高些。

  Fread:测试调用库函数fread()来读文件的性能。这是一个执行缓存与阻塞读操作的库 例程。缓存在用户空间之内。如果一个应用程序想要读很小的传输块,fwrite()函数中的缓存与阻塞I/O功能能通过减少实际操作系统调用并在操作系统 调用时增加传输块的大小来增强应用程序的性能。

  Freread: 这个测试与上面的fread 类似,除了在这个测试中被读文件是最近才刚被读过。这将导致更高的性能,因为操作系统缓存了文件数据。

  几个特殊测试:

  Mmap:许多操作系统支持mmap()的使用来映射一个文件到用户地址空间。映射之后,对内存的读写将同步到文件中去。这对一些希望将文件当作内存块来使用的应用程序来说很方便。一个例子是内存中的一块将同时作为一个文件保存在于文件系统中。

  mmap 文件的语义和普通文件略有不同。如果发生了对内存的存储,并不是立即发生相应的文件I/O操作。使用MS_SYNC 和MS_ASYNC标志位的 msyc()函数调用将控制内存和文件的一致性。调用msync() 时将MS_SYNC置位将强制把内存里的内容写到文件中去并等待直到此操作完成才返回。而MS_ASYNC置位则告诉操作系统使用异步机制将内存刷新到磁盘,这样应用程序可以直接返回而不用等待此操作的完成。

  这个测试就是测量使用mmap()机制完成I/O的性能。

  Async I/O: 许多操作系统支持的另外一种I/O机制是POSIX 标准的异步I/O。本程序使用POSIX标准异步I/O接口来完成此测试功能。

  例如:aio_write(), aio_read(), aio_error()。这个测试测量POSIX异步I/O机制的性能。


5、实际测试及解释:

root@LOonux:~/iozone3_397/src/current# ./iozone –a
Iozone: Performance Test of File I/O
            Version $Revision: 3.397 $
        Compiled for 32 bit mode.
        Build: linux

    Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
                 Al Slater, Scott Rhine, Mike Wisner, Ken Goss
                 Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
                 Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,
                 Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,
                 Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,
                 Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer.
                 Ben England.

    Run began: Thu Dec 13 11:56:40 2012

    Auto Mode
    Command line used: ./iozone -a
    Output is in Kbytes/sec
    Time Resolution = 0.000002 seconds.
    Processor cache size set to 1024 Kbytes.
    Processor cache line size set to 32 bytes.
    File stride size set to 17 * record size.                                                                                                          

文件大小 测试长度 写入    再写入    读取    再读取  随机读取 随机写  倒序读  覆盖写   跳跃读取  函数写  函数重写 函数读  函数重读                
                                                                                                                                                          
                                                              random random   bkwd   record   stride                                                     
KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread                   
64       4  114490  264569   571611   673426  571611  280610  361475   326718   566784   203728   240617  147199   632190                   
64       8  152380  365411   819371   914254  744389  387570  496540   450688   781218   265616   328316  687218   829499
64      16  149163  380969   734209   772228  821880  146797  587886   621937   832070   340390   333207  616226   694328
64      32  176763  456824   939862  1018299  875490  500241  508774   562037   673426   132194   347889  587886   864216

参数 -a
即可进行全面的自动测试,执行13种类型的测试,使用的块 大小从4k到16M,文件大小从64k到512M。不过通常需要很长的时间,要耐心等待
        -A

  这种版本的自动模式提供更加全面的测试但是消耗更多时间。参数–a在文件不小于32MB时将自动停止使用低于64K的块大小测试。这节省了许多时间。而参数–A  则告诉Iozone你不介意等待,即使在文件非常大时也希望进行小块 的测试。  

注意: 不推荐在Iozone3.61版中使用这个参数。使用–az –i 0 –i 1替代。

root@LOonux:~/iozone3_397/src/current# ./iozone -a -b output.xls
-b filename  

          Iozone输出结果时将创建一个兼容Excel的二进制格式的文件。


root@LOonux:~/iozone3_397/src/current# ./iozone -a -i 0
	Iozone: Performance Test of File I/O
	        Version $Revision: 3.397 $
		Compiled for 32 bit mode.
		Build: linux 

	Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
	             Al Slater, Scott Rhine, Mike Wisner, Ken Goss
	             Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
	             Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,
	             Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,
	             Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,
	             Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer.
	             Ben England.

	Run began: Thu Dec 13 14:15:45 2012

	Auto Mode
	Command line used: ./iozone -a -i 0
	Output is in Kbytes/sec
	Time Resolution = 0.000002 seconds.
	Processor cache size set to 1024 Kbytes.
	Processor cache line size set to 32 bytes.
	File stride size set to 17 * record size.
                                                            random  random    bkwd   record   stride                                   
              KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
              64       4  106117  216199                                                                                            
              64       8  141608  309039                                                                                            
              64      16  130396  278283                                                                                            
              64      32  176763  387570                    

-i N 用来选择测试项, 比如Read/Write/Random比较常用的是0 1 2,可以指定成-i 0 -i 1 -i2.

注意:但是实际中使用时如果指定了-i 的内容,则-a参数感觉并没有执行完横轴的所有13项测试,而是执行了纵轴的各种类型大小的测试;个人感觉两个参数有那么一点冲突,要是纵横轴的各个测试都做,而不用再去增加参数个数,就如

 ./iozone -a
测试那样,就好了!@@

类似的参数有:

-a -i 1 -i 0
对读写进行性能测试

-a -g 1G -i 0 -i 1
对读写进行性能测试,并且最大测试文件为1G

-Ra
测试所有方面,并且生成excel文件;上面的命令在执行时,最好通过重定向保存到另外一个文件中

-a -s 512m -y 1k -q 8k -b minfile_result.xls
测试普通文件
如果2G内存测试,时间太长,先在grub.conf里把内存变成256m,这时使用512m的文件测试,就不会使用缓存了。
可以保证测试的准确性

-a -s 512m -y 8k -q 512k -b comfile_result.xls
测试大文件

-R 创建 Excel 报告
-g 设置自动模式下最大文件大小
Set maximum file size (in Kbytes) for auto mode.
-s 指定文件大小
-s 512k or -s 512M or -s 1G
-f filename
指定临时文件
-F filename filename filename
指定临时文件组
-t #
线程数
-q 指定最大记录大小
-q 512K or -q 512M or -q 1g
-y 指定最小记录大小
-y 512K or -q 512M or -q 1g

-y #  设置自动模式下使用的最小块大小(Kbytes) 。也可以通过-y #k ( Kbytes) 或 -y #m ( Mbytes) 或 -y #g ( Gbytes)。设置最大块大小见 –y
-U mountpoint
Mount point to unmount and remount between tests. Iozone will unmount and remount
this mount point before beginning each test. This guarantees that the buffer cache does not
contain any of the file under test

-n #  为自动模式设置最小文件大小(Kbytes)。

-N  报告结果以毫秒每操作的方式显示。



你可能感兴趣的:(Iozone 文件系统的读写性能测试工具的使用)