差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
benchmark:benchmark:filebench [2017/02/20 09:06] – tenforward | benchmark:benchmark:filebench [2017/02/20 11:13] (現在) – tenforward | ||
---|---|---|---|
行 14: | 行 14: | ||
* [Predefined personalities](https:// | * [Predefined personalities](https:// | ||
+ | ## 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, | ||
+ | ``` | ||
+ | |||
+ | * ファイルセット名 (name): bigfileset | ||
+ | * パス (path): $dir 変数 | ||
+ | * サイズ (size): $meanfilesize 変数 (平均ファイルサイズ) | ||
+ | * ファイル数 (entories): $nfiles 変数 (ファイルセットで作成できる最大ファイル数) | ||
+ | * ディレクトリごとのファイル数 (dirwidth): $meandirwidth 変数 (平均数。ファイルの合計数とこの指定から必要なディレクトリを計算する) | ||
+ | * テスト開始前に作成するファイル数 (realloc): 80 % | ||
+ | |||
+ | 次はプロセスとスレッドを定義して、スレッド内で行う処理を順に定義。 | ||
+ | ``` | ||
+ | define process name=filereader, | ||
+ | { | ||
+ | thread name=filereaderthread, | ||
+ | { | ||
+ | ``` | ||
+ | |||
+ | スレッド (名前は filereaderthread) 数 (instances) が $nthreads (=50) のプロセス (名前は filereader) が 1 つ。スレッドは最初に処理用に 10MB のメモリを確保。 | ||
+ | |||
+ | ``` | ||
+ | flowop createfile name=createfile1, | ||
+ | flowop writewholefile name=wrtfile1, | ||
+ | flowop closefile name=closefile1, | ||
+ | flowop openfile name=openfile1, | ||
+ | flowop appendfilerand name=appendfilerand1, | ||
+ | flowop closefile name=closefile2, | ||
+ | flowop openfile name=openfile2, | ||
+ | flowop readwholefile name=readfile1, | ||
+ | flowop closefile name=closefile3, | ||
+ | flowop deletefile name=deletefile1, | ||
+ | flowop statfile name=statfile1, | ||
+ | } | ||
+ | } | ||
+ | ``` | ||
+ | |||
+ | これは `flowop` の次にある命令を見れば大体やってくることわかるんじゃないかな。`fileset` で指定したファイルセット内で処理する。`fd` はたくさん処理しているファイルがある時に同じファイルに対して処理を行うことを保証するために指定。 | ||
+ | |||
+ | 残りはヘルプ。 | ||
+ | ``` | ||
+ | echo " | ||
+ | usage " | ||
+ | usage " | ||
+ | : (snip) | ||
+ | ``` | ||
+ | |||
+ | ## インタラクティブ実行 | ||
+ | |||
+ | 上記のファイルを適当なディレクトリに `fileserver.f` として (必要な部分を変更して) 保存してインタラクティブに実行していく。(`/ | ||
+ | |||
+ | コマンド実行後、filebench のプロンプトに入るので `load` コマンドで WML ファイルをロード。 | ||
+ | |||
+ | ``` | ||
+ | $ filebench | ||
+ | Filebench Version 1.4.9.1 | ||
+ | 13045: 0.000: Allocated 170MB of shared memory | ||
+ | filebench> | ||
+ | ``` | ||
+ | |||
+ | すると、ヘルプが表示されるので必要に応じて変数を変更。 | ||
+ | |||
+ | ``` | ||
+ | filebench> | ||
+ | 13045: 161.516: Illegal character at ' | ||
+ | 13045: 161.517: File-server Version 3.0 personality successfully loaded | ||
+ | 13045: 161.517: Usage: set $dir=< | ||
+ | 13045: 161.517: | ||
+ | 13045: 161.517: | ||
+ | 13045: 161.517: | ||
+ | 13045: 161.517: | ||
+ | 13045: 161.517: | ||
+ | 13045: 161.517: | ||
+ | 13045: 161.517: | ||
+ | filebench> | ||
+ | filebench> | ||
+ | ``` | ||
+ | |||
+ | そして時間を指定して `run` で実行。 | ||
+ | |||
+ | ``` | ||
+ | filebench> | ||
+ | 13045: 266.678: Creating/ | ||
+ | 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 / | ||
+ | 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 | ||
+ | deletefile1 | ||
+ | closefile3 | ||
+ | readfile1 | ||
+ | openfile2 | ||
+ | closefile2 | ||
+ | appendfilerand1 | ||
+ | openfile1 | ||
+ | closefile1 | ||
+ | wrtfile1 | ||
+ | createfile1 | ||
+ | 13045: 335.731: IO Summary: 148241 ops, 2467.010 ops/s, (224/449 r/w), 58.2mb/ | ||
+ | 13045: 335.731: Shutting down processes | ||
+ | ``` | ||
+ | |||
+ | このとき `/data` 以下には `bigfileset` というディレクトリ (ファイルセット名で作成) が作成され、その下に多数のディレクトリとファイルが作成される。 | ||
+ | |||
+ | ``` | ||
+ | $ ls / | ||
+ | 00000001 | ||
+ | $ tree -d / | ||
+ | :(snip) | ||
+ | / | ||
+ | ├── 00000001 | ||
+ | │ ├── 00000001 | ||
+ | │ ├── 00000002 | ||
+ | │ ├── 00000003 | ||
+ | │ ├── 00000004 | ||
+ | │ ├── 00000005 | ||
+ | │ │ ├── 00000001 | ||
+ | │ │ ├── 00000002 | ||
+ | │ │ ├── 00000003 | ||
+ | │ │ ├── 00000004 | ||
+ | │ │ ├── 00000005 | ||
+ | │ │ └── 00000006 | ||
+ | : (snip) | ||
+ | ``` | ||
+ | |||
+ | ## 非インタラクティブモードで実行 | ||
+ | |||
+ | 引数で WML ファイルを指定して実行できるが、WML ファイル内に `run` コマンドの記述が必要。 | ||
+ | |||
+ | 末尾に | ||
+ | ``` | ||
+ | run 60 | ||
+ | ``` | ||
+ | |||
+ | を追加して `-f ./ | ||
+ | |||
+ | ``` | ||
+ | $ sudo filebench -f fileserver.f | ||
+ | Filebench Version 1.4.9.1 | ||
+ | 13500: 0.000: Allocated 170MB of shared memory | ||
+ | 13500: 0.001: Creating/ | ||
+ | 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 / | ||
+ | 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... | ||
+ | ``` |