Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad

われわれは、GCをX
      倍遅くできる
                 We can make the GC X times slower
                                   than the ori...

Ad

自己紹介

Ad

自己紹介


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

       ✓ NaCl勤務


                                      ...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Upcoming SlideShare
GCが止まらない
GCが止まらない
Loading in …3
×

Check these out next

1 of 222 Ad
1 of 222 Ad
Advertisement

More Related Content

Advertisement

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

  1. 1. われわれは、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
  2. 2. 自己紹介
  3. 3. 自己紹介 ✓ 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
  4. 4. 自己紹介 ✓ CRubyコミッタ ✓ 主にGCについて考える ✓ 「俺がGCだ」 (こうですか、わかりません><) 5/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  5. 5. 宣伝タイム
  6. 6. 本を書きました
  7. 7. 今年はGC生誕50周年
  8. 8. 買うなら今
  9. 9. もう3刷が 買えます
  10. 10. 持ってる人 ノシ
  11. 11. ありがとうございます m(_ _)m
  12. 12. 全部読んだ人 ノシ
  13. 13. 本当に ありがとうございます
  14. 14. 持ってない人は ぜひサイン会で (3日目)!
  15. 15. いまから話すこと
  16. 16. いまから話すこと ✓ GCのこと ✓ CRubyのこと ✓ CRubyGCのこと 19/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  17. 17. 話さないこと
  18. 18. 話さないこと ✓ CGのこと ✓ クールなGCクラスの使い方 ✓ Rubyのこと 21/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  19. 19. 想定外だったこと ✓ まさかの大ホール ✓ マニアックすぎる懸念 22/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  20. 20. でも ✓ @kakutani「ぶちかましてくださ い」 ✓ やりましょう ✓ お父さん張り切っちゃうぞ系 23/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  21. 21. 今日の話題
  22. 22. 今日の話題 ✓ CRubyGC ✓ LazySweepGC ✓ 未来的CRubyGC 25/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  23. 23. 今日の話題 ✓ CRubyGC ✓ LazySweepGC ✓ 未来的CRubyGC 26/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  24. 24. CRubyGC
  25. 25. GC = ゴミ集め
  26. 26. 「不要になった オブジェクト(ゴミ) 処理機」
  27. 27. GCの特徴 ✓ 闇に潜んでゴミを断つ ✓ 誰も知らない知られちゃいけない 30/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  28. 28. Ninja? Guiri R. Reyes:http://www.flickr.com/photos/grrphoto/152833988/
  29. 29. ブラックボックスがゆえ 不当に扱われる
  30. 30. 「よくわかりませんけど GCが悪さ していそうです」
  31. 31. そんなことないよ
  32. 32. GCはトモダチ
  33. 33. 竹内郁雄先生曰く 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
  34. 34. ってことは ✓ 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
  35. 35. RubyKaigi 120回分 ですね
  36. 36. GCで浮いた時間で RubyKaigiに出席
  37. 37. 今日はそんなGC の話をします
  38. 38. RubyGC = Rubyのオブジェクトへ のGC
  39. 39. オブジェクトとは 42/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  40. 40. オブジェクトとは 43/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  41. 41. Rubyヒープブロック 44/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  42. 42. Rubyヒープ 45/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  43. 43. CRubyのGC ✓ マーク&スイープ ✓ 生きているオブジェクトに印付け (マーク) ✓ マークがないオブジェクト(ゴミ)を 掃除(スイープ) 46/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  44. 44. ルートとは 47/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  45. 45. こんなプログラム 48/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  46. 46. マークフェーズ 49/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  47. 47. マーク完了後のRubyヒープ 50/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  48. 48. スイープ 51/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  49. 49. その他の特徴
  50. 50. 保守的なGC
  51. 51. 保守的なGC ✓ 偽ポインタ(false pointer) ✓ 実際には数値などの非ポインタ ✓ たぶんポインタじゃね?(保守的 思想) 55/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  52. 52. 問題 ✓ エアオブジェクトが増える ✓ 死んでいるのに生きていると見なされ る 56/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  53. 53. 現実世界でも 似たような事例
  54. 54. 現実的保守的GC問題 ✓ エア老人問題 ✓ 186歳だけど戸籍ある… ✓ 役人「何も言われないし、 きっと生きてるんだろうなぁ」 ✓ 保守的思想 = 戸籍の保守的GC 58/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  55. 55. 今日の話題 ✓ CRubyGC ✓ LazySweepGC ✓ 未来的CRubyGC 59/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  56. 56. LazySweepGC
  57. 57. CRubyGCの問題点とは?
  58. 58. Stop the world!!
  59. 59. 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
  60. 60. なぜ止まるか?
  61. 61. なぜ止まるか? ✓ アルゴリズム(マークスイープ)が まずい ✓ 「GC最大停止時間」と 「データ量」が比例 ✓ オブジェクトが増えれば増えるほ ど止まる 65/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  62. 62. CRubyGCはオブジェクト の増加に対して鈍感
  63. 63. CRubyGCさん曰く 「お前は一度に GCするオブジェクトを 覚えているのか?」
  64. 64. 解決案
  65. 65. LazySweep
  66. 66. LazySweep ✓ スイープの遅延 ✓ オブジェクトが必要になってから スイープ ✓ 空いたオブジェクトを割り当て ✓ スイープの負荷分散 70/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  67. 67. 今回の本題
  68. 68. 「LazySweepをCRubyGCに 実装しました」 という話
  69. 69. 覚えているでしょうか?
  70. 70. rubykaigi2008 (デビュー戦)
  71. 71. LazySweep!
  72. 72. 実は パッチまで
  73. 73. なぜ今頃?
  74. 74. 歴史を辿る
  75. 75. 2008/3 : nariはパッチを作成した
  76. 76. 2008/6 : rubykaigi2008
  77. 77. 2008/7/1 : nariがコミッタに
  78. 78. 2008/7/2 : nariがうっかりコミットした
  79. 79. 「コミットが滑った」
  80. 80. 3日後…
  81. 81. 2008/7/5 : nariがrevertした
  82. 82. revertの理由 ✓ もう少し速くしたかった ✓ VM方面の方からもクレームが ✓ 根本的に実装がタコなんじゃ? ✓ 私の実力不足 86/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  83. 83. 2009/7/28 : rubykaigi2009
  84. 84. rubykaigi2009
  85. 85. LazySweepを 忘れていた (黒歴史化)
  86. 86. 質疑応答で
  87. 87. 前田さん「LazySweepは何で外れたの?」
  88. 88. ささださん「あれ早く作って欲しい」
  89. 89. まつもとさん「あれって外れちゃったんだっ け?」
  90. 90. nari (来年のRubyKaigiまでには作らね ば…)
  91. 91. RDD (RubyKaigi Driven Development)
  92. 92. なんやかんや作り直し ✓ 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
  93. 93. 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
  94. 94. 新LazySweepの説明
  95. 95. LazySweepの流れ
  96. 96. (1):マーク後 100/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  97. 97. (2):オブジェクト欲しい 101/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  98. 98. (3):スイープ(ブロック単位) 102/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  99. 99. (4):足りなくなったら 103/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  100. 100. (4):スイープ(ブロック単位) 104/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  101. 101. コレの繰り返し
  102. 102. デモアプリ 「Kaboom!!」の紹介
  103. 103. 「Kaboom」 吹き飛ばしゲー
  104. 104. リアルGCを強く意識
  105. 105. デモ $ruby kaboom.rb
  106. 106. GC負荷モード
  107. 107. Rubyヒープビジュアライザ もあるよ
  108. 108. デモ $ ruby demo.rb 1
  109. 109. 灰:使用中 白:未使用
  110. 110. 新LazySweepの場合
  111. 111. デモ $ ruby demo.rb 1 (違うwindowで)
  112. 112. 灰:使用中 白:未使用 黒:マーク付き
  113. 113. あれ、バグか…? ✓ 黒が残るのはファイナライズ待ち オブジェクト ✓ Sweepが完全終わってからファイ ナライズ ✓ 一瞬なので残っているように見え る 117/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  114. 114. 実装上の工夫
  115. 115. 実装上の工夫 ✓ 最大停止時間の緩和 ✓ Rubyヒープ構造改革 119/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  116. 116. 実装上の工夫 ✓ 最大停止時間の緩和 ✓ Rubyヒープ構造改革 120/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  117. 117. 最大停止時間の緩和
  118. 118. Rubyヒープを拡張する タイミング
  119. 119. 前のCRubyGC 123/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  120. 120. 前のCRubyGC 124/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  121. 121. 前のCRubyGC 125/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  122. 122. LazySweepの場合
  123. 123. LazySweep 127/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  124. 124. LazySweep 128/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  125. 125. メリット&デメリット ✓ メリット ✓ 大量に割り当て要求があったときの最 大停止時間の緩和 ✓ マーク後すぐに大量のオブジェクト要求があると マークスイープと一緒 129/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  126. 126. メリット&デメリット ✓ デメリット ✓ カウント分、マークに少しだけ負荷 ✓ マーク済みオブジェクトはカウントしな いのでまだマシ ✓ スイープ時にカウント処理しなくていい ✓ malloc_limitの計算に使用(いらないかも?) 130/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  127. 127. 実装上の工夫 ✓ 最大停止時間の緩和 ✓ Rubyヒープ構造改革 131/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  128. 128. Rubyヒープ構造改革
  129. 129. Rubyヒープ構造 133/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  130. 130. Rubyヒープブロック追加時 134/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  131. 131. 実はソートされる 135/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  132. 132. 何が困るか?
  133. 133. 問題 ✓ 追加されるRubyヒープブロックが どこに入るか分からない ✓ どこまでスイープしたか管理する のが大変 ✓ indexを持つ => 変わる…。 ✓ アドレスを持つ => 変わる…。 137/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  134. 134. 解決策
  135. 135. 分離 139/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  136. 136. スイープ対象がスッキリ 140/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  137. 137. 追加も平気 141/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  138. 138. メリット ✓ アドレスが変わらないので LazySweepしやすい ✓ 前のパッチはフラグとか使って大変 だった ✓ 今後の改善にも生かせそう 142/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  139. 139. その他、細かい仕様 ✓ 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
  140. 140. 検討したけどやらなかったこ と
  141. 141. non-freelist実装
  142. 142. freelistとは 146/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  143. 143. こうする 147/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  144. 144. 狙い ✓ freelistってCoWに悪い ✓ わざわざリンクするの遅くない? 148/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  145. 145. 検討結果:ダメだった
  146. 146. 問題
  147. 147. 空のヒープブロックを解放 できない
  148. 148. freelistの場合 152/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  149. 149. non-freelistの場合 153/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  150. 150. 以下、余談
  151. 151. ビットマップマーキングの場合 ✓ 空きヒープブロックの検知が速い のでnon-freelistできるかもしれな い 155/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  152. 152. C拡張ライブラリ作成者、コ アデベロッパの皆様へ
  153. 153. マークを消さないようにして ください
  154. 154. LazySweepの怖さ ✓ マークがオブジェクトに残ってい る ✓ ※コレを消してしまうとスイープ時 に解放 158/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  155. 155. 実際にはまったこと
  156. 156. オブジェクトのコピー 160/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  157. 157. マークの時に問題が… 161/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  158. 158. スイープ時に… 162/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  159. 159. 時間差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
  160. 160. マークには気を付けて…
  161. 161. 性能評価
  162. 162. ベンチマーク ✓ 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
  163. 163. GC総停止時間 167/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  164. 164. GC最大停止時間 168/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  165. 165. デモ $ruby demo.rb 2 二画面で
  166. 166. よさげ
  167. 167. 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
  168. 168. 今日の話題 ✓ CRubyGC ✓ LazySweepGC ✓ 未来的CRubyGC 173/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  169. 169. 未来的CRubyGC
  170. 170. やることはいっぱいある!
  171. 171. 有名な問題
  172. 172. 保守的GC
  173. 173. 保守的GCを実装した言語処理 系はレア ✓ Ruby ✓ Gauche ✓ …? 178/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  174. 174. 言語処理系を作るときの二択 ✓ 保守的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
  175. 175. よく言われる問題 ✓ 偽ポインタ問題(別名:非実在オ ブジェクト問題) ✓ コピーGC使えないよ問題 180/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  176. 176. でも
  177. 177. 本当に問題か?
  178. 178. 偽ポインタは本当に多い? ✓ Rubyのオブジェクトは5ワード固 定 ✓ チェックで大分弾ける ✓ 実アプリで問題になった例を聞か ない ✓ どんくらいあるんだろう? 183/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  179. 179. コピー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
  180. 180. それよりもメリット
  181. 181. メリット ✓ コアのコード書くの楽 ✓ C拡張ライブラリ書くのが楽 ✓ コアの開発をドライブするために 生産性は大事 186/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  182. 182. もっとも大きな問題
  183. 183. 停止型のGCアルゴリズム
  184. 184. 近未来 ✓ 大容量化 ✓ 大量のオブジェクト生成 ✓ Ruby≒Rails(サーバサイド) 189/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  185. 185. 非停止型のGCアルゴリズ ムへの移行
  186. 186. 問題解決の最大ハードル
  187. 187. ライトバリア
  188. 188. ライトバリア ✓ ライトバリアは必須 ✓ C拡張ライブラリに手を入れる ✓ 今までの資産が使えなくなる恐 れ? ✓ Ruby2.0で対応? 193/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  189. 189. スムーズな移行を 目指すために
  190. 190. ライトバリア挿入支援 ✓ ココにライトバリア入ってません よ…的な警告を出す ✓ スムーズな移行 ✓ GC本共著者の相川さんの研究が あった 195/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  191. 191. まとめると
  192. 192. CRubyGCをどうしたいか? ✓ CRubyにあった進化をしたい ✓ 保守的GCでどれだけいけるか? 197/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  193. 193. とはいえ
  194. 194. 「千里の道も一歩から」
  195. 195. コツコツ行こうぜ!
  196. 196. 個人的なコツコツ予定 ✓ 賢いオブジェクトアロケート ✓ マーク時間の短縮 201/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  197. 197. 賢いオブジェクトアロケート
  198. 198. 賢い オブジェクトアロケート 203/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  199. 199. 考え方 ✓ よく使われるものをよく使わせる ✓ あまり使われないものを後に使わ せる ✓ 解放されやすくなる ✓ 本当か?(CPythonだからうまく いった?) 204/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  200. 200. マーク時間の短縮
  201. 201. 案 ✓ マーク並列化 ✓ マークの再帰をやめる ✓ シンボルなどをマーク対象から外 す 206/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  202. 202. その他
  203. 203. その他 ✓ 特定の型を特別にアロケート(文 字列専用ヒープとか) ✓ BoehmGC化 208/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  204. 204. みなさんに お願いしたいこと
  205. 205. Rubyistのみなさま
  206. 206. 情報が欲しい ✓ こんなアプリでGCが遅いとか ✓ とにかく公開してくれるといい ✓ ご家庭のブログでも、MLでも、どこでも 211/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  207. 207. 研究畑のみなさま
  208. 208. いろいろ公開して欲しい ✓ Rejectされた論文とか ✓ せめてソースコードとか… ✓ 見える所に情報を書いてもらえる と嬉しい 213/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  209. 209. 暇なみなさま
  210. 210. 大チャンス ✓ RubyGCはまだまだ途上です ✓ Rubyの中でも狙い目 ✓ 未踏的なネタで一つどうですか? 215/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  211. 211. 暇つぶしに ✓ やってみては ✓ 全然うまくいかない ✓ だから楽しい ✓ 最高の暇つぶし 216/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  212. 212. 今日のまとめ
  213. 213. 今日のまとめ ✓ GCを遅く(遅延)できたよー ✓ 今後もコツコツ改善(コツコツ大 事) ✓ GCの妄想楽しいです(^q^) 218/221 われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original Powered by Rabbit 0.6.5
  214. 214. 提供 (株)ネットワーク 応用通信研究所
  215. 215. 質疑応答 タイム

×