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