ruby-trunk-changes r54444 - r54455

今日はメモリ管理まわりで page の確保/解放まわりのパラメータの調節用環境変数の追加などがありました。

nobu: r54444 2016-03-31 11:18:21 +0900

拡張ライブラリ date の DateTime についての rdoc 用コメントが Date のクラス定義のところにあったのを DateTime の定義の前に移動しています。 [ruby-core:74729] [Bug #12233]

nobu: r54445 2016-03-31 11:33:51 +0900

拡張ライブラリ date の Date#strftime の rdoc 用コメントのインデントの修正。

nobu: r54446 2016-03-31 12:02:35 +0900

r54433 の rational.c と同様に get_dat1(), get_dat2() のマクロを変数宣言と代入に分けた展開をしていたのを初期化つきの代入文として展開するように修正しています。

ko1: r54447 2016-03-31 15:51:27 +0900

gc.c の gc_page_sweep() で戻り値に空きスロット数を返すようにして gc_sweep_step() で戻り値を使うように修正しています。 gc_page_sweep() で struct heap_page::free_slots に格納していたのを参照していたのを同じ値を戻り値に返すようにしていますね。最適化のためでしょうか。

ko1: r54448 2016-03-31 16:02:40 +0900

gc.c の gc_verify_heap_pages() で tomb heap と zombie オブジェクト数のチェックも行うようにしています。 zombie オブジェクトって何だったっけな…。ああ T_ZOMBIE 型のオブジェクトが導入されてて finalizer 処理前のものがこの型になるんでしたね。

svn: r54449 2016-03-31 16:02:41 +0900

r54448 の行末の空白を除去しています。

ko1: r54450 2016-03-31 16:45:13 +0900

GC 関連のパラメータを調節できる環境変数RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO と RUBY_GC_HEAP_FREE_SLOTS_MAX_RATIO を追加しています。 page の確保/解放をする時の空きスロット数の割合のしきい値が指定できるようです。これまでは 0.3/0.8 で固定だったのが指定できるようしています。

ko1: r54451 2016-03-31 17:21:35 +0900

GC の mark 後に page の確保/解放の判定のための空きスロット数をカウントするのを、sweep phase の最初にカウントしたものを次の mark phase で使っていたのを、mark phase 終了後の値を使うようにして、値を保存しておかなくても良いようにしています。そのかわり rb/objspace_t::heappages::freeable_pages というメンバを追加して解放可能なページ数を保持しておくようにしています。

ko1: r54452 2016-03-31 17:49:09 +0900

r54451 の文法エラー修正。

ko1: r54453 2016-03-31 18:16:48 +0900

GC のパラメータ調整用の環境変数GC_HEAP_FREE_SLOTS_GOAL_RATIO を追加して、新たに page を確保する時にどのくらいのスロット数のページを追加するかの調整方法を修正しています。コミットログを読むに、これまでは次第に大きな page を追加しがちだったので、free slot の数をどのくらい増やすかという指標でサイズを指定できるようにしているようです。デフォルトは 0 でこの時はこれまで同様の戦略を使うようです。

ko1: r54454 2016-03-31 19:16:48 +0900

r54453 のコミット漏れ修正。

nobu: r54455 2016-03-31 21:46:15 +0900

gc.c の heap_extend_pages() で無効化されてる(if (0) で常に通らない分岐になってる)デバッグ出力で整数の指示子を型にあわせて PRIdSIZE を使うようにするなどの修正。