1. 程式人生 > >大資料叢集下filesystem測試工具之filebench

大資料叢集下filesystem測試工具之filebench

簡介
Filebench 是一款檔案系統性能的自動化測試工具,它通過快速模擬真實應用伺服器的負載來測試檔案系統的效能。它不僅可以模擬檔案系統微操作(如 copyfiles, createfiles, randomread, randomwrite ),而且可以模擬複雜的應用程式(如 varmail, fileserver, oltp, dss, webserver, webproxy )。 Filebench 比較適合用來測試檔案伺服器效能,但同時也是一款負載自動生成工具,也可用於檔案系統的效能。

程式碼
https://github.com/filebench/filebench
安裝

下載地址:

https://sourceforge.net/projects/filebench/

下載並解壓 filebench-1.5-alpha3.tar.gz,假設放在/home目錄下
安裝兩個依賴庫:apt-get install -y flex bison
cd /home/filebench-1.5-alpha3
./configure
make
make install

安裝完成

filebench使用

方法一(不常用)
自己定義測試負載(我沒實踐)
方法二
直接使用filebench中提供的負載,並修改相應的工作目錄,檔案大小等資訊.
Filebench帶有幾個預定義的微觀和巨集工作負載(例如web伺服器,檔案伺服器,郵件伺服器),這些工作負載在WML中也有描述。 在原始碼樹中,工作負載位於workloads/目錄中。

不建議直接使用來自workloads/或/ usr / local / share / filebench / workloads /目錄的工作負載檔案。 主要原因是這些工作負載的大小不正確(例如,按照資料集大小)到特定系統。 例如,webserver工作負載的初始資料集大小僅略大於16MiB,這通常不是您想要測試包含多個千兆位元組RAM的系統的大小。

(最好將它提供的改成我們的,不覆蓋)故我們將這些提供的workload拷貝一份,並修改其以適應我們的測試:
 

cp /home/filebench/workloads/webserver.f mywebserver.f
  • 接著我們就可以修改mywebserver.f以適應我們的測試了.
  • 執行

    在目錄 /usr/local/share/filebench/workloads/ 下有很多定義好的workload,我們可以拿來使用
    配置裡面的 $dir 為測試filesystem的目錄,若檔案後沒有run <secs>命令,新增:run <secs>

  • 一般就修改dir, nfiles, filesize, nthreads等主要引數,然後就可以開始測試了,使用命令:
  • filebench -f mywebserver.f

  • 輸出解釋:

    flowop name - 支援的flowop有很多(closefile1,readfile1,openfile1等)
    所有threads的ops
    所有threads的ops / run time
    所有threads的READ/WRITE頻寬
    所有threads的每個op的平均latency
    測試中op的最小和最大latency

  • IO Summary:

    30987315ops :所有flowop的總和
    516394.358 ops/s :所有flowop的總和 / run time
    172131/0 rd/wr :所有flowop中READ/WRITE的ops / run time
    2648mb/s : 所有flowop的IO頻寬
    0.0ms/op :所有flowop的每個op的平均latency

    寫workload

    我們可以自己寫workload檔案,語法格式可參考:https://github.com/filebench/filebench/wiki/Workload-model-language

    以createfiles.f為例,解釋裡面的含義:

  • # cat createfiles.f
    ...
    // 下面是使用者變數定義
    set $dir=/home/yangguanjun3/mike/tst1
    set $nfiles=50000
    set $meandirwidth=100
    set $meanfilesize=16k
    set $iosize=1m
    set $nthreads=16
    // 設定退出模式,支援[ timeout | alldone | firstdone ]
    set mode quit firstdone
    // fileset:定義一組測試中用的files
    // name=bigfileset:必須指定 - fileset的名稱,後面flowop中用到
    // path=$dir:必須指定 - 建立測試檔案的目錄
    // size=$meanfilesize:可選,關鍵字也可以為filesize,預設為1KB - 測試檔案的size
    // entries=$nfiles:可選,預設位1024 - fileset中的file個數
    // dirwidth=$meandirwidth:可選,預設為0 - 每個目錄中建立的file個數
    define fileset name=bigfileset,path=$dir,size=$meanfilesize,entries=$nfiles,dirwidth=$meandirwidth
    // process:定義處理過程
    // name=filecreate:必須指定 - 處理過程的名稱
    // instances=1:可選,預設為1 - 處理過程的程序數
    define process name=filecreate,instances=1
    {
    // thread:process中的一個thread
    // name=filecreatethread:必須指定 - 處理執行緒的名稱
    // memsize=10m:必須指定 - 執行緒啟動後初始化為0的記憶體大小,用於read/write flowop
    // instances=$nthreads:可選,預設為1 - 建立的執行緒數
    thread name=filecreatethread,memsize=10m,instances=$nthreads
    {
    // flowop:定義處理流程中的每一步
    // createfile/writewholefile/closefile:flowop的關鍵字,每個代表不同的操作
    // name=$name:flowop的名稱
    // filesetname=bigfileset:指定op操作的fileset
    // fd=1:指定file descriptor的值,在應用允許檔案被多次open的場景中有用
    // iosize=$iosize:指定讀寫的iosize
    flowop createfile name=createfile1,filesetname=bigfileset,fd=1
    flowop writewholefile name=writefile1,fd=1,iosize=$iosize
    flowop closefile name=closefile1,fd=1
    }
    }
    echo "Createfiles Version 3.0 personality successfully loaded”
    // 開始執行filebench測試
    // 格式:run [<runtime>],<runtime>不指定的話,預設為60s
    run 60
    
    

    使用者也可用WML(workload model language) 編寫自定義的.f檔案。

    參考資料

    1.Filebench_github

    2.如何安裝yacc

    3.Filebench相關資料下載

    4.Filebench Tutorial,使用者手冊

  • 參照:http://www.cnblogs.com/AgainstTheWind/p/9869790.html