Moose, Mouse, Class::Accessor::Fastのアクセサでベンチマーク取ってみた

馬鹿にできないアクセサのオーバーヘッド - Craftworks Tech Blog - Branch」にもあるように、Mooseのアクセサによるオーバーヘッドは無視するにはちょっと大きいという印象があります。

じゃあ、Mouseだったらどうなんだろうとか、自分が使うサーバのスペックも随分上がったしとか、そういう経緯で改めてベンチを取ってみました。コードは@Craftworksさんの物にMouseを足しただけ。以下に貼り付けておきます。

で、こいつをXeon X3330@2.66GHzで走らせた結果が以下(cmp_these部分のみ)。

                  Rate moose_ro moose_rw caf_rw mouse_ro mouse_rw mouse_direct moose_direct caf_direct
moose_ro      297030/s       --      -8%   -28%     -66%     -68%         -82%         -83%       -89%
moose_rw      322581/s       9%       --   -22%     -63%     -66%         -81%         -82%       -88%
caf_rw        410959/s      38%      27%     --     -53%     -56%         -75%         -77%       -85%
mouse_ro      882353/s     197%     174%   115%       --      -6%         -47%         -50%       -68%
mouse_rw      937500/s     216%     191%   128%       6%       --         -44%         -47%       -66%
mouse_direct 1666667/s     461%     417%   306%      89%      78%           --          -6%       -39%
moose_direct 1764706/s     494%     447%   329%     100%      88%           6%           --       -35%
caf_direct   2727273/s     818%     745%   564%     209%     191%          64%          55%         --

Mouse速すぎワロタ。Class::Accessor::Fastに対して2倍以上という好成績。そもそも一番遅いMooseでも秒間30万回ぐらい呼べているので、そんなに気にすることは無いかなという印象ですね。

なお、MOUSE_PUREPERL=1で実行するとこんな感じ。

                  Rate mouse_ro moose_ro moose_rw mouse_rw caf_rw moose_direct mouse_direct caf_direct
mouse_ro      297030/s       --      -7%     -13%     -14%   -29%         -82%         -83%       -89%
moose_ro      319149/s       7%       --      -6%      -7%   -23%         -81%         -82%       -88%
moose_rw      340909/s      15%       7%       --      -1%   -18%         -80%         -81%       -87%
mouse_rw      344828/s      16%       8%       1%       --   -17%         -79%         -80%       -87%
caf_rw        416667/s      40%      31%      22%      21%     --         -75%         -76%       -85%
moose_direct 1666667/s     461%     422%     389%     383%   300%           --          -6%       -39%
mouse_direct 1764706/s     494%     453%     418%     412%   324%           6%           --       -35%
caf_direct   2727273/s     818%     755%     700%     691%   555%          64%          55%         --

XS化による効果の程が分かるというものですね。@__gfx__++