A Non-Fragmenting Non-Moving Garbage Collector Gustavo Rodriguez-Rivera,Michael Spertus,Charles Fiterman Geodesic Systems について 発表者 : 小林 義徳 [email protected] ISMM 98 Pages 79-85 http://www.acm.org/pubs/contents/proceedings/plan/286860/ 内容 Introduction Boehm GC について Fragmentation を防ぐ二つの手法 Medium size objects in BiBoP like allocators Footprint reduction 仮想メモリを利用した方法 実験および実験結果 Introduction(1) Non-moving Garbage Collector の弱点 オブジェクトを動かせない fragmentation の問題に弱い。 cf. moving collectors オブジェクトを動かすことで、 fragmentation を解消できる 移動には、ポインタの書き換えを伴うため、 Conservative GC では使えない。 Introduction(2) Great Circle Geodesic Systems 社の、商用GC ライブラリ 後述する二つの手法により、fragmentation を低減 Boehm GC の改造という形で実装 Geodesic Systems,Inc. http://www.geodesic.com/products/products.html Boehm GC について Allocation 戦略 ~ BiBoP(Big-Bag-of-Pages) Boehm GC でのオブジェクトのサイズによる分類 Black-Listing について BiBoP(Big-Bag-of-Pages) 1 つのページ内のオブジェクトは、全て同じサイズ。 異なるサイズのオブジェクトは、異なるページから割り 当てる。 あるポインタに対し、 オブジェクトの開始アドレス オブジェクトのサイズ を知ることができる。 ページ内のオブジェクトサイズの違いによる 内部断片化が起こらない。 Boehm GC での オブジェクトの サイズによる分類 Small objects 1 つのページを分割することで allocate される object Large objects(page サイズ) 1 つ以上の連続したページを確保 ページサイズの 半分 + ε または ページサイズ + ε の要求が来た時、深刻な内部断片化が。 内部断片化がおこる例 ページサイズ : 4096 bytes Allocate 要求 : 2050 bytes Boehm GC では、4096 bytes を確保 残りの2046 bytes は無駄に。 ページサイズ : 4096 bytes 無駄 2050 bytes Black-Listing Pointer に指されているページを あらかじめ Black List に登録 Black List に載っているページからの オブジェクトの Allocate は避ける False 生きたオブジェクトを指す False Pointer を 減らすことができる Fragmentation を防ぐ二つの手法 Medium size objects in BiBoP like allocators 内部断片化を減らす Footprint reduction 外部断片化 を減らす 仮想メモリを利用した方法 Medium Objects(1) Small objects 1 つのページを分割することで allocate Large objects 1 つ以上の連続したページを確保 Medium objects 複数ページをいくつかに分割 Medium Objects(2) ページサイズ : 4096 bytes Allocate 要求 : 2050 bytes Medium objects をサポートしたGC では、 2 つのページを 3 つに分割 8192 = 2730 * 3 + 2 Boehm GC 4096 – 2050 = 2046 bytes wasted This GC 2730 – 2050 = 680 bytes wasted Medium Objects(3) Fragmentation = (realSize – requestedSize) / realSize Objects がない場合(Figure 1) Medium Objects がある場合(Figure 2) Medium 要求サイズが 2049 バイト付近の場合、Medium Object なしの方は Fragmentation が 50 % 近いのに対し、Medium Object ありの方は Fragmentation が 20% ぐらいにまで抑えられている。 Footprint reduction ページに対する、commit / uncommit operation uncommit 操作で、仮想メモリのページに 対応する実メモリのみ OS に返される。 アドレス空間を再利用できる。 cf. map/unmap operation unmap 操作で、アドレス空間と実メモリの 両方がOS に返される。 Footprint reductionの例 (Figure 3) 4 つの Live Objects 3 つの Free pages 3 つの uncommitted pages しかし、図の左側で、3 つの free pages は連 続ではない。 Footprint reduction により、Free と Uncommitted を入れ替え、連続なアドレスが 得られる。 Footprint reduction (Figure 3) Footprint reduction Great Circle では・・・ あらかじめ決められた回数だけ Garbage Collection が呼ばれたときに、Footprint Reduction が実行される。 あらかじめ決められた回数の GC にわたって使われ てないページは、uncommit され、OS に返される。 Blacklist に載っているページに対しては、 実メモリが uncommitted であるという効果もある。 Footprint reduction の実装(1) Page-flags Committed-bit Free-bit Recently used-bit 初期化時に、大きなページ列をアドレス空間のみ取得 (arena)。また、page-flags がクリアされる Footprint reduction の実装(2) Large Object の要求がきて、free list の中からでは要 求に応えられない場合の動作 Arena の中から、十分な大きさの uncommitted pages を見 つける。 1.のページを commit し、free list に追加する。また、 committed-bits と free-bits を更新。 要求が満たされる。 Arena 中の、連続な uncommitted pages が十分な大きさ でない場合、新しく uncommitted pages を OS からとってき て、arena に追加する。 Footprint reductionの実装(3) ページが free-list に返された場合、 recently used-bits と free-bits がセットされる。 中に、 recently used-bit が立っていない ページは OS に返され、ヒープが縮小される。 Footprint reduction 実験 Netscape について、メモリ使用量を測定 Sparc Station 10 Solaris Operating System Injection technique を用いて、Netscape と X-Server の両方にGreat Circle を実行時 にリンク。 メモリは、明示的に確保・開放している。 実験 Figure 4 Without footprint reduction Netscape を 5 分間走らせたときのHeap Size 約 40 のドキュメントをロード 実験 Figure 5 With footprint reduction その他は、Figure 4 のときと同じ Footprint reduction は、毎回連続な 100 kB を free-list に返す 100 kB という数字は、実行時に tune することもできる。 結論(1) Footprint Reduction は long-lived application に対し、非常に有効である。 とくに、Netscape のような、負荷の変化が激し いアプリケーションではとりわけ有効である。 Footprint reduction 結論(2) Medium Objects objects による advantage は、 この実験ではよくわからない。 Medium objects が有効であることを示すに は、さらなる実験が必要であろう。 Medium References Boehm GC について “Space Efficient Conservative Garbage Collection” Hans-Juergen Boehm Injection Technique について “Non-intrusive cloning garbage collection with stock operating system support.” Gustavo Rodriguez-Rivera,Vincent Russo. Marking with blacklisting mark(p){ if p is not a valid object address{ if p is in the vicinity of the heap{ add p to blacklist } return } if p is marked { return } set mark bit for p foreach field q in the object referenced by p { mark(q) } }
© Copyright 2024 ExpyDoc