その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

ベンチマークを取り続ける為にやってる小技

たしか,実践ハイパフォーマンスMySQL に書いてたテクニックだと思うんですけど.

ベンチマークを取る時に同時に lock file を作っておいて,それが存在し続ける限りベンチを回し続ける,という風にすると何かと便利.

setvbuf(stdout, NULL, _IONBF, 0); // stdout のバッファリングを無効にしておく (しなくても良い)

char *bench_lock_file = "./bench.lock";
fopen(bench_lock_file, "w"); // ここでロックファイル作る

// lock ファイルが存在している間,処理を回し続ける
while (access(bench_lock_file, F_OK) != -1) {
    // ここで何らかのベンチマーク的な処理をさせる
    printf("Bench no Kekka Dayo!\n");
}


これをコンパイルして,

$ ./a.out > ./bench_result.log

という感じでやってやるとベンチの結果が延々延々取れる.
(なお,上のコードでバッファリングを無効にしたのは tail -f 等でログファイルを見たかったからです.)


「ベンチ回すのをやめる!!」という時は

$ rm bench.lock

という風に lock ファイルを消してやると,回っている最中のベンチが回り終わったらプログラムを終了させることが出来ます.


便利!


実践ハイパフォーマンスMySQLMySQL の話だけではなくてこういう技法についても言及されていて有益な感じでした.

実践ハイパフォーマンスMySQL 第3版

実践ハイパフォーマンスMySQL 第3版