iozone 一個檔案系統的效能檢測工具。

楊奇龍發表於2011-03-27
iozone 一個檔案系統的效能檢測工具。
一 介紹:iozone()是一個檔案系統的benchmark工具,
可以測試不同的作業系統中檔案系統的讀寫效能。
可以測試 Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread,
mmap, aio_read, aio_write 等等不同的模式下的硬碟的效能。
測試的時候請注意,設定的測試檔案的大小一定要大過你的記憶體(最佳為記憶體的兩倍大小),不然linux會給你的讀寫的內容進行快取。會使數值非常不真實。
二 安裝:
下載:root@client.example.com ~ #wget http:///src/current/iozone3_347.tar
解壓:root@client.example.com ~ #tar -xf iozone3_347.tar
編譯:root@client.example.com ~/iozone3_347/src/current # make linux
編譯之後就可以使用了。
三 引數介紹:
測試引數: -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
介紹一下上述引數的含義
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機制的效能
測試格式為-i #(#為數字),比如測試寫:-i 0,測試讀和寫:-i 0 -i 1。

-s 測試的檔案大小, 512k or -s 512M or -s 1G。
-r 檔案塊大小。
-a 在希望的檔案系統上測試,不過只有-a的話會進行全面測試,要花費很長時間,最好用-i指定測試範圍。
-g 設定自動模式下最大檔案大小 Set maximum file size (in Kbytes) for auto mode.
-f filename 指定臨時檔案
-F filename filename filename 指定臨時檔案組
-t #執行緒數
-q 指定最大記錄大小:-q 512K or -q 512M or -q 1g
-y 指定最小記錄大小:-y 512K or -q 512M or -q 1g
-n 指定最小測試檔案大小。
-R 產生execl格式的輸出日誌。
-b 將產生二進位制的execl的日誌檔名。
-C 顯示每個節點的吞吐量。
-c 測試包括檔案的關閉時間。

四:測試例項
注:要直接使用將iozone ,在$PATH 裡面做如下設定:
PATH=$PATH:$HOME/bin:~/iozone3_347/src/current
export PATH
# iozone -i 0 -i 1 -Rab ~/test-iozone.xls -g 4M -n 1M -C
在希望進行測試的檔案系統上執行:
#iozone -a
即可進行全面的自動測試,不過通常需要很長的時間,要耐心等待。
#iozone -a -i 1
只對write, rewrite進行效能測試
#iozone -a -i 1 -i 0
對讀寫進行效能測試
#iozone -a -g 1G -i 0 -i 1
對讀寫進行效能測試,並且最大測試檔案為1G
#iozone -Ra
測試所有方面,並且生成excel檔案
上面的命令在執行時,最好透過重定向儲存到另外一個檔案中.
#iozone –Rab output.wks
測試小檔案
#iozone -a -s 512m -y 1k -q 8k -b minfile_result.xls
測試普通檔案
如果2G記憶體測試,時間太長,先在grub.conf裡把記憶體變成256m,這時使用512m的檔案測試,就不會使用快取了。
可以保證測試的準確性
#iozone -a -s 512m -y 8k -q 512k -b comfile_result.xls
測試大檔案
#iozone -a -s 512m -y 1024k -q 10240k -i 0 -i 1 -i 2 -b largefile_result.xls
測試-i命令的使用
#iozone -Rab output.wks -g 1G -i 0 -i 1 -i 2 -i 8

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-690644/,如需轉載,請註明出處,否則將追究法律責任。

相關文章