Más contenido relacionado
La actualidad más candente (20)
Similar a Fxxking gc.c (20)
Más de Narihiro Nakamura (15)
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
- 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