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

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

開発中のPerlのモジュールでブランチ間をまたいでベンチマークを取る

ほぼ100%藤原さんの記事の受け売りですが……

[perl] Perlで同じコードを違うバージョンのモジュールでベンチマークする - 酒日記 はてな支店

モジュールを開発している時に,フィーチャブランチの変更が性能に対してどれくらい影響を及ぼしているかを調べたくなる時があると思います.
それやるの面倒くさそうだなー,と思ったんですが割と楽ちんだったので書いておくことにします.

手順としては,藤原さんの記事とほぼ同じで,

  1. 対象となるブランチ (例えばmasterとかdevとか) にcheckout
  2. cpanm . -l master -n等でモジュールをextlibにインストール (masterは任意の名前)
  3. もう1つの対象となるブランチ (例えばfeatureとかhotfix) にcheckout
  4. cpanm等でextlibにインストール
  5. Benchmark::Forkingを使ってベンチマークスクリプトを書いて実行

という感じです.cpanmは.を指定するとカレントディレクトリのモジュールをインストールしてくれるので,
それと-lオプションを組み合わせてローカルの任意の位置にインストールしてやるというのがミソというか,それが全てです.

一連の流れを書くとこんな感じです.

$ git checkout master && cpanm . -l master -n
$ git checkout feature && cpanm . -l feature -n
$ vi benchmark.pl
$ perl benchmark.pl

で,これ実行してやると,

           Rate  master feature
master  12821/s      --     -6%
feature 13699/s      7%      --

という具合に結果が出てくれる訳ですね.簡単便利!