測試工具Bonnie++的使用

Bonnie++是一個用來測試UNIX文件系統性能的測試工具,主要目的是爲了找出系統的性能瓶頸,其名字來源於作者喜愛的歌手Bonnie Raitt。

Bonnie++在類似的測試工具和軟件中不是最大的和最複雜的,但是在易用性和輸出結果顯示方面很不錯。

爲什麼需要bonnie++?

我們有以下假設:

    內存是有限的,因此cache經常會達到上限;因此

    許多I/O操作最終需要真正執行I/O;因此

    有必要測試真實I/O的速度,而且

    在UNIX文件系統中隨機搜索是非常慢的;

Bonnie++做了什麼?

Bonnie++在一個已知文件大小的文件上執行一系列的測試操作。如果不指定文件大小,Bonnie++默認使用100MB。這個默認大小對於大型服務器來說可能不夠大,因此文件的大小最好比可用RAM的大小大一點,一般會要求大兩倍。


Bonnie++的使用說明

Bonnie++將長時間的執行磁盤文件讀寫操作(中間不斷給出進程報告),然後生成一個小而精的報告。

下載Bonnie++的源碼;

解壓tar -xzf bonnie++-1.03e.tgz

進入解壓後的目錄

編譯Bonnie++:make

至此,Bonnie++就已經安裝,並可以使用了。


命令:

#./Bonnie
You must use the "-u" switch when running as root.
usage: bonnie++ [-d scratch-dir] [-s size(MiB)[:chunk-size(b)]]
                [-n number-to-stat[:max-size[:min-size][:num-directories]]]
                [-m machine-name]
                [-r ram-size-in-MiB]
                [-x number-of-tests] [-u uid-to-use:gid-to-use] [-g gid-to-use]
                [-q] [-f] [-b] [-D] [-p processes | -y]


Version: 1.03e

方括號中的選項都是可選,其含義如下:

Bonnie 

      程序名字。

-d  起始路徑

      目錄名字;Bonnie將在該目錄下創建測試文件並進行讀寫,即爲需要測試的文件系統掛載的目錄。bonnie不會對目錄名字進行任何特殊的解釋,只是按照原名字使用。

-s size-in-MB

      測試文件的大小,以MB爲單位。默認是100MB大小。文件大小一定要是數倍於可用內存的大小,否則操作系統將會把文件的大部分文件cache到內存中,從而導致bonnie執行的真正的I/O次數非常少。建議設置至少爲可用內存大小的2倍(另一種說法爲4倍)。

-m machine-label

     給出bonnie用來生成報告的標識。如果不使用該選項,bonnie將不在報告中提供特定標識。

-html

     以html的格式輸出測試結果
-m 機器名

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

-r 內存大小

  指定內存大小,這樣可以通過-s參數創建r*2大小的文件,通常用於縮短測試時間,但是需要注意這樣由於內存的cache可能導致測試結果的不準確

-x 測試的次數
-u 測試文件的屬主和組,默認是執行bonnie++的當前用戶和當前組
-g 測試文件的組,默認是執行bonnie++的當前用組
-b 在每次寫文件時調用fsync()函數,對於測試郵件服務器或者數據庫服務器這種通常需要同步操作的情況比較適合,而不使用該參數則比較適合測試copy文件或者編譯等操作的效率。


在此,我們的文件系統掛載在/mnt目錄下,因此我們將工作目錄定爲/mnt

[root@de18 bonnie++-1.03e]# ./bonnie++ -d /mnt -s 1000 -u root
Using uid:0, gid:0.
File size should be double RAM for good results, RAM is 1000M.

說明我們的文件大小設置小了,RAM的大小爲1000M,因此我們設置文件大小爲2000M:

#./bonnie++ -d /test -s 2000 -u root

則可以得到測試結果:

Version 1.03e       ------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
de18          2000M  7849  44 16681  34 15773  37 60869  86 215620  36  9076  98
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  1993  24  8381  16  2545  11  2025  30  8922  17  2576  15
de18,2000M,7849,44,16681,34,15773,37,60869,86,215620,36,9075.7,98,16,1993,24,8381,16,2545,11,2025,30,8922,17,2576,15

測試結果分析:

Sequential Output部分表示寫文件的相關信息
Sequential Input部分表示讀文件的相關信息
Per Chr表示以字符爲單位讀寫文件
Block表示以block爲單位讀寫文件
Rewrite表示修改並重寫已經存在的文件的每一個block
K/sec表示每秒讀或寫文件的速率,以K爲單位
%CP表示在某階段執行操作時平均消耗的CPU

Sequential Output

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

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

3. Rewrite
使用read(2)函數讀取文件,然後修改再用write(2)函數寫回。由於文件的空間已經分配好,所以這種方式可以很有效地測試文件系統緩存和數據傳輸的速度。

Sequential Input

1. Per Char
使用getc()函數循環 讀取文件內容

2. Block
使用read(2)函數循環讀取文件內容,有效測試磁盤讀取的效率。

Random Seek
默認3個seeks進程作8000次的測試。用read(2)函數讀取文件的block,同時有10%的操作是用write(2)函數將block修改以後寫回文件中。在這個測試中,如果內存容量大於創建的文件大小,那麼將會出現比較高的數值,而這個數值可能並不能準確反映磁盤本身的I/O效率。

Sequential Create和Radom Create

這兩大類測試均是用創建,讀取,刪除大量的小文件來測試磁盤效率。文件名用7位數字和任意個數(0-12)的任意英文字母來組成。在Sequential部分,字母在數字之後,而Random部分則是字母在數字之前。
創建文件的最小值和最大值等參數可以在bonnie++命令行中用-n參數來控制。


最後需要注意的是,在測試RAID的時候,對於多CPU的系統,bonnie++並沒有發揮CPU的最大潛力,也就是說bonnie++發出的I/O請求通常不夠達到CPU和磁盤的最大壓力,這時候顯示的吞吐量就不是存儲設備能夠達到的最大值。因此,這些數字智能作爲在單CPU系統中操作的有效性指標。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章