SlideShare a Scribd company logo
1 of 134
Download to read offline
たまには
           RubyGCの事を
         思い出すなどしませんか
                             nari(中村)
                          ネットワーク応用通信研究所


Powered by Rabbit 0.5.7
注意
いまからRuby内
部のマニアックな
 話をします
  m(_ _)m
自己
紹介
島根の方から来ました




             3/133
自己紹介
 nariと申します
 はてなで「I am Cruby」というブログ
   id:authorNari

 GCのおかげでCRubyのコミッタになれました
   GC = GarbageCollection

 福岡出身で半年ほど前に島根へ
 ネットワーク応用通信研究所所属            4/133
よろしく
お願いしま
  す
ここでいきなりアンケート
GCに興味ある方?
    ノシ
GCを触った事がある方?
      ノシ
予想 200人中10人
でも
実はGC好きは
世の中に多い
アルゴリズムも沢山




http://wiki.livedoor.jp/author_nari/d/GC
                                           12/133
私もそんな
GC好きの1人
15分程お付き合いください
今日話す事
 GCについて
 現在のRubyGC
 GC改善でやったこと
 未来のRubyGC




              15/133
今日話す事
 GCについて
 現在のRubyGC
 GC改善でやったこと
 未来のRubyGC




              16/133
GCについて
GCとは何か
Wikipedia
 プログラムが動的に確保したメモリ領域のうち、
 不要になった領域を自動的に解放する機能で
 ある。




                     19/133
いらなくなったオブジェクト
とかをよろしくやってくれる
あっても意味のないものを自
動で削除




           21/133
すごく良い子
最近の言語にはほぼ搭載
 Java
 Ruby
 Perl
 Python




          23/133
GCのライトサイド




http://www.flickr.com/photos/
                                24/133
snapping/2358045173/
GCのライトサイド
 よけいなバグを生まなくなった
  mallocとかfreeとかしなくていい!




                          25/133
GCのダークサイド




http://www.flickr.com/photos/
                                26/133
hotrodhomepage/15219315/
GCのダークサイド
 GC自体のバグが強烈




              27/133
GCの特徴として
 回収してくれるのが普通
  日頃感謝しない

 バグが出てくると腹が立つ
  GCのせいで..GCのせいで..




                     28/133
今回の発表はそんな可哀
想なGCにスポットライトを
  当てるものです
今日話す事
 GCについて
 現在のRubyGC
 GC改善でやったこと
 未来のRubyGC




              30/133
現在のRubyGC
MarkSweep方式という
 アルゴリズムを採用
Mark = 印付け
Sweep = ゴミを掃く
MarkSweep
MarkSweep
本当に名前の通りの動作
Rubyのサンプルプログラム
     を元に説明
サンプルプログラム




            39/133
実際にどう動くのか




            40/133
RObject作成,RArray参照




                 41/133
RArray作成




           42/133
RObject作成,RArray参照




                 43/133
RArray参照




           44/133
RArray唯一の参照削除




                45/133
ここからGCのはじまり




              46/133
Mark処理




         47/133
Sweep処理




          48/133
Sweep処理




          49/133
Sweep処理




          50/133
GC終了




       51/133
これがMarkSweepGC
まさに印付け&ゴミ掃き
RubyGCのアルゴリズム
今日話す事
 GCについて
 現在のRubyGC
 GC改善でやったこと
 未来のRubyGC




              55/133
GC改善
私がやった事一覧
 GC::Profiler
 BitmapMarking




                 57/133
私がやった事一覧
 GC::Profiler
 BitmapMarking




                 58/133
GC::Profilerを作った
こんな経験はありませんか




http://
serif.hatelabo.jp/14819524be75304d0cab260af116b
dd4f8bb8450/                              60/133
こんな時Ruby1.8では
 Heap領域の使用状況を手軽に得る手段が
 無い
 GCにかかっている時間を手軽に得る手段
 が無い




                   61/133
これからは
 もう安心
Ruby1.9からの新機能
GCの
プロファイル機能
GC::Profiler
サンプルコード
  GC::Profiler.enable #Profiler起動
  #..計測したい処理..
  GC::Profiler.report #Profile結果表示




                                     66/133
表示されるProfile結果




                 67/133
起動回数




       68/133
GCが起動した時間




            69/133
Heapの状況




          70/133
GCの処理時間




          71/133
役に立つ場面
GCに問題が
あるかどうかの切り分け
メモリリーク
 の発見
パフォーマンス
チューニング
その他には
『こんなにメモリ使うの?』




                77/133
ひとしきりニヤニヤ
その具体例
RailsでGC::Profiler
 を使って楽しむ
デモ
これは
 Railsプラグイン
として公開しました
GCProfilerOnGraph
  Ruby1.9.1で動作
  Rails2.3くらいで動作するはず
  http://github.com/authorNari/gc_profiler_on_graph/tree/master




                                                                  82/133
私がやった事一覧
 GC::Profiler
 BitmapMarking




                 83/133
BitmapMarkingを改善した
ちょっと難しい話
CopyOnWrite
CopyOnWrite
  多くのLinux環境では子プロセス作成時
  (fork)のメモリは共有領域に置かれる
  書き込みがあった際に,それぞれのプロセ
  スの私有領域にコピーされる
  (注)Rubyの機能ではない




                         87/133
子プロセス生成時のメモリ領
域




           88/133
実際にはコピーしない




読み込みをする時はそれでも充分
                  89/133
書き込み(write)が発生




                 90/133
そのタイミングで私有領域に
Copy




           91/133
Writeの時に
Copyする
CopyOnWrite
実はRubyGCと
CopyOnWriteは相性が
       悪い
無駄なコピーの発生
 RubyGCではマークの際に生存している全て
 のオブジェクトに対して印付けする
   つまりWriteする

 forkしたプロセスの場合,CopyOnWriteが効
 いて無駄なコピーが..




                          96/133
無駄なコピーの発生




            97/133
改善する手法
BitmapMarkingGC
  オブジェクトの印付け用bitのみを別の領域
  に移す
   これをビットマップと呼ぶ

  オブジェクトの生存,死亡はビットマップにて
  管理
  マーク時に直接オブジェクトを操作する事が
  なくなる
  無駄なコピーが発生しにくい
                     99/133
Bitmap領域を確保




Bitmapは非常に小さいサイズ
                   100/133
そこに印付けする




Copyが発生しない
             101/133
BitmapMarkingGC導入前例
 RubyEnterpriseEditionというRuby実装
   Hongli Laiさん達によって作成
   REEと呼ばれる

 RubyOnRails+REE+Apacheで動作させた
   リクエスト毎秒 22% が高速化
   総メモリ使用量が 31% 削減した


                                  102/133
それで
私がやった事は
これを全部書き直し
 全部書き直し
 REEではビットマップ位置探索がO(n)
   普通のGCが耐えられない位遅い

 これをO(1)に改善
   ボトルネックの解消

 ruby1.9に対応させた

                        104/133
実装の
詳細については
  割愛
続きは論文で!




       http://www.narihiro.info/


まつもとさんと連名!
                                   106/133
今日話す事
 GCについて
 現在のRubyGC
 GC改善でやったこと
 未来のRubyGC




              107/133
未来のRubyGC
さっきの論文
PROで発表しました




             110/133
なんと
その他にも2つ




          112/133
世はGC戦国時代へ




http://www.flickr.com/photos/
                                113/133
rowmuse/86900501/
私の論文は見事にReject




http://www.flickr.com/photos/
                                114/133
jpockele/226331607/
orz
発表内容を
ざっと説明
Snapshot-GC
  Snapshot-GC(相川さん)
    Markingのインクリメンタル化
    GCの最大停止時間が短くなる
    WriteBarrierを入れる場所をチェックする機能付き
    今はminirubyしか動かない




                              117/133
Mostly-CopyingGC
  Mostly-CopyingGC(鵜川さん)
    ConservativeなRubyGCにCopyingGCを実装
    Compactionできる(メモリのデフラグ)
    『良ければ明日にでも入れたい』まつもとさん談




                                       118/133
Ruby1.9にこの中のどれか
       は入るかも
その他,私が今やってる事
 bdw-gc(BoehmGC)をRubyへ適用
   来年のRuby会議までにやります!
     (自分を追い詰めるメソッド)




                           120/133
発表のまとめ
発表のまとめ
 RubyのGCはMarkSweep方式
 Ruby1.9にはGCのProfilerが入った
 RubyGCの未来は明るい
 みなさんRuby1.9を使いましょう




                            122/133
ご静聴
ありがとうございました
まだ時間がある?
Narioのデモやりますね
Narioとは
Rubyで作られた横スクロールアクションゲーム




                     126/133
Ruby1.9でどれだけ高速化
       されるか
Ruby1.8の場合
    デモ
Ruby1.9の場合
    デモ
Ruby1.9はやっぱり偉大で
        すね
補足:GCはまったく関係あ
     りません
やっぱりRuby1.9使いましょ
       う
ご静聴
ありがとうございした

More Related Content

What's hot

Bloggers Survival 제안서 불로고수
Bloggers Survival 제안서 불로고수Bloggers Survival 제안서 불로고수
Bloggers Survival 제안서 불로고수JIAQI NIE
 
結構化程式設計
結構化程式設計結構化程式設計
結構化程式設計David Tang
 
Web技術勉強会11回目
Web技術勉強会11回目Web技術勉強会11回目
Web技術勉強会11回目龍一 田中
 
入門啟示錄Ch06簡報
入門啟示錄Ch06簡報入門啟示錄Ch06簡報
入門啟示錄Ch06簡報Chiou WeiHao
 
Internet Ued Process
Internet Ued ProcessInternet Ued Process
Internet Ued Processrex song
 
入門啟示錄 Ch03簡報
入門啟示錄 Ch03簡報入門啟示錄 Ch03簡報
入門啟示錄 Ch03簡報Chiou WeiHao
 
入門啟示錄Ch08簡報
入門啟示錄Ch08簡報入門啟示錄Ch08簡報
入門啟示錄Ch08簡報Chiou WeiHao
 
入門啟示錄Ch05簡報
入門啟示錄Ch05簡報入門啟示錄Ch05簡報
入門啟示錄Ch05簡報Chiou WeiHao
 
eComing Club簡介200802
eComing Club簡介200802eComing Club簡介200802
eComing Club簡介200802Robin Chen
 
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)Kohei Otsuka
 
Capstone2 final - Smart Shopping Bot
Capstone2 final - Smart Shopping BotCapstone2 final - Smart Shopping Bot
Capstone2 final - Smart Shopping BotChan-Young Han
 
25000社以上採用計測ソリューション
25000社以上採用計測ソリューション25000社以上採用計測ソリューション
25000社以上採用計測ソリューションnishimizu
 
2009年4月8日セミナー 1.オープニング
2009年4月8日セミナー 1.オープニング2009年4月8日セミナー 1.オープニング
2009年4月8日セミナー 1.オープニングPreferred Networks
 

What's hot (20)

XS Japan 2008 Ganeti Japanese
XS Japan 2008 Ganeti JapaneseXS Japan 2008 Ganeti Japanese
XS Japan 2008 Ganeti Japanese
 
BRXbox
BRXboxBRXbox
BRXbox
 
XS Japan 2008 App Data Japanese
XS Japan 2008 App Data JapaneseXS Japan 2008 App Data Japanese
XS Japan 2008 App Data Japanese
 
Bloggers Survival 제안서 불로고수
Bloggers Survival 제안서 불로고수Bloggers Survival 제안서 불로고수
Bloggers Survival 제안서 불로고수
 
結構化程式設計
結構化程式設計結構化程式設計
結構化程式設計
 
Web技術勉強会11回目
Web技術勉強会11回目Web技術勉強会11回目
Web技術勉強会11回目
 
入門啟示錄Ch06簡報
入門啟示錄Ch06簡報入門啟示錄Ch06簡報
入門啟示錄Ch06簡報
 
plan
planplan
plan
 
Internet Ued Process
Internet Ued ProcessInternet Ued Process
Internet Ued Process
 
入門啟示錄 Ch03簡報
入門啟示錄 Ch03簡報入門啟示錄 Ch03簡報
入門啟示錄 Ch03簡報
 
91 Ch
91 Ch91 Ch
91 Ch
 
入門啟示錄Ch08簡報
入門啟示錄Ch08簡報入門啟示錄Ch08簡報
入門啟示錄Ch08簡報
 
4
44
4
 
入門啟示錄Ch05簡報
入門啟示錄Ch05簡報入門啟示錄Ch05簡報
入門啟示錄Ch05簡報
 
Ext Ncs 20081029
Ext Ncs 20081029Ext Ncs 20081029
Ext Ncs 20081029
 
eComing Club簡介200802
eComing Club簡介200802eComing Club簡介200802
eComing Club簡介200802
 
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)
 
Capstone2 final - Smart Shopping Bot
Capstone2 final - Smart Shopping BotCapstone2 final - Smart Shopping Bot
Capstone2 final - Smart Shopping Bot
 
25000社以上採用計測ソリューション
25000社以上採用計測ソリューション25000社以上採用計測ソリューション
25000社以上採用計測ソリューション
 
2009年4月8日セミナー 1.オープニング
2009年4月8日セミナー 1.オープニング2009年4月8日セミナー 1.オープニング
2009年4月8日セミナー 1.オープニング
 

More from Narihiro Nakamura

More from Narihiro Nakamura (20)

Symbol GC
Symbol GCSymbol GC
Symbol GC
 
RUBYLAND
RUBYLANDRUBYLAND
RUBYLAND
 
Ruby's GC 20
Ruby's GC 20Ruby's GC 20
Ruby's GC 20
 
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
 
Rubyによる本気のGC
Rubyによる本気のGCRubyによる本気のGC
Rubyによる本気のGC
 
Fxxking gc.c
Fxxking gc.cFxxking gc.c
Fxxking gc.c
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
 
GC FAQ
GC FAQGC FAQ
GC FAQ
 
G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」
 
CRubyGCの並列世界
CRubyGCの並列世界CRubyGCの並列世界
CRubyGCの並列世界
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)
 
地獄のGC本スピンオフ
地獄のGC本スピンオフ地獄のGC本スピンオフ
地獄のGC本スピンオフ
 
シャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることシャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできること
 
われわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるわれわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできる
 
GCが止まらない
GCが止まらないGCが止まらない
GCが止まらない
 
GC本をGCしないための100の方法
GC本をGCしないための100の方法GC本をGCしないための100の方法
GC本をGCしないための100の方法
 
GC生誕50周年を祝って
GC生誕50周年を祝ってGC生誕50周年を祝って
GC生誕50周年を祝って
 
GC本のツクリカタ
GC本のツクリカタGC本のツクリカタ
GC本のツクリカタ
 
シャイなRubyistにできること
シャイなRubyistにできることシャイなRubyistにできること
シャイなRubyistにできること
 

Talk In Point Of Gc Once In While