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/下载最新版
# 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------