Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Fxxking gc.c

1,904 views

Published on

Published in: Technology
  • Be the first to comment

Fxxking gc.c

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

×