kawasin73 / knowledge

気になったツールやサイト、勉強した内容をまとめます。
8 stars 0 forks source link

メモリアロケーションにおけるフラグメンテーションへの対策 #14

Closed kawasin73 closed 5 years ago

kawasin73 commented 5 years ago

動的なヒープメモリアロケーションではフラグメンテーションが発生する。 以下のそれぞれのモジュールでは、フラグメンテーションの対策をどのように行っているかを調査する。

kawasin73 commented 5 years ago

まず、wikipedia で一般的な考え方を調査した

参考

kawasin73 commented 5 years ago

TCMalloc

Thread-Caching Malloc

http://goog-perftools.sourceforge.net/doc/tcmalloc.html

特徴

仕組み

kawasin73 commented 5 years ago

jemalloc

http://d.hatena.ne.jp/repeatedly/20110110/1294634486

https://www.facebook.com/note.php?note_id=480222803919

アリーナのメモリは、chunk (デフォルトで 4MiB)で管理されている。定数時間で chunk のメタデータにアクセスできる。 チャンクの先頭にメタヘッダーがあり、ページマップを持つ。 Small Object は、それぞれ small object page run の先頭にメタヘッダーを持つ Lage Object は、チャンクのメタヘッダーに管理される 空きのある small object page run は、dirty と clear の2種類の赤黒木で管理され、dirty なものから使っていく

chunk layout

スレッドごとにキャッシュを持ち、アリーナにアクセスする前にキャッシュを確認して利用可能であればキャッシュから使う。 アリーナの操作にはロックが必要になる

スレッドキャッシュにあるメモリはアロケーションリクエストを単位とする インクリメンタルGC によって指数的に徐々に低下するアプローチでアリーナに戻される

arena layout