磁盘性能基本测试方法

 

author:skate
time:2011/08/22

 

磁盘性能基本测试方法:


dd if=/dev/zero of=tmp bs=1M count=10  //用dd命令测试瞬间写的能力

iozone -a -i 1 -i 0 -c -g 5M -n 1M   //可以更详细的测试磁盘的详细性能


iozone使用比较简单

 

下载安装:

官方地址:http://www.iozone.org/

http://www.iozone.org/下载最新版
# wget http://www.iozone.org/src/current/iozone3_308.tar
tar xf iozone3_308.tar && cd iozone3_308/src/current/
make
在列出的平台中选择你的目标平台,比如linux
make linux (32位) 或 make linux-ia64 (64位),更详细参数请直接在当前目录运行make

 

使用:
[root@localhost tmp]# cd iozone3_308/src/current/
[root@localhost current]# ls
Changes.txt  fileop.c             gengnuplot.sh  gnuplotps.dem  iozone.c              libasync.c  libbif.o        report.pl
client_list  fileop_linux-ia64.o  gnu3d.dem      Gnuplot.txt    iozone_linux-ia64.o   libasync.o  makefile        spec.in
fileop       Generate_Graphs      gnuplot.dem    iozone         iozone_visualizer.pl  libbif.c    read_telemetry  write_telemetry
[root@localhost current]# pwd
/tmp/iozone3_308/src/current

[root@localhost current]# ./iozone -a -i 1 -i 0 -i 2 -i 8 -c -g 1500m -n 10M -Rab /tmp/tmpfs-iozone.xls -f /tmp/cc
        Iozone: Performance Test of File I/O
                Version $Revision: 3.308 $
                Compiled for 64 bit mode.
                Build: linux-ia64

        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,
                     Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root.

        Run began: Wed Aug 24 11:16:38 2011

        Auto Mode
        Include close in write timing
        Using maximum file size of 1536000 kilobytes.
        Using minimum file size of 10240 kilobytes.
        Excel chart generation enabled
        Auto Mode
        Command line used: ./iozone -a -i 1 -i 0 -i 2 -i 8 -c -g 1500m -n 10M -Rab /tmp/tmpfs-iozone.xls -f /tmp/cc
        Output is in Kbytes/sec
        Time Resolution = 0.000001 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
           10240       4  220456 1111942  2012183  2041838 1696756 1059496                                                         
           10240       8  637057 1301473  2201214  2154831 1886504 1104280             
    
     ......
     ......

    
iozone是一个文件系统的benchmark工具,可以测试不同的操作系统中{AIX, BSDI, HP-UX, IRIX, FreeBSD, Linux, OpenBSD, NetBSD, OSFV3, OSFV4, OSFV5, SCO OpenServer, Solaris, MAC OS X, Windows (95/98/Me/NT/2K/XP)}文件系统的读写性能。

可以测试 Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread,
mmap, aio_read, aio_write 等等不同的模式下的硬盘的性能。


测试参数: -i //用来指定测试内容.

  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 产生execl格式的输出日志。
-b 将产生二进制的execl的日志文件名。
-s 测试的文件大小。
-r 文件块大小。
-a 在希望的文件系统上测试,不过只有-a的话会进行全面测试,要花费很长时间,最好用-i指定测试范围。
-g 设置自动模式下,指定最大测试文件大小。
-n 设置自动模式下,指定最小测试文件大小。
-f 指定测试文件,完成后会自动删除(这个文件必须指定你要测试的那个硬盘中)。
-F 指定临时文件组
-C 显示每个节点的吞吐量。
-t 并发数
-c 测试包括文件的关闭时间
-q 指定最大记录大小 例如 -q 512K
-y 指定最小记录大小 例如 -y 512K


常用测试命令:

./iozone -a -i 1 -i 0 -i 2 -i 8 -c -g 1500m -n 10M -Rb /tmp/tmpfs-iozone.xls -f /tmp/cc
测试磁盘的 write/rewrite,read/re-read,random-read/write,random mix,采用自动模式最大文件1500m,最小文件10m,生成文件xls文件
测试的文件是 /tmp/cc


测试小文件
./iozone -a -s 512m -y 1k -q 8k -b minfile_test.xls

 

说明:
通常情况下,测试的文件大小要求至少是系统cache的两倍以上,这样,测试的结果才是真是可信的。如果小于cache的两倍,
测试文件的读写都将是cache的速度,测试的结果不是很准确。

 


解释测试报告:
"Writer report"
        "4"  "8"  "16"  "32"  "64"  "128"  "256"  "512"  "1024"  "2048"  "4096"  "8192"  "16384"
"10240"   88829  624960  681851  678501  714591  672098  738756  717492  722598  649907  620942  575243
"20480"   0  0  0  0  662247  689330  696128  652810  648758  596403  614643  24304  539976
"40960"   0  0  0  0  458936  478091  608266  621396  604995  534391  551413  528189  582563
"81920"   0  0  0  0  486758  517378  514005  546851  544145  501970  488940  483749  458137
"163840"   0  0  0  0  186525  225523  199791  206751  144603  84872  189036  188518  178771
"327680"   0  0  0  0  147807  126524  104234  127710  118223  110236  135527  132250  147369


左侧一列是测试文件大小(Kbytes),最上边一行是记录大小,中间数据是测试的传输速度,拿第一行测试数据为例
测试文件为10240k,以记录大小为4k传输,传输速度是88829Kbytes/s

 

 

 

关于各种测试的定义


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

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

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

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

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

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

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

Backwards Read:
测试使用倒序读一个文件的性能。这种读文件方法可能看起来很可笑,事实上,有些应用确实这么干。MSC Nastran

是一个使用倒序读文件的应用程序的一个例子。它所读的文件都十分大(大小从G级别到T级别)。
尽管许多操作系统使用一些特殊实现来优化顺序读文件的速度,很少有操作系统注意到并增强倒序读文件的性能。

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

Strided Read:
测试跳跃读一个文件的性能。举例如下:在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机制的性能。

 

 

 

-------end------

 

 

 


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值