Successfully reported this slideshow.

Fxxking gc.c

1,661 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

×