ruby-trunk-changes 2022-05-10

今日は主に Variable Width Allocation での heap の管理の潜在的な不具合修正と Variable Width Allocation でまとめて連続して確保する slot 数の上限を 5つまでに引き上げる変更などがありました。

[00e5e827b1] David Rodríguez 2022-05-08 19:22:59 UTC

bundler に古い rubygems サポートのために respond_to? でチェックして分岐していたコードなどをもう不要ということで削除しています。

[a41fbc2c95] Peter Zhu 2022-05-04 13:05:22 UTC

Variable Width Allocation で可能な slot のサイズを struct RVALUE 4つまでから 5つまでに拡張しています。いくつかのベンチマークの結果性能もメモリ消費量も良い結果が得られたみたいです。

[033e58cf2c] Peter Zhu 2022-05-04 13:50:48 UTC

gc.c の gc_sweep_page() で bitmap を管理するループのカウンタの上限を HEAP_PAGE_BITMAP_LIMIT にしてたのを page 内の slot 数から実際に必要な数を計算するようにしています。無駄な処理の回避かと思ったけど buffer overrun の可能性があったみたいです。

[b3f3cb0c38] Peter Zhu 2022-05-06 13:37:21 UTC

gc_sweep_start() で Variable Width Allocation 有効時にあるサイズの heap にひとつも page がない時に gc_sweep_finish_size_pool() を呼び出すパスを追加しています。 gc_sweep_finish_size_pool() を呼ばないと page 追加されないのでずっと page が作られなくなってしまうということみたいです。

[f7d480378a] Peter Zhu 2022-05-06 13:41:05 UTC

gc_sweep_finish_size_pool() で page 追加する条件になる空き slot 数の計算をその heap の全 slot の割合で計算しているところで heap_init_slots よりも小さくなってしまったら heap_init_slots に切り上げておくようにしています。Variable Width Allocation で大きなサイズの heap はあまり利用されず page 数が小さいまま GC が実施される可能性があるのでその時にうまく動かなくなる可能性があったようです。

[e28e9c63c6] Peter Zhu 2022-05-06 14:53:48 UTC

heap_extend_pages() でもその heap の slot 数が 0 (つまり page がひとつもない)時の対応を追加しています。やはり Variable Width Allocation で大きなサイズの heap が利用されないまま GC が開始された時の考慮漏れがあったようです。

[85479b34f7] Peter Zhu 2022-05-06 17:43:18 UTC

gc_sweep_finish_size_pool() で実際に heap_increment() を呼んで heap に page を追加していたのをやめています。 rb_size_pool_t::allocatable_pages に確保する page 数上限をセットするだけで実際に page を確保するのは必要な時まで遅延させるようにしています。

[40be4d4263] MSP-Greg 2021-12-25 18:12:21 UTC

拡張ライブラリ psych で String#gsub のかわりに極力 String#delete などを使って正規表現による置換を避けるようにしています。

[2999eb8846] git 2022-05-09 18:20:49 UTC

version.h の日付更新

[c7d2247e35] Nobuyoshi Nakada 2022-04-25 09:48:37 UTC

configure の --with-thread オプションに引数で pthread など利用するスレッド実装を明示的に指定するようにオプションの形式を変更しています。

[d0983af61c] Nobuyoshi Nakada 2022-05-10 01:15:27 UTC

cea34bd8082784051542131ddf8a353f5656ac88 で追加した IO::Buffer のビット演算のメソッド群のテストで assert_equal の result と expected の引数の順序が逆だったのを修正しています。

[a85cdb5a6e] Kaíque Kandy Koga 2022-05-10 04:07:16 UTC

033e58cf2c6829e14fa38e0a364911361090aa83 で追加した gc.c のコメントの重複してた単語を削除しています。