欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iozone测试磁盘性能

程序员文章站 2024-03-21 17:19:34
...

什么是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