SlideShare a Scribd company logo
われわれは、GCをX
      倍遅くできる
                 We can make the GC X times slower
                                   than the original

                                                                   nari/中村 成洋
                                      ネットワーク応用通信研究所
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
自己紹介
われわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできる
自己紹介


       ✓ nari/中村 成洋
              ✓ @nari3, id:authorNari

       ✓ NaCl勤務


                                                                                  4/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
自己紹介

       ✓ CRubyコミッタ
       ✓ 主にGCについて考える
       ✓ 「俺がGCだ」
         (こうですか、わかりません><)

                                                                                  5/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
われわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできる
宣伝タイム
本を書きました
今年はGC生誕50周年
買うなら今
もう3刷が
買えます
持ってる人
ノシ
ありがとうございます
   m(_ _)m
全部読んだ人
ノシ
本当に
ありがとうございます
持ってない人は
ぜひサイン会で
(3日目)!
いまから話すこと
いまから話すこと


       ✓ GCのこと
       ✓ CRubyのこと
       ✓ CRubyGCのこと


                                                                                19/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
話さないこと
話さないこと


       ✓ CGのこと
       ✓ クールなGCクラスの使い方
       ✓ Rubyのこと


                                                                                21/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
想定外だったこと


       ✓ まさかの大ホール
       ✓ マニアックすぎる懸念


                                                                                22/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
でも

       ✓ @kakutani「ぶちかましてくださ
         い」
       ✓ やりましょう
              ✓ お父さん張り切っちゃうぞ系


                                                                                23/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今日の話題
今日の話題


       ✓ CRubyGC
       ✓ LazySweepGC
       ✓ 未来的CRubyGC


                                                                                25/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今日の話題


       ✓ CRubyGC
       ✓ LazySweepGC
       ✓ 未来的CRubyGC


                                                                                26/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
CRubyGC
GC = ゴミ集め
「不要になった
オブジェクト(ゴミ)
   処理機」
GCの特徴


       ✓ 闇に潜んでゴミを断つ
       ✓ 誰も知らない知られちゃいけない


                                                                                30/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
Ninja?
  Guiri R. Reyes:http://www.flickr.com/photos/grrphoto/152833988/
ブラックボックスがゆえ
  不当に扱われる
「よくわかりませんけど
   GCが悪さ
  していそうです」
そんなことないよ
GCはトモダチ
竹内郁雄先生曰く

                           GCを備えた言語での生
                           産性は、GCを備えてい
                           ない同等の言語に比べ
                           て30%は増加します。
          [cited from `ガベージコレクションのアルゴリズムと実装、
                                        前書き']

                                                                                36/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
ってことは


       ✓ 1日 = 8時間
       ✓ 10年 = 142400時間
       ✓ 42720時間 = 365日


                                                                                37/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
RubyKaigi 120回分
     ですね
GCで浮いた時間で
RubyKaigiに出席
今日はそんなGC
 の話をします
RubyGC = Rubyのオブジェクトへ
          のGC
オブジェクトとは




                                                                                42/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
オブジェクトとは




                                                                                43/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
Rubyヒープブロック




                                                                                44/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
Rubyヒープ




                                                                                45/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
CRubyのGC

       ✓ マーク&スイープ
       ✓ 生きているオブジェクトに印付け
         (マーク)
       ✓ マークがないオブジェクト(ゴミ)を
         掃除(スイープ)

                                                                                46/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
ルートとは




                                                                                47/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
こんなプログラム




                                                                                48/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
マークフェーズ




                                                                                49/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
マーク完了後のRubyヒープ




                                                                                50/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
スイープ




                                                                                51/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
われわれは、GCをX倍遅くできる
その他の特徴
保守的なGC
保守的なGC

       ✓ 偽ポインタ(false pointer)
              ✓ 実際には数値などの非ポインタ

       ✓ たぶんポインタじゃね?(保守的
         思想)

                                                                                55/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
問題


       ✓ エアオブジェクトが増える
              ✓ 死んでいるのに生きていると見なされ
                る



                                                                                56/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
現実世界でも
似たような事例
現実的保守的GC問題

       ✓ エア老人問題
       ✓ 186歳だけど戸籍ある…
       ✓ 役人「何も言われないし、
         きっと生きてるんだろうなぁ」
       ✓ 保守的思想 = 戸籍の保守的GC
                                                                                58/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今日の話題


       ✓ CRubyGC
       ✓ LazySweepGC
       ✓ 未来的CRubyGC


                                                                                59/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
LazySweepGC
CRubyGCの問題点とは?
Stop the world!!
Stop the world

       ✓ GCによるアプリの停止
       ✓ 停止時間が重要となるアプリでは
         致命的
              ✓ ゲーム、ロボット


                                                                                63/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
なぜ止まるか?
なぜ止まるか?
       ✓ アルゴリズム(マークスイープ)が
         まずい
       ✓ 「GC最大停止時間」と
         「データ量」が比例
       ✓ オブジェクトが増えれば増えるほ
         ど止まる
                                                                                65/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
CRubyGCはオブジェクト
 の増加に対して鈍感
CRubyGCさん曰く
「お前は一度に
GCするオブジェクトを
覚えているのか?」
解決案
LazySweep
LazySweep

       ✓ スイープの遅延
       ✓ オブジェクトが必要になってから
         スイープ
              ✓ 空いたオブジェクトを割り当て

       ✓ スイープの負荷分散
                                                                                70/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今回の本題
「LazySweepをCRubyGCに
     実装しました」
       という話
覚えているでしょうか?
rubykaigi2008
(デビュー戦)
LazySweep!
実は
パッチまで
なぜ今頃?
歴史を辿る
2008/3 : nariはパッチを作成した
2008/6 : rubykaigi2008
2008/7/1 : nariがコミッタに
2008/7/2 : nariがうっかりコミットした
「コミットが滑った」
3日後…
2008/7/5 : nariがrevertした
revertの理由

       ✓ もう少し速くしたかった
              ✓ VM方面の方からもクレームが

       ✓ 根本的に実装がタコなんじゃ?
              ✓ 私の実力不足


                                                                                86/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
2009/7/28 : rubykaigi2009
rubykaigi2009
LazySweepを
忘れていた
(黒歴史化)
質疑応答で
前田さん「LazySweepは何で外れたの?」
ささださん「あれ早く作って欲しい」
まつもとさん「あれって外れちゃったんだっ
         け?」
nari (来年のRubyKaigiまでには作らね
           ば…)
RDD
(RubyKaigi Driven
  Development)
なんやかんや作り直し

       ✓ 3月くらいに着手
              ✓ 執筆が一段落

       ✓ 5月くらいにコミット
       ✓ ruby1.9.2には間に合わなかった

                                                                                96/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
trunkへのコミット

            Fri May 28 19:37:47 2010 Narihiro Nakamura <authorNari@gmail.com>

                   * gc.c: use simple lazy sweep algorithm for response performance
                    gain. See [ruby-dev:41067].

                   * object.c: FL_MARK of some objects by lazy sweep is copied when
                    RVALUE is cloned. These objects are not marked in the mark phase.
                    So delete FL_MARK.

                   * class.c: ditto.



                                                                                         97/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original            Powered by Rabbit 0.6.5
新LazySweepの説明
LazySweepの流れ
(1):マーク後




                                                                              100/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
(2):オブジェクト欲しい




                                                                              101/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
(3):スイープ(ブロック単位)




                                                                              102/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
(4):足りなくなったら




                                                                              103/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
(4):スイープ(ブロック単位)




                                                                              104/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
コレの繰り返し
デモアプリ
「Kaboom!!」の紹介
「Kaboom」 吹き飛ばしゲー
リアルGCを強く意識
デモ
$ruby kaboom.rb
GC負荷モード
Rubyヒープビジュアライザ
      もあるよ
デモ
$ ruby demo.rb 1
灰:使用中 白:未使用
新LazySweepの場合
デモ
$ ruby demo.rb 1
(違うwindowで)
灰:使用中 白:未使用 黒:マーク付き
あれ、バグか…?
       ✓ 黒が残るのはファイナライズ待ち
         オブジェクト
       ✓ Sweepが完全終わってからファイ
         ナライズ
       ✓ 一瞬なので残っているように見え
         る
                                                                              117/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
実装上の工夫
実装上の工夫


       ✓ 最大停止時間の緩和
       ✓ Rubyヒープ構造改革


                                                                              119/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
実装上の工夫


       ✓ 最大停止時間の緩和
       ✓ Rubyヒープ構造改革


                                                                              120/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
最大停止時間の緩和
Rubyヒープを拡張する
    タイミング
前のCRubyGC




                                                                              123/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
前のCRubyGC




                                                                              124/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
前のCRubyGC




                                                                              125/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
LazySweepの場合
LazySweep




                                                                              127/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
LazySweep




                                                                              128/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
メリット&デメリット

       ✓ メリット
              ✓ 大量に割り当て要求があったときの最
                大停止時間の緩和
                    ✓ マーク後すぐに大量のオブジェクト要求があると
                      マークスイープと一緒



                                                                              129/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
メリット&デメリット
       ✓ デメリット
       ✓ カウント分、マークに少しだけ負荷
              ✓ マーク済みオブジェクトはカウントしな
                いのでまだマシ
              ✓ スイープ時にカウント処理しなくていい
                    ✓ malloc_limitの計算に使用(いらないかも?)

                                                                              130/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
実装上の工夫


       ✓ 最大停止時間の緩和
       ✓ Rubyヒープ構造改革


                                                                              131/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
Rubyヒープ構造改革
Rubyヒープ構造




                                                                              133/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
Rubyヒープブロック追加時




                                                                              134/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
実はソートされる




                                                                              135/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
何が困るか?
問題
       ✓ 追加されるRubyヒープブロックが
         どこに入るか分からない
       ✓ どこまでスイープしたか管理する
         のが大変
              ✓ indexを持つ => 変わる…。
              ✓ アドレスを持つ => 変わる…。

                                                                              137/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
解決策
分離




                                                                              139/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
スイープ対象がスッキリ




                                                                              140/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
追加も平気




                                                                              141/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
メリット

       ✓ アドレスが変わらないので
         LazySweepしやすい
              ✓ 前のパッチはフラグとか使って大変
                だった

       ✓ 今後の改善にも生かせそう

                                                                              142/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
その他、細かい仕様


       ✓ GC.startは今までと同じ
              ✓ M&Sでやる
              ✓ LazySweepとは別に用意



                                                                              143/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
検討したけどやらなかったこ
      と
non-freelist実装
freelistとは




                                                                              146/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
こうする




                                                                              147/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
狙い


       ✓ freelistってCoWに悪い
       ✓ わざわざリンクするの遅くない?


                                                                              148/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
検討結果:ダメだった
問題
空のヒープブロックを解放
    できない
freelistの場合




                                                                              152/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
non-freelistの場合




                                                                              153/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
以下、余談
ビットマップマーキングの場合


       ✓ 空きヒープブロックの検知が速い
         のでnon-freelistできるかもしれな
         い


                                                                              155/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
C拡張ライブラリ作成者、コ
 アデベロッパの皆様へ
マークを消さないようにして
    ください
LazySweepの怖さ


       ✓ マークがオブジェクトに残ってい
         る
       ✓ ※コレを消してしまうとスイープ時
         に解放

                                                                              158/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
実際にはまったこと
オブジェクトのコピー




                                                                              160/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
マークの時に問題が…




                                                                              161/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
スイープ時に…




                                                                              162/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
時間差SEGV


       ✓ スイープ時にオブジェクトC, Dが
         解放されてしまう
       ✓ 時間差でSEGVェ...


                                                                              163/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
マークには気を付けて…
性能評価
ベンチマーク


       ✓ bm_gc_flagmentation.rb
              ✓ 疑似的なフラグメンテーション
              ✓ 狙い:長時間動作のプログラムでどれ
                くらいの改善?


                                                                              166/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
GC総停止時間




                                                                              167/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
GC最大停止時間




                                                                              168/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
デモ
$ruby demo.rb 2
   二画面で
われわれは、GCをX倍遅くできる
よさげ
LazySweepはいつから使える?


       ✓ trunkにはコミット済み
       ✓ ruby 1.9.3(??)


                                                                              172/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今日の話題


       ✓ CRubyGC
       ✓ LazySweepGC
       ✓ 未来的CRubyGC


                                                                              173/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
未来的CRubyGC
やることはいっぱいある!
有名な問題
保守的GC
保守的GCを実装した言語処理
        系はレア

       ✓ Ruby
       ✓ Gauche
       ✓ …?

                                                                              178/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
言語処理系を作るときの二択


       ✓ 保守的GC(Dead)か…
       ✓ 正確なGC(or Alive)か…
       ✓ 負の遺産?


                                                                              179/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
よく言われる問題


       ✓ 偽ポインタ問題(別名:非実在オ
         ブジェクト問題)
       ✓ コピーGC使えないよ問題


                                                                              180/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
でも
本当に問題か?
偽ポインタは本当に多い?
       ✓ Rubyのオブジェクトは5ワード固
         定
              ✓ チェックで大分弾ける

       ✓ 実アプリで問題になった例を聞か
         ない
              ✓ どんくらいあるんだろう?

                                                                              183/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
コピーGCって本当にいいことば
         かり?

       ✓ CoWに悪い
              ✓ ※JRubyとかRubiniusとかどうよ?

       ✓ キャッシュに悪いかも
              ✓ GC後はキャッシュミス連発?

                                                                              184/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
それよりもメリット
メリット

       ✓ コアのコード書くの楽
       ✓ C拡張ライブラリ書くのが楽
       ✓ コアの開発をドライブするために
         生産性は大事

                                                                              186/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
もっとも大きな問題
停止型のGCアルゴリズム
近未来


       ✓ 大容量化
              ✓ 大量のオブジェクト生成

       ✓ Ruby≒Rails(サーバサイド)


                                                                              189/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
非停止型のGCアルゴリズ
   ムへの移行
問題解決の最大ハードル
ライトバリア
ライトバリア

       ✓ ライトバリアは必須
       ✓ C拡張ライブラリに手を入れる
       ✓ 今までの資産が使えなくなる恐
         れ?
       ✓ Ruby2.0で対応?
                                                                              193/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
スムーズな移行を
 目指すために
ライトバリア挿入支援

       ✓ ココにライトバリア入ってません
         よ…的な警告を出す
              ✓ スムーズな移行

       ✓ GC本共著者の相川さんの研究が
         あった

                                                                              195/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
まとめると
CRubyGCをどうしたいか?


       ✓ CRubyにあった進化をしたい
       ✓ 保守的GCでどれだけいけるか?


                                                                              197/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
とはいえ
「千里の道も一歩から」
コツコツ行こうぜ!
個人的なコツコツ予定


       ✓ 賢いオブジェクトアロケート
       ✓ マーク時間の短縮


                                                                              201/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
賢いオブジェクトアロケート
賢い
                    オブジェクトアロケート




                                                                              203/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
考え方
       ✓ よく使われるものをよく使わせる
       ✓ あまり使われないものを後に使わ
         せる
              ✓ 解放されやすくなる

       ✓ 本当か?(CPythonだからうまく
         いった?)
                                                                              204/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
マーク時間の短縮
案

       ✓ マーク並列化
       ✓ マークの再帰をやめる
       ✓ シンボルなどをマーク対象から外
         す

                                                                              206/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
その他
その他


       ✓ 特定の型を特別にアロケート(文
         字列専用ヒープとか)
       ✓ BoehmGC化


                                                                              208/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
みなさんに
お願いしたいこと
Rubyistのみなさま
情報が欲しい


       ✓ こんなアプリでGCが遅いとか
       ✓ とにかく公開してくれるといい
              ✓ ご家庭のブログでも、MLでも、どこでも



                                                                              211/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
研究畑のみなさま
いろいろ公開して欲しい

       ✓ Rejectされた論文とか
       ✓ せめてソースコードとか…
       ✓ 見える所に情報を書いてもらえる
         と嬉しい

                                                                              213/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
暇なみなさま
大チャンス


       ✓ RubyGCはまだまだ途上です
       ✓ Rubyの中でも狙い目
       ✓ 未踏的なネタで一つどうですか?


                                                                              215/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
暇つぶしに

       ✓ やってみては
       ✓ 全然うまくいかない
       ✓ だから楽しい
       ✓ 最高の暇つぶし

                                                                              216/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今日のまとめ
今日のまとめ

       ✓ GCを遅く(遅延)できたよー
       ✓ 今後もコツコツ改善(コツコツ大
         事)
       ✓ GCの妄想楽しいです(^q^)

                                                                              218/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
提供
(株)ネットワーク
応用通信研究所
われわれは、GCをX倍遅くできる
質疑応答
 タイム

More Related Content

われわれは、GCをX倍遅くできる