longlife gcパッチ(手抜き)レポート

authorNariさんが、GCの面白いハックを行ったのでちょっと試してみました。
http://d.hatena.ne.jp/authorNari/20090511/1242054805

yarv2llvmでao-benchをコンパイルする時間が速くなったか調べてみました。時間が掛かるのでao-benchの実行速度そのものは調べていません。将来的にはao-benchをyarv2llvmで実行させたときはGCを起動させないようにコンパイルするのが筋かなと思います。
ao-benchの実行結果はhogelogさんのレポート(http://d.hatena.ne.jp/hogelog/20090512/p1)がすばらしいです。

ソースを読み始めています。ノードオブジェクトの操作周りのRubyでややこしいところに手を入れていて勉強になります。オブジェクトの殿堂入りをノードオブジェクトだけじゃ無くて任意のオブジェクトで指定できるようにすると、役に立つ人もいるかなーと思いました。使いこなせるのは超上級者だけでしょうが・・・。

結果です。少しですが効果があると思います。GCの回数が29回から27回に減っています。
プログラムでは、配列、Procオブジェクト、ユーザ定義オブジェクトをがんがんアロケートしていると思います。時間ができたらアロケーションの様子をグラフ化したいと思います。

条件

CYGWIN_NT-5.1 miura 1.5.25(0.156/4/2) 2008-06-12 19:34 i686 Cygwin

CPU Pentium 4 2.80GHz

元、(ruby 1.9.2dev (2009-05-06 trunk 23350) [i386-cygwin])

time ruby19 yarv2llvm.rb --gc-profile  --compile-only sample/ao-render.rb 
GC 29 invokes.
Index    Invoke Time(sec)       Use Size(byte)     Total Size(byte)         Total Object                    GC Time(ms)
    1               0.297               664640              1081344                54054        15.00000000000001421085
    2               0.344               687740              1097728                54873         0.00000000000000000000
    3               0.484               717120              1949696                97461        16.00000000000001421085
                        〜  省略  〜

   20               9.656               948120              4587520               229320        16.00000000000001421085
   21              10.250               960580              4603904               230139        14.99999999999879207735

real	0m12.413s
user	0m11.732s
sys	0m0.372s

longlife gcパッチ当て

time ruby19 yarv2llvm.rb --gc-profile  --compile-only sample/ao-render.rb 
GC 27 invokes.
Index    Invoke Time(sec)       Use Size(byte)     Total Size(byte)         Total Object                    GC Time(ms)
    1               0.297               652900              1425408                71253         0.00000000000000000000
    2               0.344               684680              1441792                72072        16.00000000000001421085
    3               0.594               692920              2572288               128583        16.00000000000001421085
                          〜 省略 〜

   20               9.875               883700              4669440               233415        16.00000000000001421085
   21              10.422               890380              4685824               234234        31.00000000000058264504

real	0m12.132s
user	0m11.717s
sys	0m0.280s