2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

磁盤I/O測試工具Bonnie (轉(zhuǎn)貼)

 ShangShujie 2011-07-13
磁盤I/O測試工具Bonnie++(轉(zhuǎn)貼)

關于磁盤I/O測試工具Bonnie++的專題

 

作者簡介:

張樂奕,通常使用的網(wǎng)名為kamus,也曾用過seraphim,現(xiàn)在任職于北京某大型軟件公司,Oracle數(shù)據(jù)庫DBA,主要負責證券行業(yè)的核心交易系統(tǒng)數(shù)據(jù)庫管理及維護工作。

熱切關注Oracle技術和相關操作系統(tǒng)技術,出沒于各大數(shù)據(jù)庫技術論壇,目前是中國最大的Oracle技術論壇www.的數(shù)據(jù)庫管理版版主。

閱讀更多技術文章和隨筆可以登錄我的個人bloghttp://blog./kamus

 

目錄

前言

安裝

使用.

評測.

相關鏈接

 

前言

最早是eygleitpub上推薦這個工具,起因是我對于Sun的軟RAID性能提出的置疑,后來eygle陸續(xù)用這個工具作了一些盤陣IO的測試,包括EMCT3的一些比較。

這些測試結(jié)果都發(fā)表在eygle的個人站點上,見本文最后相關鏈接部分。

 

但是我卻一直沒有自己用Bonnie++測試過IO性能,最近一個客戶要修改自己盤陣的RAID配置,本來就是使用D2的陣列,只能支持軟RAID的一個性能比較差的古老東東了,在我們的測試過程中忽然又發(fā)現(xiàn)12塊盤的盤陣配置的是RAID10,但是同時只有2塊盤在作讀寫,也就是stripe設置只是2,這個問題在一年多以前剛上系統(tǒng)的時候就是這樣,居然一直沒有發(fā)現(xiàn)用了這么長時間。

客戶最終決定重新設置一下RAID的配置,首先將redodatafile分開,redo所在的盤用4塊作RAID10,剩下8塊再作RAID10,供數(shù)據(jù)文件使用,并且重新設置stripe,redo所在的lun設置為2datafile所在的lun設置為4。

從理論上看,這樣的修改應該會大幅度提到整個數(shù)據(jù)庫的I/O效率,但是客戶要求能夠有一個實際的修改效果報告,也就是需要作修改前和修改后的對比。

這樣,于是決定使用bonnie++來作磁盤級的修改效果報告。至于數(shù)據(jù)庫級的修改效果自然有壓力測試程序可以完成,此處不表。

 

既然決定使用,那么自然要琢磨一下該怎么用了。剛剛bonnie++已經(jīng)開始運行了,于是閑下來,寫了這篇文章。

 

安裝

其實今天大部分的時間是耗在怎么讓bonnie++運行起來上面了。

 

bonnie++的主頁上下載了最新的source,bonnie++1.03a.tgz。

gunzip bonnie++-1.03a.tgz

生成bonnie++-1.03a.tar文件,然后解包

tar xvf bonnie++-1.03a.tar

生成bonnie++-1.03a文件夾

cd bonnie++-1.03a

make

報錯。

/usr/ucb/cc:  language optional software package not installed

 

原來編譯器就根本沒裝。

先介紹一下主機情況,一臺SunFire v480,兩塊73G內(nèi)置硬盤,4UltraSPARC-III+CPU8G內(nèi)存,安裝的是Solaris8,由于需要模擬真實環(huán)境,所以安裝的是比較老的02.2版本,而且沒有打任何patch。

 

Sun給的安裝光盤中居然沒有找到Companion CD,編譯器應該是在這張盤上,沒辦法只好上網(wǎng)自己找,還好,很快就找到一個很棒的站點blastwave,包括了Solaris8,9sparcx86版本的所有需要的package。

 

根據(jù)gcc包下載頁面中的說明,發(fā)現(xiàn)需要下載下面四個package。

common-1.3.3-SunOS5.8-sparc-CSW.pkg.gz

gcc3rt-3.3.3,REV=2004.04.23-SunOS5.8-sparc-CSW.pkg.gz

libiconv-1.8,REV=2003.01.12-SunOS5.8-sparc-CSW.pkg.gz

gcc3-3.3.3,REV=2004.03.22-SunOS5.8-sparc-CSW.pkg.gz

 

前面三個包是最后gcc3包的前提條件,必須安裝。全部下載完畢,開始安裝第一個包,也就是common那個包,報錯。

提示操作系統(tǒng)的110934補丁版本過低,需要升級。

 

OK,再上網(wǎng)找,直接用google查,關鍵字是“110934 soalris”,通常前面幾個link就會指向SunSolve站點的下載頁面,patch通常不大,很快就下載完了。

 

開始打補丁,patchadd 110934-21

系統(tǒng)運行半天,報錯。

說要安裝這個補丁就需要先安裝110380-04的補丁。我倒。

再上網(wǎng)找,下載完110380-04,先patchadd 110380-04,一切正常。

再重新patchadd 110934-21,一切正常。

 

打完補丁以后,重新安裝common包,OK,一切正常。

pkgadd -d common-1.3.3-SunOS5.8-sparc-CSW.pkg.gz

 

然后依次安裝其它的包,一切正常。

 

這個包將gcc安裝到/opt/csw/gcc3目錄下。

說明文件指出安裝完gcc將創(chuàng)建/opt/csw/bin下的gcc執(zhí)行程序,所以要求將這個路徑加入用戶的PATH變量中,但是實際上安裝完gcc3.3的版本以后,并沒有在上面的路徑中生成任何文件。

后來我再安裝gcc2.95版本的時候發(fā)現(xiàn)這個版本的安裝才是將gcc生成到/opt/csw/bin中。

所以如果我們在Solaris8中即安裝了gcc2.95又安裝了gcc3.3,那么要注意這兩個版本的gcc文件在不同的路徑下,其實這也是應該的,否則新版本會覆蓋舊版本,往往是很多人不愿意的。

 

回到上面,安裝完gcc3以后,再次運行make,仍然報錯。

/usr/ucb/cc:  language optional software package not installed

 

檢查PATH環(huán)境變量,已經(jīng)將/opt/csw/gcc3/bin目錄加入了。

想了一下,感覺應該是系統(tǒng)還在使用原來的/usr/ucb/cc。于是將cc鏈接到新安裝的gcc上,這樣無論什么時候調(diào)用cc其實都是直接使用gcc了。

whereis cc

cd /usr/ucb

mv cc cc.org

ln -s /opt/csw/gcc3/bin/gcc /usr/ucb/cc

 

備注:如果要安裝gcc2的包,那么需要下載下面兩個package。

gcc2rt-2.95.3,REV=2003.03.01-SunOS5.8-sparc-CSW.pkg.gz

gcc2-2.95.3-SunOS5.8-sparc-CSW.pkg.gz

安裝完畢以后,同樣是將cc鏈接到這個版本的gcc上。

whereis cc

cd /usr/ucb

mv cc cc.org

ln -s /opt/csw/bin/gcc /usr/ucb/cc

 

修改完畢以后編譯成功。

 

運行bonnie++,報錯。

libstdc++.so.5: cannot open shared object file: No such file or directory.

 

繼續(xù)查資料,發(fā)現(xiàn)bonnie++尋找的lib路徑是環(huán)境變量LD_LIBRARY_PATH指定的路徑,但是這個路徑下并沒有libstdc++.so.5文件,于是手工將libstdc++.so.5文件從gcc3的安裝路徑中ln/usr/lib下面。

# ln -s /opt/csw/gcc3/lib/libstdc++.so.5 /usr/lib/libstdc++.so.5

再次運行,仍然報錯。

libgcc_s.so.1: cannot open shared object file: No such file or directory.

這次就輕車熟路了,直接再作一次link。

# ln -s /opt/csw/gcc3/lib/libgcc_s.so.1 /usr/lib/libgcc_s.so.1

 

終于,bonnie++可以正常運行了。

 

我們可以不需要自己編譯,在eygle的站點上有Solaris8下載編譯好的bonnie++。直接可以使用,當然如果運行報libstdc++.so.5找不到的問題,還需要按照上面的方法解決。

使用.

接下來繼續(xù)介紹bonnie++Version: 1.03)的使用方法以及結(jié)果的含義。

usage: bonnie++ [-d scratch-dir] [-s size(Mb)[:chunk-size(b)]]

 [-n number-to-stat[:max-size[:min-size][:num-directories]]]

 [-m machine-name]

 [-r ram-size-in-Mb]

 [-x number-of-tests] [-u uid-to-use:gid-to-use] [-g gid-to-use]

 [-q] [-f] [-b] [-p processes -y]

 

首先說明一下命令中常用的參數(shù)。

-d 生成測試文件的路徑

-s 生成測試文件的大小,以M為單位(如果不使用-r參數(shù),則要求文件大小至少是系統(tǒng)物理內(nèi)存的2倍)

-m 機器名,實際上我們可以認為是本次測試的方案名,可以隨便定義。默認是本機的hostname。

-r 內(nèi)存大小,指定內(nèi)存大小,這樣可以通過-s參數(shù)創(chuàng)建r*2大小的文件,通常用于縮短測試時間,但是需要注意這樣由于內(nèi)存的cache可能導致測試結(jié)果的不準確

-x 測試的次數(shù)

-u 測試文件的屬主和組,默認是執(zhí)行bonnie++的當前用戶和當前組

-g 測試文件的組,默認是執(zhí)行bonnie++的當前用組

-b 在每次寫文件時調(diào)用fsync()函數(shù),對于測試郵件服務器或者數(shù)據(jù)庫服務器這種通常需要同步操作的情況比較適合,而不使用該參數(shù)則比較適合測試copy文件或者編譯等操作的效率。

 

通常我們可以簡單地運行如下命令進行磁盤性能測試:

bonnie++ -d /global/oradata –m sun3510

這樣將會在指定的目錄下(通常我們會指定一個盤陣上卷的掛載點),生成相當于主機物理內(nèi)存兩倍的文件,如果總量大于1G,則生成多個大小為1G的文件。假設主機內(nèi)存為4G,那么在測試中就會生成81G的文件,到測試結(jié)束,這些文件會被自動刪除。

 

如果我們的主機內(nèi)存是4G,但是我們想縮短測試的時間,比如說只寫2G的文件,就應該執(zhí)行下面的命令:

bonnie++ -d /global/oradata –m sun3510 –s 2048 –r 1024

 

bonnie++的在測試的時候通常會占用大量的IOCPU,所以請不要在生產(chǎn)環(huán)境的業(yè)務高峰期進行測試。

 

下面看一個測試結(jié)果,通過這個結(jié)果我們解釋一下到底bonnie++在測試過程中都作了什么,而每一個輸出的結(jié)果又表示了什么。

這個測試結(jié)果是在一臺SunFire V880 + D2陣列上進行的,主機配置是2UltraSparc-III+ 900MHzCPU,4G內(nèi)存,而D2陣列是滿配的1236G SCSI磁盤,劃分了兩個LUN,我們的測試目的地/global/oradata建立在其中的一個LUN上,使用了8塊磁盤,用Veritas Volum Manager作了RAID10stripe(也就是ncol)設置為4。

bonnie++ -d /global/oradata -s 8192 -m d2new -u oracle

Using uid:1001, gid:101.

Writing with putc()...done

Writing intelligently...done

Rewriting...done

Reading with getc()...done

Reading intelligently...done

start 'em...done...done...done...

Create files in sequential order...done.

Stat files in sequential order...done.

Delete files in sequential order...done.

Create files in random order...done.

Stat files in random order...done.

Delete files in random order...done.

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-

                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--

Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP

d2new            8G 18275  62 32832  26 25423  55 27444  94 106842  60 549.9   7

                    ------Sequential Create------ --------Random Create--------

                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--

              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP

                 16  1723  15 +++++ +++  5059  40  4821  37 +++++ +++   653   5

 

依次解讀一下,從Writing with putc()開始到Delete files in random order…結(jié)束,這是bonnie++作的12項測試,這12項測試依次對應12項結(jié)果,而這12項結(jié)果又被分為了5大類,分別是Sequential Output(寫測試),Sequential Input(讀測試),Random Seeks(讀寫測試),Sequential Create(順序讀寫文件測試)和Random Create(隨意讀寫文件測試)。

那么測試步驟和測試結(jié)果依次對應的順序就是:

Writing with putc() -> Sequential OutputPer Chr

Writing intelligently -> Sequential OutputBlock

Rewriting -> Sequential OutputRewrite

Reading with getc() -> Sequential InputPer Chr

Reading intelligently -> Sequential InputBlock

start 'em -> Random Seeks

Create files in sequential order -> Sequential CreateCreate

Stat files in sequential order -> Sequential CreateRead

Delete files in sequential order -> Sequential CreateDelete

Create files in random order -> Random CreateCreate

Stat files in random order -> Random CreateRead

Delete files in random order -> Random CreateDelete

每個結(jié)果中又包括了2項數(shù)值,一個是K字節(jié)數(shù)或者文件數(shù),另一個是%CP,就是執(zhí)行這項測試時CPU的平均占用率。

 

對于輸出結(jié)果的評價,我們認為在相等CPU的占用率情況下,存取字節(jié)數(shù)越高表示該存儲設備的吞吐量越大,自然性能也就越好。

值得注意的是,在測試RAID的時候,對于多CPU的系統(tǒng),bonnie++并沒有發(fā)揮CPU的最大潛力,也就是說bonnie++發(fā)出的I/O請求通常不夠達到CPU和磁盤的最大壓力,這時候顯示的吞吐量就不是這個存儲設備能夠達到的最大值。我們可以在測試的同時通過iostat,mpstat,sar等命令監(jiān)控系統(tǒng)狀況,如果沒有明顯的I/O等待,通常表示測試軟件的壓力不夠。在bonnie++的主頁上也表示對于多CPU多進程的支持將放到2.0版本中去實現(xiàn)。

 

明白了測試步驟和測試結(jié)果之后,我們再來進一步看看每個測試結(jié)果都是什么含義。

 

Sequential Output

1 Per Char

就是Per-Character的含義。使用putc()函數(shù)進行循環(huán)寫入,每次寫入的字節(jié)很小,基本上可以放入任意一種I-Cache中,這種情況下的CPU消耗在處理putc()代碼和分配磁盤文件空間上。

2 Block

使用write(2)函數(shù)創(chuàng)建文件。這種情況下的CPU消耗只是在分配磁盤文件空間上。

3 Rewrite

使用read(2)函數(shù)讀取文件,然后修改再用write(2)函數(shù)寫回。由于文件的空間已經(jīng)分配好,所以這種方式可以很有效地測試文件系統(tǒng)緩存和數(shù)據(jù)傳輸?shù)乃俣取?/span>

 

Sequential Input

1 Per Char

使用getc()函數(shù)循環(huán) 讀取文件內(nèi)容

2 Block

使用read(2)函數(shù)循環(huán)讀取文件內(nèi)容,有效測試磁盤讀取的效率。

 

Random Seek

默認3個進程作8000次的測試。用read(2)函數(shù)讀取文件的block,同時有10%的操作是用write(2)函數(shù)將block修改以后寫回文件中。在這個測試中,如果內(nèi)存容量大于創(chuàng)建的文件大小,那么將會出現(xiàn)比較高的數(shù)值,而這個數(shù)值可能并不能準確反映磁盤本身的I/O效率。

 

Sequential CreateRadom Create

這兩大類測試均是用創(chuàng)建,讀取,刪除大量的小文件來測試磁盤效率。文件名用7位數(shù)字和任意個數(shù)(0-12)的任意英文字母來組成。在Sequential部分,字母在數(shù)字之后,而Random部分則是字母在數(shù)字之前。

創(chuàng)建文件的最小值和最大值等參數(shù)可以在bonnie++命令行中用-n參數(shù)來控制。

 

評測.

我們通過bonnie++來測試各種磁盤配置,或者測試各種RAID設置下的磁盤效率,可以有助于我們對于各個產(chǎn)品或者各個方案的磁盤吞吐效率有個大體認識。

在測試結(jié)果的最后一行是用逗號隔開的一列數(shù)字,第一個位置是我們在運行bonnie++時用-m參數(shù)指定的機器名,第二個位置是測試時生成的文件大小,后面依次是各類測試的結(jié)果。我們將多個測試的最后一行粘貼到Excel中,然后用圖表功能生成柱狀圖,就可以對多項測試有一個極為直觀的評測比較。

下面列出了幾種評測的結(jié)果,以后也會陸續(xù)添加更多的評測,同時歡迎大家將自己的評測結(jié)果mail給我,我會加入到這篇文章中。我的郵件地址是kamus@。

 

SunFire v480 4*(UltraSparc-III+ 1050MHz) 8GRAM 本地光纖硬盤

>bonnie++ -d . -s 16384 -m report -u oracle:dba

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-

                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--

Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP

report          16G 18703  52 28812  17 10800  12 33700  98 68172  32 260.1   2

                    ------Sequential Create------ --------Random Create--------

                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--

              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP

                 16    99   0 +++++ +++   166   1   101   0 +++++ +++   205   1

report,16G,18703,52,28812,17,10800,12,33700,98,68172,32,260.1,2,16,99,0,+++++,+++,166,1,101,0,+++++,+++,205,1

 

SunFire v880 2*(UltraSparc-III+ 900MHz) 4GRAM  D2陣列36G*12,RAID10,2 stripe

>bonnie++ -d /global/oradata -s 8192 -m d2org -u oracle

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-

                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--

Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP

d2org            8G 15681  55 26302  23 13877  31 26420  91 88215  49 462.6   5

                    ------Sequential Create------ --------Random Create--------

                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--

              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP

                 16  1245  10 +++++ +++  3541  27  2837  21 +++++ +++   385   3

d2org,8G,15681,55,26302,23,13877,31,26420,91,88215,49,462.6,5,16,1245,10,+++++,+++,3541,27,2837,21,+++++,+++,385,3

 

SunFire v880 2*(UltraSparc-III+ 900MHz) 4GRAM  D2陣列36G*8,RAID10,4 stripe

>bonnie++ -d /global/oradata -s 8192 -m d2new -u oracle

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-

                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--

Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP

d2new            8G 18275  62 32832  26 25423  55 27444  94 106842  60 549.9   7

                    ------Sequential Create------ --------Random Create--------

                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--

              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP

                 16  1723  15 +++++ +++  5059  40  4821  37 +++++ +++   653   5

d2new,8G,18275,62,32832,26,25423,55,27444,94,106842,60,549.9,7,16,1723,15,+++++,+++,5059,40,4821,37,+++++,+++,653,5

相關鏈接

bonnie++主頁

http://www./bonnie++/

 

對各種操作系統(tǒng)下磁盤I/O測試軟件的專題站點

http://www./04_02_01.html

 

該站中還有各種類型RAID的概念描述優(yōu)缺點,

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多