More Related Content
PPTX
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法 PDF
Concurrent Mark-Sweep Garbage Collection #jjug_ccc PPTX
PDF
PPTX
java.lang.OutOfMemoryError #渋谷java PPTX
PDF
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう PDF
What's hot
PDF
PDF
WASM(WebAssembly)入門 ペアリング演算やってみた PDF
Javaトラブルに備えよう #jjug_ccc #ccc_h2 PPTX
PDF
JVM的な何か@JVM Operation Casual Talk PDF
PPTX
PDF
PDF
PDF
PDF
PDF
Lisp Tutorial for Pythonista Day 6 PDF
PPTX
Java トラブル解析支援ツール HeapStats のご紹介 PDF
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23 PDF
PDF
PDF
GHC 6.12.1 マルチコア対応ランタイムシステムについて PDF
20141224 titech lecture_ishizaki_public PDF
Apache Drill で見る Twitter の世界 Viewers also liked
PDF
PPTX
第六回渋谷Java Java8のJVM監視を考える PDF
PDF
PDF
PDF
PDF
PPTX
第七回 渋谷Java - Apache Shiroを使ってみた PPTX
PDF
PDF
Parallel worlds of CRuby's GC PDF
PDF
PDF
PDF
PPTX
Java hotspot vmにおけるGCの振る舞い PDF
PPTX
第九回渋谷Java RaspberryPi+Javaを試してみる PDF
PDF
Javaのプログラムはどうやって動いているの? GC編 Similar to Fxxking gc.c
PDF
PDF
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか? PDF
PPT
PDF
PDF
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術 PDF
PDF
JVM-Reading-ConcurrentMarkSweep PDF
PDF
PDF
PDF
Matz presentation for Fukuoka Ruby Days 2010 PDF
PDF
PDF
Linux Kernel Seminar in tripodworks PDF
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか? PDF
PDF
PDF
KEY
More from Narihiro Nakamura
PDF
PDF
Railsハイパー実践講座-第35回NaCl勉強会 PDF
PDF
PDF
Parallel worlds of CRuby's GC PDF
シャイなRubyistがRubyKaigiでできること PDF
Talk In Point Of Gc Once In While PDF
PDF
本当は怖いObjectSpace.each_object PDF
PDF
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
- 12.
- 13.
- 14.
- 15.
アライメントによるmark-bit
探索
✓ アラインメントは
posix_memalign(),memalign()
✓ Macの古いバージョンだと動かない
らしい
✓ そこはmallocで…
✓ ポータブルなmmapとか欲しく
なるなぁ… 14/40
Fxxking gc.c Powered by Rabbit 1.0.4
- 16.
- 17.
- 18.
gc.cが抱える問題
✓ ベタにM&Sが書かれている
✓ 比較しづらい
✓ いじりづらい
✓ 取り込みづらい
17/40
Fxxking gc.c Powered by Rabbit 1.0.4
- 19.
- 20.
forkされたもの
✓ REE
✓ 取り込みヅライ変更
✓ 性能比較もしづらい
19/40
Fxxking gc.c Powered by Rabbit 1.0.4
- 21.
- 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
- 27.
- 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.
- 38.
- 39.
- 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