Bench Mark


MUSASHIの処理速度の目安を示すために、ここでは簡単なベンチマークテストを行なっている。

結果

単純にスクリプトを5回実行し、その平均所要時間を計測している(CPU時間を計測したりはしていない)。
データはランダムに生成し、10、50、100、200万行のデータに対して計測を行なっている。

ベンチマークの方法

単純に、処理スクリプトを5回実行し、その平均所要時間を計測している(CPU時間を計測したりはしていない)。

使用データ

ファイル名 行数 サイズ キーの種類数
key1 key2 key3 key4
dat100000.xt 10万 約10M 63,077 10,000 1,000 100
dat500000.xt 50万 約50M 99,360 10,000 1,000 100
dat1000000.xt 100万 約100M 99,997 10,000 1,000 100
dat2000000.xt 200万 約200M 100,000 10,000 1,000 100

各データの中身は以下のようになっている。

<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.1">
<header>
<field no="1" name="No"></field>
<field no="2" name="key1"></field>
<field no="3" name="key2"></field>
<field no="4" name="key3"></field>
<field no="5" name="key4"></field>
<field no="6" name="qtty"></field>
<field no="7" name="price"></field>
<field no="8" name="rand1"></field>
<field no="9" name="rand2"></field>
<field no="10" name="date1"></field>
<field no="11" name="time1"></field>
<field no="12" name="date2"></field>
<field no="13" name="time2"></field>
<field no="14" name="s1"></field>
<field no="15" name="s2"></field>
<field no="16" name="s3"></field>
<field no="17" name="s4"></field>
</header>
<body><![CDATA[
00000001 139438 103943 100394 100039 2 178 415 34174 20030701 000000 20040819 09 2934 123 123 123 123
00000002 178309 107830 100782 100078 3 256 726 67759 20030701 000000 20050626 18 4919 123 123 123 123
00000003 179843 107984 100798 100079 3 259 738 69084 20030701 000000 20050708 19 1124 123 123 123 123
00000004 191164 109116 100911 100090 3 281 828 78865 20030701 000000 20051006 21 5425 123 123 123 123
00000005 119755 101975 100197 100020 1 139 258 17168 20030701 000000 20040315 04 4608 123 123 123 123
00000006 133522 103352 100335 100033 2 167 368 29063 20030701 000000 20040703 08 0423 123 123 123 123
00000007 176822 107682 100767 100076 3 253 714 66474 20030701 000000 20050614 18 2754 123 123 123 123
00000008 127777 102777 100277 100027 2 155 322 24099 20030701 000000 20040518 06 4139 123 123 123 123
00000009 155396 105539 100553 100055 2 210 543 47962 20030701 000000 20041225 13 1922 123 123 123 123
00000010 147739 104773 100477 100047 2 195 481 41347 20030701 000000 20041024 11 2907 123 123 123 123

自分の環境でベンチマークを行なう

1. ベンチマーク用スクリプト一式をダウンロードし、解凍&展開する。

$ tar zxvf bench.tar.gz

2. benchというディレクトリができているはずなので、そのディレクトリに移り、以下の3つのスクリプトがあることを確認する。

$ cd bench

スクリプト名 解説
mkdat.sh ベンチマーク用のデータを生成する。indatディレクトリに行数の異なる8つのデータを生成する。
bench.sh ベンチマークを実施し、resultディレクトリに計測結果を保存する。
mkhtml.sh resultディレクトリの計測結果を集計し、bench.shで指定した名前のディレクトリにHTMLドキュメント一式を生成する。

3. mkdat.shを実行し(5〜10分)、indatディレクトリに以下の8つのファイルができていることを確認する。

$ ./mkdat.sh

区分 ファイル名 解説
テスト用データ dat100.xt 100行のデータ
dat500.xt 500行のデータ
dat1000.xt 1000行のデータ
dat2000.xt 2000行のデータ
本番用データ dat100000.xt 10万行のデータ
dat500000.xt 50万行のデータ
dat1000000.xt 100万行のデータ
dat200000.xt 200万行のデータ

4. ベンチマークスクリプトをテストモード(小さいデータを利用)で実行する(1分以内に終了する)。
実行ログをファイルに保存するために "&>log"を入れておく(画面には何も表示されないようになる)。

$ ./bench.sh all test &>log

logの中身を確認し、エラーメッセージが出力されていないことを確認する。
また、正しく実行されていれば、resultディレクトリに結果ファイルが書き出されているはずである。

5. ベンチマークスクリプトを本番モードで実行する。
実行ログをファイルに保存するために "&>log"を入れておく(画面には何も表示されないようになる)。
本番の実行には、マシンのスペックにもよるが、2時間以上かかるので、昼休みもしくは就寝中におこなうことを勧めます。

$ ./bench.sh all &>log

注)このベンチマークスクリプトでは、timeコマンド等で実際のCPU利用時間を計測したりはしておらず、コマンドの起動から終了までの実時間を計測しているだけである。そのため、bench.shスクリプトを実行する際は、余分なプロセスが裏で実行されないよう気をつけて下さい。

6. 現在のマシン環境に関する以下の4つのデータをmkhtml.shスクリプトに記述する(詳細はスクリプト内に説明している)。

7. 結果を集計し、HTMLファイルを生成する(瞬時に終る)。

$ ./mkhtml.sh

8. 手順6で入力したベンチマーク名のディレクトリの下にHTMLドキュメント"table.html"ができているのでWEBブラウザで開き、内容を確認する。