iozone的使用與介紹【轉】

轉自:https://www.jianshu.com/p/faf82e400aa6

iozone的使用與介紹

iozone介紹:

iozone(www.iozone.org)是一個文件系統的benchmark工具,可以測試不同的操作系統中文件系統的讀寫性能。
可以測試

Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread,mmap, aio_read, aio_write 

等等不同的模式下的硬盤的性能。

測試的時候請注意,設置的測試文件的大小一定要大過你的內存(最佳爲內存的兩倍大小),不然linux會給你的讀寫的內容進行緩存。會使數值非常不真實.

iozone常用的幾個參數.

-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

我的測試實例:

./iozone -a -n 512m -g 4g -i 0 -i 1 -i 5 -f /mnt/iozone -Rb ./iozone.xls

注:進行全面測試.最小測試文件爲512M直到測試到4G.測試read,write,和Strided Read.測試的地方在mnt下。生成Excel的文件.

./iozone -i 0 -i 1 -f /iozone.tmpfile -Rab /test-iozone.xls -g 8G -n 4G -C

結果分析:
使用這條測試命令測試NAS後,我對下邊產生的Execl文件中的一段表進行下解釋,很簡單的:

Writer Report       4   8   16  32  64
32768   5300    8166    12726   16702   24441
65536   5456    8285    9630    16101   18679
131072  5539    6968    9453    13086   14136
262144  5088    7092    9634    11602   14776
524288  5427    9356    10502   13056   13865
1048576     6061    9625    11528   12632   13466

在Execl文件中的這段表,它說明了這個表單是關於write的測試結果,左側一列是測試文件大小(Kbytes),
最上邊一行是記錄大小,中間數據是測試的傳輸速度。舉例說明,比如表中的“5300”,意思是測試文件大小爲
32M,以記錄大小爲4K來進行傳輸,它的傳輸速度爲5300 Kbytes/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機制的性能。

命令行參數:

接下來解釋每個參數的用法。

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你不介意等待,即使在文件非常大時也希望進行小塊 的測試。
注意: 不推薦在Iozone3.61版中使用這個參數。使用–az –i 0 –i 1替代。
 
-b filename
Iozone輸出結果時將創建一個兼容Excel的二進制格式的文件。
 
-B
使用mmap()文件。這將使用mmap()接口來創建並訪問所有測試用的臨時文件。一
些應用程序傾向於將文件當作內存的一塊來看待。這些應用程序對文件執行mmap()
調用,然後就可以以讀寫內存的方式訪問那個塊來完成文件I/O。
 
-c
計算時間時將close()包括進來。This is useful only if you suspect that close() is
broken in the operating system currently under test. 對於NFS版本3測試而言這將會
很有用,同時它也能幫助我們識別nfs3_commit 是否正常工作。
 
-C
顯示吞吐量測試中每個客戶傳輸的字節數。如果你的操作系統在文件I/O或進程管
理方面存在飢餓問題時這將派上用場。
 
 
-d #
穿過“壁壘”時微秒級的延遲。在吞吐量測試中所有線程或進程在執行測試前都必
須掛起在一道“壁壘”之前。通常來說,所有線程或進程在同一時間被釋放。這個
參數允許在釋放每個進程或線程之間有一定的延遲(微秒級)。Microsecond delay out of barrier.  During the throughput tests all threads or processes are
forced to a barrier before beginning the test.
 
-D
對mmap文件使用msync(MS_ASYNC) 。這告訴操作系統在mmap空間的所有數據
需要被異步地寫到磁盤上。
 
-e
計算時間時將flush (fsync,fflush) 包括進來。
 
-E
用來進行一些擴展的測試。只在一些平臺上可用。使用pread 接口。
 
-f filename
用來指定測試時使用的臨時文件的文件名。當使用unmount參數時這將很有用。測試時在每個測試之間進行unmount的話,測試使用的臨時文件在一個可以被卸載的文件夾中是很有必要的。卸載當前工作目錄是不可能的,因爲Iozone進程運行於此。
 
-F filename filename filename …
指定吞吐量測試中每個臨時文件的文件名。文件名的數量應該和指定的進程或線程
數相同。
 
-g #
設置自動模式可使用的最大文件大小(Kbytes)。
 
-G
對mmap文件使用msync(MS_SYNC)。這告訴操作系統在mmap空間的所有數據
需要被同步地寫到磁盤上。
 
-h
顯示幫助。
 
-H #
使用POSIX異步I/O接口中的#號異步操作。Iozone使用POSIX 異步I/O接口,並使
用bcopy 從異步緩存拷貝迴應用程序緩存。一些版本的MSC NASTRAN就是這麼進
行I/O操作的。應用程序使用這一技術以便異步I/O可以在一個庫中實現,而不需要
更改程序內模。
This technique is used by applications so that the async
I/O may be performed in a library and requires no changes to the applications internal model.
 
-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). 
總是需要先進行0號測試以便後面的測試有文件可以測試。
也支持使用-i # -i # -i # 以便可以進行多個測試。
 
-I
對所有文件操作使用VxFS VX_DIRECT 。告訴VXFS 文件系統所有對文件的操作將跨
過緩存直接在磁盤上進行。
 
-j #
設置訪問文件的跨度爲 (# * 塊 大小). Stride read測試將使用這個跨度來讀塊 。
 
-J # (毫秒級)
在每個I/O操作之前產生指定毫秒的計算延遲。看 -X 和-Y來獲取控制計算延
遲的其他參數。
    -k #
Use POSIX async I/O (no bcopy) with # async operations. Iozone will use POSIX async
I/O and will not perform any extra bcopys. The buffers used by Iozone will be handed to
the async I/O system call directly.
 
-K
在普通測試時生成一些隨機訪問。
 
-l #
Set the lower limit on number of processes to run. When running throughput tests this
option allows the user to specify the least number of processes or threads to start. This
option should be used in conjunction with the -u option.
 
-L #
Set processor cache line size to value (in bytes). Tells Iozone the processor cache line size.
This is used internally to help speed up the test.
 
-m
Tells Iozone to use multiple buffers internally. Some applications read into a single
buffer over and over. Others have an array of buffers. This option allows both types of
applications to be simulated.  Iozone’s default behavior is to re-use internal buffers.
This option allows one to override the default and to use multiple internal buffers.
 
-M
Iozone will call uname() and will put the string in the output file.
 
-n #
爲自動模式設置最小文件大小(Kbytes)。
 
-N
報告結果以毫秒每操作的方式顯示。
 
-o
寫操作是同步寫到磁盤的。 (O_SYNC). Iozone 會以O_SYNC 標誌打開文件。這強制所有寫操作完全寫入磁盤後才返回測試。
 
-O
報告結果以操作每秒的方式顯示。
 
-p
This purges the processor cache before each file operation. Iozone will allocate another
internal buffer that is aligned to the same processor cache boundary and is of a size that
matches the processor cache. It will zero fill this alternate buffer before beginning each test.
This will purge the processor cache and allow one to see the memory subsystem without
the acceleration due to the processor cache.
 
-P #
Bind processes/threads to processors, starting with this cpu #. Only available on some
platforms. The first sub process or thread will begin on the specified processor. Future processes or threads will be placed on the next processor. Once the total number of cpus is exceeded then future processes or threads will be placed in a round robin fashion.
 
-q #
設置自動模式下使用的最大塊大小(Kbytes) 。也可以通過-q #k ( Kbytes) 或 -q #m ( Mbytes) 或 -q #g ( Gbytes)。設置最小塊大小見 –y 。
 
-Q
Create offset/latency files
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章