SlideShare a Scribd company logo
Fxxking gc.c
                                     @nari3
               Network Applied Communication
                               Laboratory Ltd.

Fxxking gc.c                            Powered by Rabbit 1.0.4
無料


         ✓ うなぎ無料ですか?
               ✓ ヒルズにお店ありますかねぇ




                                            1/40
Fxxking gc.c                     Powered by Rabbit 1.0.4
GCの最新事情




                                    2/40
Fxxking gc.c             Powered by Rabbit 1.0.4
内容
         ✓ あとはレビューするだけ(つま
           りひどい状態)
         ✓ 書いてるうちにG1GCから少し
           外れる羽目に
               ✓ スレッド周り
               ✓ GCの基盤となる部分の解説

                                            3/40
Fxxking gc.c                     Powered by Rabbit 1.0.4
スレッド使いまくり

         ✓ いっぱいスレッド使う
         ✓ バグとかまだまだありそう
         ✓ レビューが通らないとコミット
           できないみたいだけど

                                      4/40
Fxxking gc.c               Powered by Rabbit 1.0.4
いろいろロックフリーだし

         ✓ CAS命令
         ✓ 順序性制限のためのメモリフェ
           ンスとか…
               ✓ しんどそう


                                    5/40
Fxxking gc.c             Powered by Rabbit 1.0.4
ライトバリア問題

         ✓ まつもとさんの疑問
               ✓ 「GC選択制だとライトバリア遅い
                 のでは」

         ✓ どのライトバリアを使うか、と
           いう部分でコストがかかるので
           はないか?
                                          6/40
Fxxking gc.c                   Powered by Rabbit 1.0.4
たぶんこういうこと?


         ✓ JITがあるから速い
               ✓ 選択後のライトバリアをJITでコン
                 パイルで置くだけ



                                           7/40
Fxxking gc.c                    Powered by Rabbit 1.0.4
ライトバリア問題の解決
         ✓ そもそもライトバリアは1つだ
           けだった
               ✓ カードバリアだけ

         ✓ G1GCによって2つになっ
           ちゃったけど
               ✓ これから遅くなるかも
                                         8/40
Fxxking gc.c                  Powered by Rabbit 1.0.4
スレッド管理

         ✓ HotspotVM内*で*利用するス
           レッドが使いやすい
               ✓ ぜひCRubyでもそうなってて欲しい
                ✓ rb_thread_tよりプリミティブなものが欲しい

               ✓ あとMonitorとか欲しくない?

                                                    9/40
Fxxking gc.c                             Powered by Rabbit 1.0.4
その他

         ✓ GC-safepointの解説
         ✓ スタックマップの話
               ✓ インタプリタ
               ✓ JIT

         ✓ etc..
                                      10/40
Fxxking gc.c                 Powered by Rabbit 1.0.4
アルゴリズム編とセット
 でお楽しみください
Ruby2.0の新機能
BitmapMarking
アライメントによるmark-bit
          探索
         ✓ アラインメントは
           posix_memalign(),memalign()
               ✓ Macの古いバージョンだと動かない
                 らしい
               ✓ そこはmallocで…

         ✓ ポータブルなmmapとか欲しく
           なるなぁ…           14/40
Fxxking gc.c                             Powered by Rabbit 1.0.4
本題
Fxxking gc.c
gc.cが抱える問題

         ✓ ベタにM&Sが書かれている
               ✓ 比較しづらい
               ✓ いじりづらい
               ✓ 取り込みづらい


                                       17/40
Fxxking gc.c                  Powered by Rabbit 1.0.4
Forking gc.c
forkされたもの


         ✓ REE
               ✓ 取り込みヅライ変更
               ✓ 性能比較もしづらい



                                       19/40
Fxxking gc.c                  Powered by Rabbit 1.0.4
もう少しモジュラブルに
具体的なユースケース

         ✓ Mostoly Copyingを取り込んだり
         ✓ OSからメモリ取る部分をい
           じったり
         ✓ BitmapMarkingが簡単に入れら
           れたりするもの

                                       21/40
Fxxking gc.c                  Powered by Rabbit 1.0.4
やりたいこと

         ✓ 機能を分離し簡単に切り替えら
           れるように
               ✓ 比較しやすく
               ✓ いじりやすく
               ✓ 取り込みやすく

                                    22/40
Fxxking gc.c               Powered by Rabbit 1.0.4
1. OSからメモリとってくる
               とこ


         ✓ malloc/free



                                  23/40
Fxxking gc.c             Powered by Rabbit 1.0.4
2. Rubyのヒープ管理

         ✓ ヒープ設定
               ✓ malloc_limit,heap_min_slots...

         ✓ オブジェクトの情報を提供
               ✓ is_pointer_heap(), is_dead/live_object
                 ()...

                                                             24/40
Fxxking gc.c                                        Powered by Rabbit 1.0.4
2. Rubyのヒープ管理

         ✓ ObjectSpaceモジュールのAPI提
           供
               ✓ ObjectSpace.count_objects(),_id2ref
                 (),each_object()...

         ✓ etc..

                                                            25/40
Fxxking gc.c                                       Powered by Rabbit 1.0.4
3. GCアルゴリズム
4. オブジェクトのアロケータ
          (alloc/free)

         ✓ オブジェクトの型を受け取って
           割り当てたオブジェクトを返す
               ✓ Stringは別に管理するとか
               ✓ rb_newobj以外の新しいAPIが必要

                                              27/40
Fxxking gc.c                         Powered by Rabbit 1.0.4
5. GCプロファイラ



         ✓ もう少しいじりやすくしたいす
           ね



                                      28/40
Fxxking gc.c                 Powered by Rabbit 1.0.4
実装案: HotspotVMの前例


         ✓ 以下の2クラスで抽象化
               ✓ CollectedHeap
               ✓ CollectorPolicy



                                            29/40
Fxxking gc.c                       Powered by Rabbit 1.0.4
CRubyの場合



         ✓ rb_objspace_tをもちょっと良く
           する



                                       30/40
Fxxking gc.c                  Powered by Rabbit 1.0.4
rb_objspace_t

               typedef struct {
                union {
                  struct rb_ms_objspace_t ms;
                  struct rb_bitmap_ms_objspace_t bitmap;
                } as;
               } rb_objspace_t;

                                                              31/40
Fxxking gc.c                                         Powered by Rabbit 1.0.4
RB_OBJSPACE_API,
               RB_OBJSPACE_VALUES

               #define RB_OBJSPACE_API
                共通API群;
               #define RB_OBJSPACE_VALUES
                共通の変数群;

                                                 32/40
Fxxking gc.c                            Powered by Rabbit 1.0.4
rb_ms_objspace_t

               typedef struct {
                RB_OBJSPACE_API;
                RB_OBJSPACE_VALUES;
                MSの変数群;
               } rb_ms_objspace_t;

                                               33/40
Fxxking gc.c                          Powered by Rabbit 1.0.4
rb_bitmap_objspace_t

               typedef struct {
                RB_OBJSPACE_API;
                RB_OBJSPACE_VALUES;
                BitmapMS用フラグ群;
               } rb_bitmap_ms_objspace_t;

                                                     34/40
Fxxking gc.c                                Powered by Rabbit 1.0.4
GCプロファイラ

         ✓ profilerは別ファイルの別構造体
           で管理
         ✓ gc_profile(rb_objspace_t
           objspace, enum
           gc_profile_type, ...) みたいな関
           数を一個用意しとく
                                             35/40
Fxxking gc.c                        Powered by Rabbit 1.0.4
この辺の設計は全部gistに
        乗せてます
       <URL:https://
gist.github.com/2823121>
APIが変わりそうなので8
月までには案を出したい
    (ぐももも)
その他、やりたいこと
再帰辞めたい

         ✓ gc_markの再帰を辞めたい
               ✓ prefetchとか効かせれば速くなる
                 (はず)
               ✓ The GC Handbook - 2.6 Cache misses
                 in the marking loop


                                                         39/40
Fxxking gc.c                                    Powered by Rabbit 1.0.4
もちょっといいプロファイラ

         ✓ メモリリークとか見つけやすい
           の
               ✓ オブジェクトの年齢を表示してメモ
                 リリークがわかる(とかとか
               ✓ ピンポイントでオブジェクトが特定
                 できるかどうかは微妙なところ

                                        40/40
Fxxking gc.c                   Powered by Rabbit 1.0.4

More Related Content

What's hot

20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_publicKazuaki Ishizaki
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
Masashi Shibata
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
MITSUNARI Shigeo
 
Rubyにおけるトレース機構の刷新
Rubyにおけるトレース機構の刷新Rubyにおけるトレース機構の刷新
Rubyにおけるトレース機構の刷新
Koichi Sasada
 
Java トラブル解析支援ツール HeapStats のご紹介
Java トラブル解析支援ツール HeapStats のご紹介Java トラブル解析支援ツール HeapStats のご紹介
Java トラブル解析支援ツール HeapStats のご紹介
Shinya Takebayashi
 
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてGHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについて
Mitsutoshi Aoe
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
Yosuke Mizutani
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
Yasumasa Suenaga
 
JVM的な何か@JVM Operation Casual Talk
JVM的な何か@JVM Operation Casual TalkJVM的な何か@JVM Operation Casual Talk
JVM的な何か@JVM Operation Casual TalkShinpei Ohtani
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
オタク×Node.js勉強会
オタク×Node.js勉強会オタク×Node.js勉強会
オタク×Node.js勉強会
虎の穴 開発室
 
Inside FastEnum
Inside FastEnumInside FastEnum
Inside FastEnum
Takaaki Suzuki
 
Java Just-In-Timeコンパイラ
Java Just-In-TimeコンパイラJava Just-In-Timeコンパイラ
Java Just-In-Timeコンパイラ
Kazuaki Ishizaki
 
Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界
Masaru Watanabe
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Norito Agetsuma
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみたKengo Toda
 
Native Memory Tracking
Native Memory TrackingNative Memory Tracking
Native Memory Tracking
Takahiro YAMADA
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
Ransui Iso
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
MITSUNARI Shigeo
 
LISP on TeXのその後
LISP on TeXのその後LISP on TeXのその後
LISP on TeXのその後
hak7a3
 

What's hot (20)

20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
 
Rubyにおけるトレース機構の刷新
Rubyにおけるトレース機構の刷新Rubyにおけるトレース機構の刷新
Rubyにおけるトレース機構の刷新
 
Java トラブル解析支援ツール HeapStats のご紹介
Java トラブル解析支援ツール HeapStats のご紹介Java トラブル解析支援ツール HeapStats のご紹介
Java トラブル解析支援ツール HeapStats のご紹介
 
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてGHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについて
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
JVM的な何か@JVM Operation Casual Talk
JVM的な何か@JVM Operation Casual TalkJVM的な何か@JVM Operation Casual Talk
JVM的な何か@JVM Operation Casual Talk
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
オタク×Node.js勉強会
オタク×Node.js勉強会オタク×Node.js勉強会
オタク×Node.js勉強会
 
Inside FastEnum
Inside FastEnumInside FastEnum
Inside FastEnum
 
Java Just-In-Timeコンパイラ
Java Just-In-TimeコンパイラJava Just-In-Timeコンパイラ
Java Just-In-Timeコンパイラ
 
Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 
Native Memory Tracking
Native Memory TrackingNative Memory Tracking
Native Memory Tracking
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
 
LISP on TeXのその後
LISP on TeXのその後LISP on TeXのその後
LISP on TeXのその後
 

Viewers also liked

第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみたchonaso
 
Symbol GC
Symbol GCSymbol GC
GC本をGCしないための100の方法
GC本をGCしないための100の方法GC本をGCしないための100の方法
GC本をGCしないための100の方法
Narihiro Nakamura
 
第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみる第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみる
chonaso
 
G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」Narihiro Nakamura
 
Ruby's GC 20
Ruby's GC 20Ruby's GC 20
Ruby's GC 20
Narihiro Nakamura
 
GC黄金時代
GC黄金時代GC黄金時代
GC黄金時代
Narihiro Nakamura
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
Narihiro Nakamura
 
RUBYLAND
RUBYLANDRUBYLAND
地獄のGC本スピンオフ
地獄のGC本スピンオフ地獄のGC本スピンオフ
地獄のGC本スピンオフ
Narihiro Nakamura
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)Narihiro Nakamura
 
Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編
Yuichi Sakuraba
 
Rubyによる本気のGC
Rubyによる本気のGCRubyによる本気のGC
Rubyによる本気のGC
Narihiro Nakamura
 
Java hotspot vmに おけるGCの振る舞い
Java hotspot vmにおけるGCの振る舞いJava hotspot vmにおけるGCの振る舞い
Java hotspot vmに おけるGCの振る舞い
Di Ai
 
われわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるわれわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるNarihiro Nakamura
 
GCが止まらない
GCが止まらないGCが止まらない
GCが止まらない
Narihiro Nakamura
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考えるchonaso
 
Java8勉強会
Java8勉強会Java8勉強会
Java8勉強会
賢太郎 前多
 

Viewers also liked (20)

CRubyGCの並列世界
CRubyGCの並列世界CRubyGCの並列世界
CRubyGCの並列世界
 
第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた
 
Symbol GC
Symbol GCSymbol GC
Symbol GC
 
GC本をGCしないための100の方法
GC本をGCしないための100の方法GC本をGCしないための100の方法
GC本をGCしないための100の方法
 
第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみる第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみる
 
G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」
 
GC FAQ
GC FAQGC FAQ
GC FAQ
 
Ruby's GC 20
Ruby's GC 20Ruby's GC 20
Ruby's GC 20
 
GC黄金時代
GC黄金時代GC黄金時代
GC黄金時代
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
 
RUBYLAND
RUBYLANDRUBYLAND
RUBYLAND
 
地獄のGC本スピンオフ
地獄のGC本スピンオフ地獄のGC本スピンオフ
地獄のGC本スピンオフ
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)
 
Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編
 
Rubyによる本気のGC
Rubyによる本気のGCRubyによる本気のGC
Rubyによる本気のGC
 
Java hotspot vmに おけるGCの振る舞い
Java hotspot vmにおけるGCの振る舞いJava hotspot vmにおけるGCの振る舞い
Java hotspot vmに おけるGCの振る舞い
 
われわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるわれわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできる
 
GCが止まらない
GCが止まらないGCが止まらない
GCが止まらない
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
 
Java8勉強会
Java8勉強会Java8勉強会
Java8勉強会
 

Similar to Fxxking gc.c

Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
Taiki
 
Web時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメWeb時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメ
Hideyuki Takeuchi
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
Tsuyoshi Yamamoto
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選Drecom Co., Ltd.
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
MITSUNARI Shigeo
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareer
Kyosuke MOROHASHI
 
JVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweepJVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweep
Minoru Nakamura
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
Katsutoshi Nagaoka
 
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
Salesforce Developers Japan
 
JOSUG 9th Study
JOSUG 9th StudyJOSUG 9th Study
JOSUG 9th Studyirix_jp
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要
Masaru Horioka
 
Solaris Zone と Puppet、Serverspec でインフラ CI
Solaris Zone と Puppet、Serverspec でインフラ CI Solaris Zone と Puppet、Serverspec でインフラ CI
Solaris Zone と Puppet、Serverspec でインフラ CI
ftnk
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
Fixstars Corporation
 
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Kazuki Ohta
 
Kamonを理解する
Kamonを理解するKamonを理解する
Kamonを理解する
Shuya Tsukamoto
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 

Similar to Fxxking gc.c (20)

Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
 
Web時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメWeb時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメ
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
システムコール
システムコールシステムコール
システムコール
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareer
 
JVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweepJVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweep
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
 
JOSUG 9th Study
JOSUG 9th StudyJOSUG 9th Study
JOSUG 9th Study
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要
 
Solaris Zone と Puppet、Serverspec でインフラ CI
Solaris Zone と Puppet、Serverspec でインフラ CI Solaris Zone と Puppet、Serverspec でインフラ CI
Solaris Zone と Puppet、Serverspec でインフラ CI
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方
 
Kamonを理解する
Kamonを理解するKamonを理解する
Kamonを理解する
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 

More from Narihiro Nakamura

桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
Narihiro Nakamura
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
Narihiro Nakamura
 
シャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることシャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることNarihiro Nakamura
 
GC生誕50周年を祝って
GC生誕50周年を祝ってGC生誕50周年を祝って
GC生誕50周年を祝ってNarihiro Nakamura
 
シャイなRubyistにできること
シャイなRubyistにできることシャイなRubyistにできること
シャイなRubyistにできることNarihiro Nakamura
 
Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Narihiro Nakamura
 
Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会
Narihiro Nakamura
 
RubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフRubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフNarihiro Nakamura
 
絶対復習について
絶対復習について絶対復習について
絶対復習について
Narihiro Nakamura
 
本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_objectNarihiro Nakamura
 
Talk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileTalk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileNarihiro Nakamura
 
Rubyはゲームの夢を見るか
Rubyはゲームの夢を見るかRubyはゲームの夢を見るか
Rubyはゲームの夢を見るか
Narihiro Nakamura
 

More from Narihiro Nakamura (15)

桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
 
シャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることシャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできること
 
GC生誕50周年を祝って
GC生誕50周年を祝ってGC生誕50周年を祝って
GC生誕50周年を祝って
 
GC本のツクリカタ
GC本のツクリカタGC本のツクリカタ
GC本のツクリカタ
 
シャイなRubyistにできること
シャイなRubyistにできることシャイなRubyistにできること
シャイなRubyistにできること
 
Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会
 
Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会
 
RubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフRubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフ
 
絶対復習について
絶対復習について絶対復習について
絶対復習について
 
AlgorithmDesign01
AlgorithmDesign01AlgorithmDesign01
AlgorithmDesign01
 
make of MiniGC
make of MiniGCmake of MiniGC
make of MiniGC
 
本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object
 
Talk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileTalk In Point Of Gc Once In While
Talk In Point Of Gc Once In While
 
Rubyはゲームの夢を見るか
Rubyはゲームの夢を見るかRubyはゲームの夢を見るか
Rubyはゲームの夢を見るか
 

Recently uploaded

FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 

Recently uploaded (15)

FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 

Fxxking gc.c

  • 1. Fxxking gc.c @nari3 Network Applied Communication Laboratory Ltd. Fxxking gc.c Powered by Rabbit 1.0.4
  • 2. 無料 ✓ うなぎ無料ですか? ✓ ヒルズにお店ありますかねぇ 1/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 3. GCの最新事情 2/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 4. 内容 ✓ あとはレビューするだけ(つま りひどい状態) ✓ 書いてるうちにG1GCから少し 外れる羽目に ✓ スレッド周り ✓ GCの基盤となる部分の解説 3/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 5. スレッド使いまくり ✓ いっぱいスレッド使う ✓ バグとかまだまだありそう ✓ レビューが通らないとコミット できないみたいだけど 4/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 6. いろいろロックフリーだし ✓ CAS命令 ✓ 順序性制限のためのメモリフェ ンスとか… ✓ しんどそう 5/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 7. ライトバリア問題 ✓ まつもとさんの疑問 ✓ 「GC選択制だとライトバリア遅い のでは」 ✓ どのライトバリアを使うか、と いう部分でコストがかかるので はないか? 6/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 8. たぶんこういうこと? ✓ JITがあるから速い ✓ 選択後のライトバリアをJITでコン パイルで置くだけ 7/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 9. ライトバリア問題の解決 ✓ そもそもライトバリアは1つだ けだった ✓ カードバリアだけ ✓ G1GCによって2つになっ ちゃったけど ✓ これから遅くなるかも 8/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 10. スレッド管理 ✓ HotspotVM内*で*利用するス レッドが使いやすい ✓ ぜひCRubyでもそうなってて欲しい ✓ rb_thread_tよりプリミティブなものが欲しい ✓ あとMonitorとか欲しくない? 9/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 11. その他 ✓ GC-safepointの解説 ✓ スタックマップの話 ✓ インタプリタ ✓ JIT ✓ etc.. 10/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 15. アライメントによるmark-bit 探索 ✓ アラインメントは posix_memalign(),memalign() ✓ Macの古いバージョンだと動かない らしい ✓ そこはmallocで… ✓ ポータブルなmmapとか欲しく なるなぁ… 14/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 18. gc.cが抱える問題 ✓ ベタにM&Sが書かれている ✓ 比較しづらい ✓ いじりづらい ✓ 取り込みづらい 17/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 20. forkされたもの ✓ REE ✓ 取り込みヅライ変更 ✓ 性能比較もしづらい 19/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 22. 具体的なユースケース ✓ Mostoly Copyingを取り込んだり ✓ OSからメモリ取る部分をい じったり ✓ BitmapMarkingが簡単に入れら れたりするもの 21/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 23. やりたいこと ✓ 機能を分離し簡単に切り替えら れるように ✓ 比較しやすく ✓ いじりやすく ✓ 取り込みやすく 22/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 24. 1. OSからメモリとってくる とこ ✓ malloc/free 23/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 25. 2. Rubyのヒープ管理 ✓ ヒープ設定 ✓ malloc_limit,heap_min_slots... ✓ オブジェクトの情報を提供 ✓ is_pointer_heap(), is_dead/live_object ()... 24/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 26. 2. Rubyのヒープ管理 ✓ ObjectSpaceモジュールのAPI提 供 ✓ ObjectSpace.count_objects(),_id2ref (),each_object()... ✓ etc.. 25/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 28. 4. オブジェクトのアロケータ (alloc/free) ✓ オブジェクトの型を受け取って 割り当てたオブジェクトを返す ✓ Stringは別に管理するとか ✓ rb_newobj以外の新しいAPIが必要 27/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 29. 5. GCプロファイラ ✓ もう少しいじりやすくしたいす ね 28/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 30. 実装案: HotspotVMの前例 ✓ 以下の2クラスで抽象化 ✓ CollectedHeap ✓ CollectorPolicy 29/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 31. CRubyの場合 ✓ rb_objspace_tをもちょっと良く する 30/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 32. rb_objspace_t typedef struct { union { struct rb_ms_objspace_t ms; struct rb_bitmap_ms_objspace_t bitmap; } as; } rb_objspace_t; 31/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 33. RB_OBJSPACE_API, RB_OBJSPACE_VALUES #define RB_OBJSPACE_API 共通API群; #define RB_OBJSPACE_VALUES 共通の変数群; 32/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 34. rb_ms_objspace_t typedef struct { RB_OBJSPACE_API; RB_OBJSPACE_VALUES; MSの変数群; } rb_ms_objspace_t; 33/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 35. rb_bitmap_objspace_t typedef struct { RB_OBJSPACE_API; RB_OBJSPACE_VALUES; BitmapMS用フラグ群; } rb_bitmap_ms_objspace_t; 34/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 36. GCプロファイラ ✓ profilerは別ファイルの別構造体 で管理 ✓ gc_profile(rb_objspace_t objspace, enum gc_profile_type, ...) みたいな関 数を一個用意しとく 35/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 37. この辺の設計は全部gistに 乗せてます <URL:https:// gist.github.com/2823121>
  • 40. 再帰辞めたい ✓ gc_markの再帰を辞めたい ✓ prefetchとか効かせれば速くなる (はず) ✓ The GC Handbook - 2.6 Cache misses in the marking loop 39/40 Fxxking gc.c Powered by Rabbit 1.0.4
  • 41. もちょっといいプロファイラ ✓ メモリリークとか見つけやすい の ✓ オブジェクトの年齢を表示してメモ リリークがわかる(とかとか ✓ ピンポイントでオブジェクトが特定 できるかどうかは微妙なところ 40/40 Fxxking gc.c Powered by Rabbit 1.0.4