iozone是什么
官網(wǎng)鏈接:http://iozone.org/ 。官網(wǎng)說(shuō)明了IOzone是一個(gè)文件系統(tǒng)基準(zhǔn)測(cè)試工具。該測(cè)試套可以測(cè)量各種不同的文件操作,測(cè)試出不同讀寫操作模式下的吞吐量。
可以測(cè)試哪些讀寫模式?
- Write: 測(cè)試向一個(gè)新文件寫入的性能。當(dāng)一個(gè)新文件被寫入時(shí),不僅僅是那些文件中的數(shù)據(jù)需要被存儲(chǔ),還包括那些用于定位數(shù)據(jù)存儲(chǔ)在存儲(chǔ)介質(zhì)的具體位置的額外信息。這些額外信息被稱作“元數(shù)據(jù)”。它包括目錄信息,所分配的空間和一些與該文件有關(guān)但又并非該文件所含數(shù)據(jù)的其他數(shù)據(jù)。拜這些額外信息所賜,Write的性能通常會(huì)比Re-write的性能低。
- Re-write: 測(cè)試向一個(gè)已存在的文件寫入的性能。當(dāng)一個(gè)已存在的文件被寫入時(shí),所需工作量較少,因?yàn)榇藭r(shí)元數(shù)據(jù)已經(jīng)存在。Re-write的性能通常比Write的性能高。
- Read: 測(cè)試讀一個(gè)已存在的文件的性能。
- Re-Read: 測(cè)試讀一個(gè)最近讀過(guò)的文件的性能。Re-Read性能會(huì)高些,因?yàn)椴僮飨到y(tǒng)通常會(huì)緩存最 近讀過(guò)的文件數(shù)據(jù)。因?yàn)橄到y(tǒng)緩存可以被用于讀以提高性能。
- Random Read: 測(cè)試讀一個(gè)文件中的隨機(jī)偏移量的性能。許多因素都可能影響這種情況下的系統(tǒng)性能,例如:操作系統(tǒng)緩存的大小,磁盤數(shù)量,尋道延遲和其他。
- Random Write: 測(cè)試寫一個(gè)文件中的隨機(jī)偏移量的性能。同樣,有許多因素可能影響這種情況下的系統(tǒng)性能,例如:操作系統(tǒng)緩存的大小,磁盤數(shù)量,尋道延遲和其他。
- Random Mix: 測(cè)試讀寫一個(gè)文件中的隨機(jī)偏移量的性能。許多因素可能影響這種情況下的系統(tǒng)性能運(yùn)作,例如:操作系統(tǒng)緩存的大小,磁盤數(shù)量,尋道延遲和其他。這個(gè)測(cè)試只有在吞吐量測(cè)試模式下才能進(jìn)行。每個(gè)線程/進(jìn)程運(yùn)行讀或?qū)憸y(cè)試。這種分布式讀/寫測(cè)試是基于round robin 模式的。最好使用多于一個(gè)線程/進(jìn)程執(zhí)行此測(cè)試。
- Backwards Read: 測(cè)試使用倒序讀一個(gè)文件的性能。這種讀文件方法可能看起來(lái)很可笑,事實(shí)上,有些應(yīng)用確實(shí)這么干。MSC Nastran是一個(gè)使用倒序讀文件的應(yīng)用程序的一個(gè)例子。它所讀的文件都十分大(大小從G級(jí)別到T級(jí)別)。盡管許多操作系統(tǒng)使用一些特殊實(shí)現(xiàn)來(lái)優(yōu)化順序讀文件的速度,很少有操作系統(tǒng)注意到并增強(qiáng)倒序讀文件的性能。
- Record Rewrite: 測(cè)試寫與覆蓋寫一個(gè)文件中的特定塊的性能。這個(gè)塊可能會(huì)發(fā)生一些很有趣的事。如果這個(gè)塊足夠?。ū菴PU數(shù)據(jù)緩存?。瑴y(cè)出來(lái)的性能將會(huì)非常高。如果比CPU數(shù)據(jù)緩存大而比TLB小,測(cè)出來(lái)的是另一個(gè)階段的性能。如果比此二者都大,但比操作系統(tǒng)緩存小,得到的性能又是一個(gè)階段。若大到超過(guò)操作系統(tǒng)緩存,又是另一番結(jié)果。
- Strided Read: 測(cè)試跳躍讀一個(gè)文件的性能。舉例如下:在0偏移量處讀4Kbytes,然后間隔200Kbytes,讀4Kbytes,再間隔200Kbytes,如此反復(fù)。此時(shí)的模式是讀4Kbytes,間隔200Kbytes并重復(fù)這個(gè)模式。這又是一個(gè)典型的應(yīng)用行為,文件中使用了數(shù)據(jù)結(jié)構(gòu)并且訪問(wèn)這個(gè)數(shù)據(jù)結(jié)構(gòu)的特定區(qū)域的應(yīng)用程序常常這樣做。
許多操作系統(tǒng)并沒(méi)注意到這種行為或者針對(duì)這種類型的訪問(wèn)做一些優(yōu)化。同樣,這種訪問(wèn)行為也可能導(dǎo)致一些有趣的性能異常。一個(gè)例子是在一個(gè)數(shù)據(jù)片化的文件系統(tǒng)里,應(yīng)用程序的跳躍導(dǎo)致某一個(gè)特定的磁盤成為性能瓶頸。 - Fwrite: 測(cè)試調(diào)用庫(kù)函數(shù)fwrite()來(lái)寫文件的性能。這是一個(gè)執(zhí)行緩存與阻塞寫操作的庫(kù)例程。緩存在用戶空間之內(nèi)。如果一個(gè)應(yīng)用程序想要寫很小的傳輸塊,fwrite()函數(shù)中的緩存與阻塞I/O功能能通過(guò)減少實(shí)際操作系統(tǒng)調(diào)用并在操作系統(tǒng)調(diào)用時(shí)增加傳輸塊的大小來(lái)增強(qiáng)應(yīng)用程序的性能。這個(gè)測(cè)試是寫一個(gè)新文件,所以元數(shù)據(jù)的寫入也是要的。
- Frewrite:測(cè)試調(diào)用庫(kù)函數(shù)fwrite()來(lái)寫文件的性能。這也是一個(gè)執(zhí)行緩存與阻塞寫操作的庫(kù)例程。是緩存在用戶空間之內(nèi)。如果一個(gè)應(yīng)用程序想要寫很小的傳輸塊,fwrite()函數(shù)中的緩存與阻塞I/O功能可以通過(guò)減少實(shí)際操作系統(tǒng)調(diào)用并在操作系統(tǒng)調(diào)用時(shí)增加傳輸塊的大小來(lái)增強(qiáng)應(yīng)用程序的性能。這個(gè)測(cè)試是寫入一個(gè)已存在的文件,由于無(wú)元數(shù)據(jù)操作,測(cè)試的性能會(huì)高些。
- Fread:測(cè)試調(diào)用庫(kù)函數(shù)fread()來(lái)讀文件的性能。這是一個(gè)執(zhí)行緩存與阻塞讀操作的庫(kù)例程。緩存在用戶空間之內(nèi)。如果一個(gè)應(yīng)用程序想要讀很小的傳輸塊,fwrite()函數(shù)中的緩存與阻塞I/O功能能通過(guò)減少實(shí)際操作系統(tǒng)調(diào)用并在操作系統(tǒng)調(diào)用時(shí)增加傳輸塊的大小從而增強(qiáng)應(yīng)用程序的性能。
執(zhí)行測(cè)試
下載源碼
地址:http://www.iozone.org/src/current/iozone3_487.tar
解壓編譯
tar -xvf iozone3_487.tar
cd iozone3_487/src/current
make linux
運(yùn)行測(cè)試
#!/bin/bash
memtotal=`grep MemTotal /proc/meminfo |awk '{print $2}'`
maxsize=$[$memtotal+$memtotal]
for i in $(seq 1 5 )
do
./iozone -a -g $maxsize -Rb iozone$i.xls > iozone$i.output
sleep 120
done
上面的腳本會(huì)執(zhí)行五次iozone的自動(dòng)模式測(cè)試,測(cè)試的最大文件為系統(tǒng)內(nèi)存的兩倍大小。測(cè)試結(jié)果分別保存在文件iozone.xls 和 iozone.output中。
測(cè)試結(jié)果分析
上面提到過(guò),運(yùn)行的腳本會(huì)收集測(cè)試數(shù)據(jù)到兩個(gè)文件:一個(gè)是表格文件,一個(gè)是文本文件。
表格文件示例
在Deepin 桌面操作系統(tǒng)上,可以直接使用wps-office打開(kāi),可以看到生成的表格數(shù)據(jù)很詳細(xì),見(jiàn)下圖:

列是文件大小,橫是record的大小,中間的值是速度。表格文件可以直接使用各種office軟件打開(kāi),各位看管做圖能力非常強(qiáng)的,直接拿著這個(gè)原始數(shù)據(jù)就可以用了,也省的來(lái)回轉(zhuǎn)換數(shù)據(jù)格式了。
文本文件用法一
文本文件可以使用流行的畫圖工具gnuplot進(jìn)行作圖,使用方法很簡(jiǎn)單,iozone測(cè)試套中src目錄已經(jīng)自帶了畫圖的腳本,唯一要求的是系統(tǒng)安裝gunplot軟件。
sudo apt-get install gnuplot
在iozone的源碼目,運(yùn)行下面的腳本,文本文件作為參數(shù)輸入:
./Generate_Graphs iozone1.output
畫圖效果如下:

從這個(gè)速度的走勢(shì)圖暫時(shí)可以看出write的性能表現(xiàn)有兩個(gè)波峰,分別是cache和buffer的數(shù)據(jù)。隨著測(cè)試文件size變大,文件操作就變成了磁盤的操作,吞吐量就會(huì)下降的非???。
上面的只是畫出了write的數(shù)據(jù)走勢(shì)圖,在運(yùn)行該腳本的窗口直接enter會(huì)繼續(xù)畫剩余的各項(xiàng)操作的走勢(shì)圖,錄制出動(dòng)畫,讓大家感受下。

文本文件用法二
使用生成的文本文件和自帶的畫圖腳本,除了可以畫出眼花繚繞的走勢(shì)圖之外,好像還沒(méi)有完全發(fā)揮它的最大功效。比如,我想對(duì)比兩個(gè)版本之間數(shù)據(jù)的差異,去準(zhǔn)確地檢查相關(guān)的性能數(shù)據(jù)是提升還是下降了,那這個(gè)自帶的腳本是做不到這一點(diǎn)的。
在github.com上查到有現(xiàn)成的工具可以使用,見(jiàn)github:https://github.com/Rovanion/iozone-results-comparator。 使用方法直接參考readme文件即可。
它需要兩組或更多組Iozone結(jié)果作為輸入,腳本工具會(huì)使用各種統(tǒng)計(jì)方法對(duì)它們進(jìn)行比較。主輸出是一個(gè)包含表格和圖表的HTML頁(yè)面。還可以生成用于進(jìn)一步處理的csv數(shù)據(jù)文件。
我們使用iozone處理性能測(cè)試。需求是比較不同版本上的iozone結(jié)果。但是事實(shí)證明這是一項(xiàng)復(fù)雜的任務(wù)。要正確地比較數(shù)據(jù)
- 在每個(gè)Linux內(nèi)核版本上執(zhí)行幾個(gè)(推薦的5)運(yùn)行
- 使用統(tǒng)計(jì)測(cè)試來(lái)查找給定參數(shù)水平下結(jié)果是否不同
該工具使用步驟:
使用該工具之前,我們已經(jīng)收集了兩個(gè)系統(tǒng)的iozone的性能數(shù)據(jù),每一系統(tǒng)上分別跑了5輪iozone的數(shù)據(jù),分別為iozone1.output iozone2.output iozone3.output iozone4.output iozone5.output 文件。
下載
git clone https://github.com/Rovanion/iozone-results-comparator.git
安裝依賴
sudo apt-get install python-scipy python-matplotlib python-pip
pip install https://github.com/pallets/jinja/zipball/master
復(fù)制兩個(gè)版本的性能數(shù)據(jù)到目錄examples/。兩個(gè)目錄分別命名為basline和target
修改腳本run.sh如下:
BASELINE=$(find ./baseline -name "*.output" | sort)
SET1=$(find ./target -name "*.output" | sort)
運(yùn)行腳本run.sh
deepin@deepin-PC:~/Documents/iozone-results-comparator/examples$ ./run.sh
Processing...
Finished
To view results open in your web browser:
file:///home/deepin/Documents/iozone-results-comparator/examples/html_out/index.html
直接打開(kāi)生成的index.html頁(yè)面文件,可以很直觀的查看到baseline和target的性能差異。工具iozone-results-comparator會(huì)對(duì)測(cè)試數(shù)據(jù)集進(jìn)行各種不同的數(shù)學(xué)運(yùn)算,如四分位數(shù)運(yùn)算、平均數(shù)、幾何平均數(shù)、區(qū)間估計(jì)運(yùn)算等多維度運(yùn)算,得出多種對(duì)比結(jié)果,再針對(duì)數(shù)學(xué)運(yùn)算的出來(lái)的結(jié)果進(jìn)行比較。
下面是使用該工具對(duì)Deepin15.5 和Deepin15.5 SP2的結(jié)果對(duì)比圖。把Deepin15.5 的數(shù)據(jù)當(dāng)做是基線版本,查看Deepin15.5 SP2上的性能數(shù)據(jù)是否優(yōu)于基線版本。為了讓人一睹該工具統(tǒng)計(jì)出的結(jié)果真容,我錄了一個(gè)屏展示一下。

從上面結(jié)果可以看出,target的IO性能數(shù)據(jù)要整體好于baseline的數(shù)據(jù)。target系統(tǒng)的內(nèi)核版本是Linux deepin-PC 4.15.0-30deepin-generic 。而baseline的內(nèi)核版本是Linux deepin-PC 4.9.0-deepin9-amd64 。
總結(jié)
Iozone是測(cè)試文件系統(tǒng)各項(xiàng)指標(biāo)很好的工具,適合IO性能調(diào)優(yōu)的時(shí)候使用,把iozone,Generate_Graphs和iozone-results-comparator結(jié)合起來(lái)使用,才應(yīng)該是一個(gè)完整的操作。