1. 程式人生 > >使用iozone測試磁盤性能

使用iozone測試磁盤性能

獲取 最簡 rect 處理器 常常 塊大小 mil ... bsp

【轉】https://www.cnblogs.com/wuchanming/p/3746565.html#undefined

先占坑,用到再來搬。

IOzone是一個文件系統測試基準工具。可以測試不同的操作系統中文件系統的讀寫性能。可以通過 write, re-write, read, re-read, random read, random write, random mix, backwards read, record rewirte, strided read, fwrite, frewrite, fread, freread, mmap, async I/0 等不同的模式下的硬盤的性能。
測試的時候請註意,設置的測試文件的大小一定要大過你的內存(最佳為內存的兩倍大小),不然linux會給你的讀寫的內容進行緩存,會使數值非常不準確。

1 #rpm -ivh iozone-3-408.i386.rpm

安裝iozone,最新版iozone是3-408,下載地址:http://www.iozone.org/;你既可以下載源碼包,還可以下載編譯好的RPM包,還有使用文檔下載。

1 #rpm -ivh iozone-3-408.i386.rpm

註:之中方式只能安裝在/opt下,本想安裝在/usr/local/下的,但是iozone把位置定死了。不知道源碼安裝是否可以改變位置,麻煩用的告訴一聲^_^

在介紹具體用法之前,我們先來做幾個例子(這裏iozone安裝在/opt/iozone下,想知道軟件安裝在哪使用:rpm -qpl iozone-3-408.i386.rpm)
最簡單開始使用iozone方法是自動模式

1 #/opt/iozone/bin/iozone -a

iozone將在所有模式下進行測試,使用記錄塊從4k到16M,測試文件大小從64k到512M

如果想以圖表形式顯示測試結果,可以使用,iozone將測試結果放在Excel中

1 #/opt/iozone/bin/iozone -Ra 或 #/opt/iozone/bin/iozone -Rab output.xls

如果內存大於512MB,則測試文件需要更大;最好測試文件是內存的兩倍。例如內存為1G,將測試文件設置最大為2G

#/opt/iozone/bin/iozone -Ra -g 2g

如果我們只關心文件磁盤的read/write性能,而不必花費時間在其他模式上測試,則我們需要指定測試模式。具體將在參數解釋中介紹

1 #/opt/iozone/bin/iozone -Ra -g 2g -i 0 -i 1

最後,如果我們測試的NFS,將使用-c,這通知iozone在測試過程中執行close()函數。使用close()將減少NFS客戶端緩存的影響。但是如果測試文件比內存大,就沒有必要使用參數-c

1 #/opt/iozone/bin/iozone -Rac


測試的定義
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機制的性能。

參數介紹

iozone功能很強大,當然參數也很多,但是我們常用的就那幾個參數
Usage: iozone [-s filesize_Kb] [-r record_size_Kb ] [-f [path]filename]
  [-i test] [-E] [-p] [-a] [-A] [-z] [-Z] [-m] [-M] [-t children] [-h] [-o]
  [-l min_number_procs] [-u max_number_procs] [-v] [-R] [-x]
  [-d microseconds] [-F path1 path2...] [-V pattern] [-j stride]
  [-T] [-C] [-B] [-D] [-G] [-I] [-H depth] [-k depth] [-U mount_point]
  [-S cache_size] [-O] [-K] [-L line_size] [-g max_filesize_Kb]
  [-n min_filesize_Kb] [-N] [-Q] [-P start_cpu] [-c] [-e] [-b filename]
  [-J milliseconds] [-X filename] [-Y filename] [-w] [-W]
  [-y min_recordsize_Kb] [-q max_recordsize_Kb] [-+m filename]
  [-+u ] [ -+d ] [-+p percent_read] [-+r] [-+t ] [-+A #]


-a
全自動模式測試。測試記錄塊大小從4k到16M,測試文件從64k到512M

-A
使用自動模式雖然測試比較全面,但是比較花時間。-a選項將在文件大於32MB時停止使用低於64k一下記錄塊,來節省時間。-A通知iozone不要節省時間,進行所有測試。註:在3.61版本以後不建議使用,用-az代替-aA

-B
使用mmap()。這將使用mmap()接口來創建並訪問所有測試用的臨時文件。一些應用程序傾向於將文件當作內存的一塊來看待。這些應用程序對文件執行mmap()調用,然後就可以以讀寫內存的方式訪問那個塊來完成文件I/O。

-c
計算時間將close()包括進來

-C
顯示吞吐量測試中每個客戶端的字節數。

-D
對mmap文件使用MSYNC(MS_ASYNC)。告訴操作系統在mmap空間的所有數據需要被異步的寫到磁盤上。

-e
測試時間是包含flush(fsync, fflush)

-f filename
指定用來測試臨時文件,在測試完成後將被自動刪除

-F filename filename ...
指定測試中每個臨時文件名,文件名的數量應該和指定的進程或線程數相同

-g #
在自動模式下設置文件最大值,可以使用#k #m #g分別表示kb,mb,gb

-G
對mmap文件使用msync(MS_SYNC)。告訴操作系統在mmap空間的所有數據需要被同步的寫到磁盤上

-h
顯示幫助

-i #
指定運行於哪種模式測試。可以使用-i # -i # -i #進行多個測試
0=write/rewrite
1=read/re-read
2=random read/random write
3=backwards read
4=re-write-record
5=stride-read
6=fwirte/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

-I
對所有文件操作使用DIRECT I/O。通知文件系統所有操作跳過緩存直接在磁盤上操作

-j #
設置訪問文件的跨度為(# * 塊)。stride read測試將使用這個跨度來讀塊

-J #(毫秒)
在每個I/O操作之前產生指定毫秒的計算延遲。看-X和-Y獲取控制計算延遲的其他參數

-l #
設置程序最小進程數。在測試過程允許用戶設置的最小進程或線程數。需要配合-u選項使用。

-L #
設置處理器交換信息的單位量為#(bytes)。可以加速測試。

-m
iozone將在內部使用多個緩存。一些程序反復復寫一塊緩存,還有就是設置多個緩存塊。此參數將允許使用這兩種模式。iozone默認行為是重復使用內部一個緩存。此選項將允許在內部使用多個緩存塊。

-M
調用uname(),將返回字符串放在輸出文件中

-n #
設置自動模式下測試文件的最小值

-N
報告結果以毫秒每操作的方式顯示

-o
寫方式是同步寫到磁盤上

-O
報告結果以操作每秒方式顯示

-q #
在自動模式下設置記錄塊的最大值,可以使用#k(kb),#m(mb),#g(gb)。使用-y可以設置最小值

-r #
設置記錄塊大小為#

-R
使用Excel顯示結果

-s #
設置測試文件大小

-S #
設置處理器的緩存大小

-t #
設置測試程序的線程或進程數

-T
使用POSIX的pthreads進行測試

-u #
設置最大進程或線程數,需要配合-l參數使用

-U mountpoint
在測試開始之前,iozone將unmount和remount掛載點。這將保證測試中緩存不包含任何文件

-w
在測試結束後不要刪除臨時文件。臨時文件將在測試過後保存下來

-W
在測試過程中,當讀或寫文件時鎖住文件

-y #
設置記錄塊最小值

-z
同-a一起使用,進行全部測試

-Z
允許mmap I/O和file I/O混合使用

下面做個在我機器上做的測試:只進行read/write測試,測試文件大小是4G,記錄塊從2k到8m,並將測試數據輸出到Excel文件中

技術分享圖片 技術分享圖片
[root@localhost]]# /opt/iozone/bin/iozone -a -s 4g -i 0 -i 1 -f /tmp/testfile -y 2k -q 8m -Rb output.xls
    Iozone: Performance Test of File I/O
            Version $Revision: 3.408 $
        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: Sat Sep 29 16:13:49 2012

    Auto Mode
    File size set to 4194304 KB
    Using Minimum Record Size 2 KB
    Using Maximum Record Size 8192 KB
    Excel chart generation enabled
    Command line used: /opt/iozone/bin/iozone -a -s 4g -i 0 -i 1 -f /tmp/testfile -y 2k -q 8m -Rb output.xls
    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
         4194304       2   73827   29362    81404    81444                                                                          
         4194304       4   69155   69602    76825    77202                                                                          
         4194304       8   68565   69824    76052    84360                                                                          
         4194304      16   68075   69315    76283    80031                                                                          
         4194304      32   66513   67132    76137    76763                                                                          
         4194304      64   72619   73450    83329    85359                                                                          
         4194304     128   74573   75989    70115    85572                                                                          
         4194304     256   72895   74590    79285    88244                                                                          
         4194304     512   73291   73907    82552    87192                                                                          
         4194304    1024   73020   74662    82190    80162                                                                          
         4194304    2048   69200   69990    77603    83164                                                                          
         4194304    4096   68509   70153    74310    80600                                                                          
         4194304    8192   67789   69434    78875    83344
技術分享圖片 技術分享圖片

最後數據就是測試結果,左邊第一列是測試文件大小,第二列是記錄塊大小(單位是kb),以後每列就是測試模式(單位是kb/s)

使用iozone測試磁盤性能