今日は GC の Bitmap Marking がコミットされました。
nagachika:r34221 2012-01-07 00:52:44 +0900
configure.in で CANONICALIZATION_FOR_MATHN というマクロを定義するのが RUBY_API_VERSION_MAJOR が 1 の時だけになっていたため、2.0.0 にアップデートすることで mathn に必要なシンボル(関数)が定義されなくなってしまったので、条件を消しています。 [ruby-dev:45100] [Bug #5852]
svn:r34222 2012-01-07 00:52:48 +0900
version.h の日付更新。
nari:r34225 2012-01-07 23:02:23 +0900
GC の Bitmap Marking がコミットされています。 [ruby-dev:45085] [Feature #5839]
CRuby の GC は Mark&Sweep ベースで、これまではマークを各オブジェクトの struct RVALUE に埋め込まれている flags のなかのビットを使って表現していたのですが、これだと GC するたびに全てのオブジェクトスロットの領域にメモリ書き込みが行なわれるため、fork してそのまま動作する時にせっかく Copy On Write で共有できるかもしれないメモリ領域が必ず複製されてしまうため、一部のアプリケーション(まあ passenger 用ですかね)でメモリ使用量が増えてしまいます。マーク用の領域をオブジェクトそのものとは別に bitmap として持つようにすることで複製される領域を抑えるようにしています。
また struct heap_slot から実際のオブジェクトの配列はポインタで持っていた(別途確保していた)のを、struct heap_slot の後に連続したメモリ領域に確保するようにしたり、freelist をヒープスロット毎に持つようにしたり、アライメントされたメモリ確保するために posix_memalign(3) など(プラットフォームによっていろいろ)を利用するようにしたりしています。 free list の配置替えについては完全に理解できていないのでもうちょっとよく読みたいです。
slot_sweep() に fprintf で標準エラー出力にメッセージ出しているのはデバッグ用出力の消し忘れでしょうか?
naruse:r34226 2012-01-08 00:13:37 +0900
Bitmap Marking の変更で利用する posix_memalign memalign のチェックを configure に追加して、その結果を条件コンパイルに利用するようにしています。
svn:r34227 2012-01-08 00:13:41 +0900
version.h の日付更新。
naruse:r34229 2012-01-08 00:21:09 +0900
Object#inspect の rdoc の typo 修正。
ayumin:r34231 2012-01-08 01:22:47 +0900
test_old_thread_select.rb の select(2) のタイムアウト時間のチェックが Snow Leopard でもひっかかることがあるので skip するようにしています。 [ruby-dev:45108] [Bug #5858]