檔案系統性能測試--iozone
阿新 • • 發佈:2018-11-24
iozone
一個檔案系統性能評測工具,可以測試Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write 等不同模式下不同檔案系統的讀寫效能
引數
引數 | 說明 |
---|---|
-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混合使用 |
例項
1 |
sudo iozone -ac -s 8m -f /home/testfile -y 2k -q 8m |
1 |
Time Resolution = 0.000001 seconds. |
結果: 左邊第一列是測試檔案大小,第二列是記錄塊大小(單位是kb),以後每列就是測試模式(單位是kb/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功能能通過減少實際作業系統呼叫並在作業系統呼叫時增加傳輸塊的大小來增強應用程式的效能。 |
匯出Excel表格
1 |
iozone -i 0 -i 1 -s 8m -f /testfile -y 2k -q 8m -Rab /iozone_test.xls |
在嵌入式開發板上匯出表格資料全為0,無法使用
測試
1 |
./iozone -s 100M -ac -S 512k 2>&1 | tee test.log |