什么是iozone?
iozone是一個文件系統的benchmark工具,可以測試不同的操作系統中文件系統的讀寫性能。 可以測試 Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write 等等不同的模式下的硬盤的性能。 測試的時候請注意,設置的測試文件的大小一定要大過你的內存(最佳為內存的兩倍大小),不然linux會給你的讀寫的內容進行緩存。會使數值非常不真實。
一、iozone安裝
官網地址:http://www.iozone.org/ [root@lvs_m ~]# wget http://www.iozone.org/src/current/iozone-3-471.src.rpm [root@lvs_m ~]# rpm -ivh iozone-3-471.src.rpm 1:iozone ########################################### [100%] [root@lvs_m current]# pwd /root/rpmbuild/SOURCES/iozone3_471/src/current [root@lvs_m current]# make linux-AMD64 #最簡單開始使用iozone方法是自動模式 [root@lvs_m ~]# /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -a Iozone: Performance Test of File I/O Version $Revision: 3.471 $ Compiled for 64 bit mode. Build: linux-AMD64 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 Nov 23 18:21:03 2017 Auto Mode Command line used: /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -a 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 64 4 763021 2133730 4018152 4274062 5860307 2006158 2772930 2561267 3738358 1780008 1879725 4018152 261173 64 8 592827 2278628 9318832 5389653 9318832 2298136 2892445 2561267 3791156 1304314 2133730 5389653 8182586 64 16 1013707 2561267 9006179 10402178 10821524 2772930 2892445 2467108 5283570 1933893 2203800 4897948 7940539 64 32 1066042 889431 7940539 9006179 12902017 3022727 3203069 2561267 3738358 1828508 2561267 5283570 9006179 64 64 1066042 2561267 10821524 6421025 10402178 2358717 2923952 2222043 3203069 2067979 1892980 4564786 4018152 128 4 1133103 2511022 8036304 2511022 6406138 604036 3053774 2843510 3785961 1911894 1852520 5603747 6727225 128 8 592699 1684006 7082197 9129573 9129573 3199360 3468030 3759450 5847904 1802755 2132084 6406138 8414153 128 16 1243315 2843510 9129573 5545860 9795896 3036502 3657016 3560017 5545860 2377579 321516 383258 4267461 128 32 1346196 2140585 8036304 10567140 12842051 4012317 4759253 4717434 5122535 2558895 2784517 7082197 9129573 128 64 1291158 2511022 11720614 8548124 11720614 3560017 4135958 3657016 4934216 2175277 3199360 3277486 4407601 128 128 1278855 554157 3199360 2985839 3199360 739689 824932 1051027 1967960 1349580 1911894 3759450 3759450 256 4 372593 664935 1778290 1881098 1924938 666586 1347557 924200 1369908 1600674 1729594 3285566 2539563 256 8 213688 2114473 4404088 3756894 7314033 3123106 827989 358056 1280084 650041 859127 1855098 3770085 256 16 894929 865358 4132864 5569035 9868433 2726577 2463808 1274008 2285501 930608 1755037 3770085 4840911 #iozone將在所有模式下進行測試,使用記錄塊從4k到16M,測試文件大小從64k到512M #以圖表形式顯示測試結果,可以使用,iozone將測試結果放在Excel中 [root@lvs_m ~]# /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -Rab output.xls #內存為2G是我們測試文件設置為4G [root@lvs_m ~]# /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -Ra -g 4g #只關心文件磁盤的read/write性能,而不必花費時間在其他模式上測試,則我們需要指定測試模式。 [root@lvs_m ~]# /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -Ra -g 4g -i 0 -i 1
二、常用參數
-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
三、測試的定義
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功能能通過減少實際操作系統調用並在操作系統調用時增加傳輸塊的大小從而增強應用程序的性能。 幾個特殊測試: Mmap:許多操作系統支持mmap()的使用來映射一個文件到用戶地址空間。映射之后,對內存的讀寫將同步到文件中去。這對一些希望將文件當作內存塊來使用的應用程序來說很方便。一個例子是內存中的一塊將同時作為一個文件保存在於文件系統中。
更多用法可以用命令查看:
[root@lvs_m ~]# /root/rpmbuild/SOURCES/iozone3_471/src/current/iozone -h