マルチスレッドGC実験その後

動きのおかしいコードをそのままにしておくのも気持ち悪いのできちんと動くように修正してみた。64指定のao-render.rbが34秒で動くようになったので相当おかしいことになっていたのだと思う。githubにあげたコードはあれこれいじっているが、バグっていた箇所はsweepの中で、コードの削り方を失敗していた。あとは未マークがgrayは微妙なのでwhiteにしたり、objectspaceが動くようにis_deadの条件を変えたりした。
http://github.com/mirichi/mruby/tree/simpleGC
この状態で動かした128指定のao-renderが4分42秒、2スレッドマークGC化したmrubyでは3分32秒となり、我が目を疑うような高速化となったわけだが、そもそも元のmrubyでの実行は1分38秒なので世代別GCの威力がすさまじい。ao-renderのGC負荷が軽いというのは誤りだったようだ。
ともあれ何も考えずに2スレッドでマークを動かしたら速くなるようだ、ということで、こっから先はまた気が向いたらである。