benchmark:benchmark:filebench

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
benchmark:benchmark:filebench [2017/02/20 08:37] tenforwardbenchmark:benchmark:filebench [2017/02/20 11:13] (現在) tenforward
行 4: 行 4:
 * [公式Repository](https://github.com/filebench/filebench/) * [公式Repository](https://github.com/filebench/filebench/)
  
 +色々なパターンでI/O負荷がかけられるツール。WML(Workload Model Language) という言語で I/O の動作を定義して実行するらしい。
  
 +* [Workload model language](https://github.com/filebench/filebench/wiki/Workload-model-language)
 +
 +それほど複雑ではなさそうなのであらかじめ付属している WML ファイルを見ながら自作もできそう。
 +
 +あらかじめ例として色々な WML ファイルが付属している。
 +
 +* [Predefined personalities](https://github.com/filebench/filebench/wiki/Predefined-personalities)
 +
 +## WML ファイル
 +
 +例えば `fileserver.f` というファイルはこんな感じ (コメントは削除してある)。
 +
 +まずは実際の処理の定義内で使う変数定義。
 +```
 +set $dir=/tmp
 +set $nfiles=10000
 +set $meandirwidth=20
 +set $meanfilesize=128k
 +set $nthreads=50
 +set $iosize=1m
 +set $meanappendsize=16k
 +```
 +
 +次にテスト全体で使うファイルセットを定義。
 +```
 +define fileset name=bigfileset,path=$dir,size=$meanfilesize,entries=$nfiles,dirwidth=$meandirwidth,prealloc=80
 +```
 +
 +* ファイルセット名 (name): bigfileset
 +* パス (path): $dir 変数
 +* サイズ (size): $meanfilesize 変数 (平均ファイルサイズ)
 +* ファイル数 (entories): $nfiles 変数 (ファイルセットで作成できる最大ファイル数)
 +* ディレクトリごとのファイル数 (dirwidth): $meandirwidth 変数 (平均数。ファイルの合計数とこの指定から必要なディレクトリを計算する)
 +* テスト開始前に作成するファイル数 (realloc): 80 %
 +
 +次はプロセスとスレッドを定義して、スレッド内で行う処理を順に定義。
 +```
 +define process name=filereader,instances=1
 +{
 +  thread name=filereaderthread,memsize=10m,instances=$nthreads
 +  {
 +```
 +
 +スレッド (名前は filereaderthread) 数 (instances) が $nthreads (=50) のプロセス (名前は filereader) が 1 つ。スレッドは最初に処理用に 10MB のメモリを確保。
 +
 +```
 +    flowop createfile name=createfile1,filesetname=bigfileset,fd=1
 +    flowop writewholefile name=wrtfile1,srcfd=1,fd=1,iosize=$iosize
 +    flowop closefile name=closefile1,fd=1
 +    flowop openfile name=openfile1,filesetname=bigfileset,fd=1
 +    flowop appendfilerand name=appendfilerand1,iosize=$meanappendsize,fd=1
 +    flowop closefile name=closefile2,fd=1
 +    flowop openfile name=openfile2,filesetname=bigfileset,fd=1
 +    flowop readwholefile name=readfile1,fd=1,iosize=$iosize
 +    flowop closefile name=closefile3,fd=1
 +    flowop deletefile name=deletefile1,filesetname=bigfileset
 +    flowop statfile name=statfile1,filesetname=bigfileset
 +  }
 +}
 +```
 +
 +これは `flowop` の次にある命令を見れば大体やってくることわかるんじゃないかな。`fileset` で指定したファイルセット内で処理する。`fd` はたくさん処理しているファイルがある時に同じファイルに対して処理を行うことを保証するために指定。
 +
 +残りはヘルプ。
 +```
 +echo  "File-server Version 3.0 personality successfully loaded"
 +usage "Usage: set \$dir=<dir>"
 +usage "       set \$meanfilesize=<size>     defaults to $meanfilesize"
 +  : (snip)
 +```
 +
 +## インタラクティブ実行
 +
 +上記のファイルを適当なディレクトリに `fileserver.f` として (必要な部分を変更して) 保存してインタラクティブに実行していく。(`/usr/share/filebench/workload` 内にあるファイルならパス指定は不要)
 +
 +コマンド実行後、filebench のプロンプトに入るので `load` コマンドで WML ファイルをロード。
 +
 +```
 +$ filebench
 +Filebench Version 1.4.9.1
 +13045: 0.000: Allocated 170MB of shared memory
 +filebench> load ./fileserver
 +```
 +
 +すると、ヘルプが表示されるので必要に応じて変数を変更。
 +
 +```
 +filebench> load ./fileserver
 +13045: 161.516: Illegal character at '.' on line 1
 +13045: 161.517: File-server Version 3.0 personality successfully loaded
 +13045: 161.517: Usage: set $dir=<dir>
 +13045: 161.517:        set $meanfilesize=<size>     defaults to 131072
 +13045: 161.517:        set $nfiles=<value>      defaults to 10000
 +13045: 161.517:        set $nthreads=<value>    defaults to 50
 +13045: 161.517:        set $meanappendsize=<value>  defaults to 16384
 +13045: 161.517:        set $iosize=<size>  defaults to 1048576
 +13045: 161.517:        set $meandirwidth=<size> defaults to 20
 +13045: 161.517:        run runtime (e.g. run 60)
 +filebench> set $dir=/data
 +filebench> set $nfiles=5000  
 +```
 +
 +そして時間を指定して `run` で実行。
 +
 +```
 +filebench> run 60     
 +13045: 266.678: Creating/pre-allocating files and filesets
 +13045: 266.685: Fileset bigfileset: 5000 files, 0 leafdirs, avg dir width = 20, avg dir depth = 2.8, 614.982MB
 +13045: 271.759: Removed any existing fileset bigfileset in 6 seconds
 +13045: 271.759: making tree for filset /data/bigfileset
 +13045: 271.769: Creating fileset bigfileset...
 +13045: 274.341: Preallocated 3973 of 5000 of fileset bigfileset in 3 seconds
 +13045: 274.355: waiting for fileset pre-allocation to finish
 +13080: 274.373: Starting 1 filereader instances
 +13081: 274.496: Starting 50 filereaderthread threads
 +13045: 275.558: Running...
 +13045: 335.607: Run took 60 seconds...
 +13045: 335.731: Per-Operation Breakdown
 +statfile1            13445ops      224ops/  0.0mb/     3.5ms/op     2173us/op-cpu [0ms - 1082ms]
 +deletefile1          13445ops      224ops/  0.0mb/    17.5ms/op     5470us/op-cpu [0ms - 1138ms]
 +closefile3           13451ops      224ops/  0.0mb/     0.0ms/op     1373us/op-cpu [0ms - 12ms]
 +readfile1            13473ops      224ops/ 28.7mb/    52.3ms/op    20751us/op-cpu [0ms - 617ms]
 +openfile2            13481ops      224ops/  0.0mb/     6.4ms/op     2838us/op-cpu [0ms - 1107ms]
 +closefile2           13483ops      224ops/  0.0mb/     0.0ms/op     1334us/op-cpu [0ms - 31ms]
 +appendfilerand1      13492ops      225ops/  1.7mb/    50.9ms/op    17597us/op-cpu [0ms - 519ms]
 +openfile1            13492ops      225ops/  0.0mb/     4.1ms/op     2629us/op-cpu [0ms - 1107ms]
 +closefile1           13492ops      225ops/  0.0mb/     0.1ms/op     1740us/op-cpu [0ms - 63ms]
 +wrtfile1             13492ops      225ops/ 27.8mb/     3.0ms/op     3680us/op-cpu [0ms - 317ms]
 +createfile1          13495ops      225ops/  0.0mb/     6.4ms/op     3711us/op-cpu [0ms - 1099ms]
 +13045: 335.731: IO Summary: 148241 ops, 2467.010 ops/s, (224/449 r/w),  58.2mb/s,    697us cpu/op,  48.0ms latency
 +13045: 335.731: Shutting down processes
 +```
 +
 +このとき `/data` 以下には `bigfileset` というディレクトリ (ファイルセット名で作成) が作成され、その下に多数のディレクトリとファイルが作成される。
 +
 +```
 +$ ls /data/bigfileset/
 +00000001  00000002  00000003  00000004  00000005
 +$ tree -d /data/bigfileset/
 +  :(snip)
 +/data/bigfileset/
 +├── 00000001
 +│   ├── 00000001
 +│   ├── 00000002
 +│   ├── 00000003
 +│   ├── 00000004
 +│   ├── 00000005
 +│   │   ├── 00000001
 +│   │   ├── 00000002
 +│   │   ├── 00000003
 +│   │   ├── 00000004
 +│   │   ├── 00000005
 +│   │   └── 00000006
 +  : (snip)
 +```
 +
 +## 非インタラクティブモードで実行
 +
 +引数で WML ファイルを指定して実行できるが、WML ファイル内に `run` コマンドの記述が必要。
 +
 +末尾に
 +```
 +run 60
 +```
 +
 +を追加して `-f ./fileserver.f` で指定。
 +
 +```
 +$ sudo filebench -f fileserver.f 
 +Filebench Version 1.4.9.1
 +13500: 0.000: Allocated 170MB of shared memory
 +13500: 0.001: Creating/pre-allocating files and filesets
 +13500: 0.017: Fileset bigfileset: 10000 files, 0 leafdirs, avg dir width = 20, avg dir depth = 3.1, 1240.757MB
 +13500: 0.321: Removed any existing fileset bigfileset in 1 seconds
 +13500: 0.321: making tree for filset /data/bigfileset
 +13500: 0.373: Creating fileset bigfileset...
 +13500: 4.512: Preallocated 7979 of 10000 of fileset bigfileset in 5 seconds
 +13500: 4.512: waiting for fileset pre-allocation to finish
 +13503: 4.524: Starting 1 filereader instances
 +13504: 4.600: Starting 50 filereaderthread threads
 +13500: 5.644: Running...
 +```
  • benchmark/benchmark/filebench.1487579868.txt.gz
  • 最終更新: 2017/02/20 08:37
  • by tenforward