From: KOSAKI Motohiro Date: 2011-07-03T00:01:59+09:00 Subject: [ruby-dev:44021] Re: [ruby-core:37707] [Ruby 1.9 - Bug #3781] FIBER_USE_NATIVE が有効だと落ちるスクリプトがある > GC::Profiler.enable > a = [] > 10000000.times{a << "a".dup} > p GC::Profiler.total_time > > パッチ適用後: 1.410000000000001 > バッチ適用前: 1.4899999999999998 > > と、4%くらい劣化してます。 > これくらいなら入れしまっていいかもしれませんが。 > うーん、バグ修正で4%も性能が落ちるのはなぁと正直悩んでます…。 おお、結構効きますね。こちらでも測ってみました。nariさんのに加えて 16段に一回だけチェックするようにしたやつ trunk: 1.3090170000000483 nariパッチ: 1.3393349999998874 kosakiパッチ: 1.294899000000145 16に意味は全然ないのですが、何回かに一回だけチェックという論理で オーバーヘッドはほぼ無視できるようです。 (元のより速くなってるのはたぶん測定誤差です。すいません) ~/ruby/trunk% svn diff Index: gc.c =================================================================== --- gc.c (revision 32355) +++ gc.c (working copy) @@ -1614,7 +1614,7 @@ obj->as.basic.flags |= FL_MARK; objspace->heap.live_num++; - if (lev > GC_LEVEL_MAX || (lev == 0 && stack_check())) { + if (lev > GC_LEVEL_MAX || (((lev&0xF)==0) && stack_check())) { if (!mark_stack_overflow) { if (mark_stack_ptr - mark_stack < MARK_STACK_MAX) { *mark_stack_ptr = ptr;