使用iozone測試磁盤性能(測試文件讀寫)


  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會給你的讀寫的內容進行緩存,會使數值非常不准確。

 

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

1、安裝依賴包

[root@comput2 tools]# dnf install glibc.i686 -y

2、安裝iozone

[root@comput2 tools]# rpm -ivh iozone-3-465.i386.rpm 

Preparing... ################################# [100%]
Updating / installing...
1:iozone-3-465 ################################# [100%]

錯誤提示:

[root@comput2 tools]# rpm -ivh iozone-3-465.i386.rpm 
error: Failed dependencies:
libc.so.6 is needed by iozone-3-465.i386
libc.so.6(GLIBC_2.0) is needed by iozone-3-465.i386
libc.so.6(GLIBC_2.1) is needed by iozone-3-465.i386
libc.so.6(GLIBC_2.2) is needed by iozone-3-465.i386
libpthread.so.0 is needed by iozone-3-465.i386
libpthread.so.0(GLIBC_2.0) is needed by iozone-3-465.i386
libpthread.so.0(GLIBC_2.1) is needed by iozone-3-465.i386
libpthread.so.0(GLIBC_2.2) is needed by iozone-3-465.i386
libpthread.so.0(GLIBC_2.3.4) is needed by iozone-3-465.i386
librt.so.1 is needed by iozone-3-465.i386
librt.so.1(GLIBC_2.1) is needed by iozone-3-465.i386

解決方法:

[root@comput2 tools]# dnf install glibc.i686

 

二、使用方法

最簡單開始使用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文件中

#先在/tmp目錄下創建一個文件

[root@comput3 mnt]# cd /tmp/
[root@comput3 tmp]# touch testfile
[root@comput3 tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Jun 22 13:22 testfile

#再執行測試命令(生成的文件大小,別給太大,會卡死。我們指定4G)

[root@comput3 mnt]# /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.465 $
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,
Vangel Bojaxhi, Ben England, Vikentsi Lapa,
Alexey Skidanov.

Run began: Thu Jun 22 13:22:56 2017

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 1490669 2380831 3607767 3608702
4194304 4 2055341 3253580 5060700 5085952
4194304 8 2437956 3670713 5750648 5794959
4194304 16 2529686 3698703 5750735 5778162
4194304 32 2599803 3766791 5698635 5736475
4194304 64 2660804 3828547 5624593 5665942
4194304 128 2680742 3910113 5381341 5393153
4194304 256 2515596 3830578 4935002 4965230
4194304 512 2528649 3832630 4915910 4947781
4194304 1024 2701632 3890505 4944666 4976889
4194304 2048 2722534 3941544 4931400 4963038
4194304 4096 2674452 3848342 4815188 4841886
4194304 8192 2305839 3121477 3571541 3581370

iozone test complete.
Excel output is below:

"Writer report"
"2" "4" "8" "16" "32" "64" "128" "256" "512" "1024" "2048" "4096" "8192"
"4194304" 1490669 2055341 2437956 2529686 2599803 2660804 2680742 2515596 2528649 2701632 2722534 2674452 2305839

"Re-writer report"
"2" "4" "8" "16" "32" "64" "128" "256" "512" "1024" "2048" "4096" "8192"
"4194304" 2380831 3253580 3670713 3698703 3766791 3828547 3910113 3830578 3832630 3890505 3941544 3848342 3121477

"Reader report"
"2" "4" "8" "16" "32" "64" "128" "256" "512" "1024" "2048" "4096" "8192"
"4194304" 3607767 5060700 5750648 5750735 5698635 5624593 5381341 4935002 4915910 4944666 4931400 4815188 3571541

"Re-Reader report"
"2" "4" "8" "16" "32" "64" "128" "256" "512" "1024" "2048" "4096" "8192"
"4194304" 3608702 5085952 5794959 5778162 5736475 5665942 5393153 4965230 4947781 4976889 4963038 4841886 3581370

 

[root@comput3 mnt]# pwd
/mnt

[root@comput3 mnt]# ll
total 4
-rw-r--r-- 1 root root 3940 Jun 22 13:24 output.xls

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM