1. 程式人生 > >檔案系統性能測試--iozone

檔案系統性能測試--iozone

iozone

一個檔案系統性能評測工具,可以測試Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write 等不同模式下不同檔案系統的讀寫效能

官網: http://www.iozone.org

引數

引數 說明
-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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
8192 2 189862 415349 1181932 1608842 1018766 374677 1329412 398615 665257 405521 367288 1569381 1528607
8192 4 237746 686099 1981095 2178140 1788563 536369 1336133 765253 1662395 391698 586565 1920739 2217786
8192 8 312623 871304 1620222 1851298 2215927 607182 2392438 979445 1817225 853513 873808 2615731 2264859
8192 16 280834 625953 2536184 2567262 2224823 1134478 2546334 1416090 2339815 938923 890545 2510611 2251797
8192 32 395003 1122984 1941688 1715601 1975400 721755 2480882 1573550 1757908 940543 1122654 2917577 2592443
8192 64 270175 1053372 2642689 2850293 2632364 1407332 2715153 1819245 2919312 1094161 1165811 1840095 1886259
8192 128 275769 1149623 2585809 2727871 2409382 1451995 2636606 1789028 2325877 1041968 1090826 2615731 1923858
8192 256 291167 1144454 2486987 2536184 2369668 1446067 2202151 1263978 2343965 1137144 1136994 2354728 2517417
8192 512 349935 1193800 2327295 2420755 2422804 1362140 1923427 1698135 2658845 1083329 1143007 1855096 1833907
8192 1024 333752 1308403 2522962 2538433 2496020 1461568 2443132 1573550 2954201 901409 1139520 1943115 2304969
8192 2048 276766 1110176 2367709 2430860 2420755 1338162 1757548 1406583 1580571 805492 1024660 2241221 2357313
8192 4096 592891 1179538 2268747 2339337 2063424 1196419 1890618 1383531 1853795 204928 1006737 1808425 1798486
8192 8192 328823 1199761 2394606 2408707 2175244 1265747 2327926 1293333 2159657 1222513 1181607 2380009 2428798

結果: 左邊第一列是測試檔案大小,第二列是記錄塊大小(單位是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