如何使用iozone來(lái)統(tǒng)計(jì)和對(duì)比操作系統(tǒng)底層IO性能差異

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)下圖:


a.png

列是文件大小,橫是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  

畫圖效果如下:


b.png

從這個(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)畫,讓大家感受下。


c.gif

文本文件用法二

使用生成的文本文件和自帶的畫圖腳本,除了可以畫出眼花繚繞的走勢(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è)屏展示一下。

d.gif

從上面結(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è)完整的操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,356評(píng)論 0 5
  • CPU Cache 今天的CPU比25年前更復(fù)雜。那時(shí)候,CPU內(nèi)核的頻率與內(nèi)存總線的頻率相當(dāng)。內(nèi)存訪問(wèn)只比寄存器...
    blueshadow閱讀 3,218評(píng)論 0 5
  • 今天看到一位朋友寫的mysql筆記總結(jié),覺(jué)得寫的很詳細(xì)很用心,這里轉(zhuǎn)載一下,供大家參考下,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,836評(píng)論 0 30
  • 今天重要三件事:工作、宣貫、煮飯 一、肯定 晚上吃飯小華一臉愁不開(kāi)心,慢悠悠地挑著菜。 我說(shuō):小華,怎么啦...
    如霜雪閱讀 264評(píng)論 0 3
  • 昨天得知又一個(gè)好朋友陷入婚姻危機(jī),結(jié)婚還不到一年吧。我說(shuō)你平時(shí)受了委屈怎么不和我們說(shuō)說(shuō)的,她說(shuō)她老公不喜歡她跟...
    路路君閱讀 230評(píng)論 0 1

友情鏈接更多精彩內(nèi)容