什么是iozone?
iozone是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能。 可以测试 Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write 等等不同的模式下的硬盘的性能。 测试的时候请注意,设置的测试文件的大小一定要大过你的内存(最佳为内存的两倍大小),不然linux会给你的读写的内容进行缓存。会使数值非常不真实。
一、iozone安装
官网地址:http://www.iozone.org/
[[email protected]_m ~]# wget http://www.iozone.org/src/current/iozone-3-471.src.rpm
[[email protected]_m ~]# rpm -ivh iozone-3-471.src.rpm
1:iozone ########################################### [100%]
[[email protected]_m current]# pwd
/root/rpmbuild/SOURCES/iozone3_471/src/current
[[email protected]_m current]# make linux-AMD64
#最简单开始使用iozone方法是自动模式
[[email protected]_m ~]# /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -a
Iozone: Performance Test of File I/O
Version $Revision: 3.471 $
Compiled for 64 bit mode.
Build: linux-AMD64
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,
Vangel Bojaxhi, Ben England, Vikentsi Lapa,
Alexey Skidanov.
Run began: Thu Nov 23 18:21:03 2017
Auto Mode
Command line used: /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -a
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
64 4 763021 2133730 4018152 4274062 5860307 2006158 2772930 2561267 3738358 1780008 1879725 4018152 261173
64 8 592827 2278628 9318832 5389653 9318832 2298136 2892445 2561267 3791156 1304314 2133730 5389653 8182586
64 16 1013707 2561267 9006179 10402178 10821524 2772930 2892445 2467108 5283570 1933893 2203800 4897948 7940539
64 32 1066042 889431 7940539 9006179 12902017 3022727 3203069 2561267 3738358 1828508 2561267 5283570 9006179
64 64 1066042 2561267 10821524 6421025 10402178 2358717 2923952 2222043 3203069 2067979 1892980 4564786 4018152
128 4 1133103 2511022 8036304 2511022 6406138 604036 3053774 2843510 3785961 1911894 1852520 5603747 6727225
128 8 592699 1684006 7082197 9129573 9129573 3199360 3468030 3759450 5847904 1802755 2132084 6406138 8414153
128 16 1243315 2843510 9129573 5545860 9795896 3036502 3657016 3560017 5545860 2377579 321516 383258 4267461
128 32 1346196 2140585 8036304 10567140 12842051 4012317 4759253 4717434 5122535 2558895 2784517 7082197 9129573
128 64 1291158 2511022 11720614 8548124 11720614 3560017 4135958 3657016 4934216 2175277 3199360 3277486 4407601
128 128 1278855 554157 3199360 2985839 3199360 739689 824932 1051027 1967960 1349580 1911894 3759450 3759450
256 4 372593 664935 1778290 1881098 1924938 666586 1347557 924200 1369908 1600674 1729594 3285566 2539563
256 8 213688 2114473 4404088 3756894 7314033 3123106 827989 358056 1280084 650041 859127 1855098 3770085
256 16 894929 865358 4132864 5569035 9868433 2726577 2463808 1274008 2285501 930608 1755037 3770085 4840911
#iozone将在所有模式下进行测试,使用记录块从4k到16M,测试文件大小从64k到512M
#以图表形式显示测试结果,可以使用,iozone将测试结果放在Excel中
[[email protected]_m ~]# /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -Rab output.xls
#内存为2G是我们测试文件设置为4G
[[email protected]_m ~]# /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -Ra -g 4g
#只关心文件磁盘的read/write性能,而不必花费时间在其他模式上测试,则我们需要指定测试模式。
[[email protected]_m ~]# /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -Ra -g 4g -i 0 -i 1
二、常用参数
-a 全面测试,比如块大小它会自动加
-i N 用来选择测试项, 比如Read/Write/Random 比较常用的是0 1 2,可以指定成-i 0 -i 1 -i2.这些别的详细内容请查man
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 block size 指定一次写入/读出的块大小
-s file size 指定测试文件的大小
-f filename 指定测试文件的名字,完成后会自动删除(这个文件必须指定你要测试的那个硬盘中)
-F file1 file2... 指定多线程下测试的文件名
批量测试项:
-g -n 指定测试文件大小范围,最大测试文件为4G,可以这样写 -g 4G
-y -q 指定测试块的大小范围
输出:
下面是几个日志记录的参数.好像要输出成图象进行分析,需要指定-a的测试才能输出
-R 产生Excel到标准输出
-b 指定输出到指定文件上. 比如 -Rb ttt.xls
三、测试的定义
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功能能通过减少实际操作系统调用并在操作系统调用时增加传输块的大小从而增强应用程序的性能。
几个特殊测试:
Mmap:许多操作系统支持mmap()的使用来映射一个文件到用户地址空间。映射之后,对内存的读写将同步到文件中去。这对一些希望将文件当作内存块来使用的应用程序来说很方便。一个例子是内存中的一块将同时作为一个文件保存在于文件系统中。
更多用法可以用命令查看:
[[email protected]_m ~]# /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -h