ruby-trunk-changes 2023-05-26

今日は主に RGenGC のパフォーマンス改善のために young のオブジェクトを old に promote するのを遅らせる変更や non-blocking Fiber や IO まわりのビジーループ回避の修正などがありました。

[e87f6c899e] Peter Zhu 2023-05-18 13:20:56 UTC

RGenGC で旧世代(old)のオブジェクトから参照されている WB-protected なオブジェクトを mark 時に即座に old に昇格させずに、何度か minor GC を生き残った時にはじめて昇格させるようにしているようです。 Shopify のアプリでパフォーマンスの改善がみられたとのこと。 struct heap_page のメンバーに remembered_bits を追加して marking_bits とは別に old からの参照があった時のフラグを管理してこちらを promote 時に利用するようにしているようです。がどこで promote するまでの回数を制御しているんだろう? https://github.com/ruby/ruby/pull/7821 [ruby-core:113513] [Feature #19678]

[d83f32c34b] Sutou Kouhei 2022-09-13 00:57:42 UTC

rubygems で gem install で rubygems 自体の plugin をインストールした時にその場ですぐロードして続くサブコマンドの処理ですぐにその plugin の機能が有効になるようにしているようです。

[3dae55ea2f] "dependabot[bot]" 2023-05-26 02:59:29 UTC

GitHub Actions の workflow で利用している github/codeql-action アクションのバージョンを更新しています。

[8e1abef469] KJ Tsanaktsidis 2023-05-18 23:12:10 UTC

non-blocking Fiber で利用する Scheduler の利用時にビジーループに陥る場合がある不具合を修正しています。とても長いコミットログを読むと FreeBSD で特有な現象だったみたいです。 https://github.com/ruby/ruby/pull/7864 [ruby-core:113520] [Bug #19680]

[8c4da473de] KJ Tsanaktsidis 2023-05-26 02:11:42 UTC

子プロセスを Process.wait で待っている時の例外処理のテストで FreeBSD でのみタイムアウトを延ばしていたのをやめています。8e1abef46951c56ea4c9d164d33be5858e1e758d の修正で不要になったということかな。

[54a74c4203] KJ Tsanaktsidis 2023-05-26 02:02:30 UTC

構造体 struct rb_thread_cond_struct の宣言を thread_win32.h からプラットフォーム非依存の include/ruby/thread_native.h に移動しています。

[66871c5a06] KJ Tsanaktsidis 2023-05-21 12:29:16 UTC

IO#close などで file descriptor を close(2) しようとした時にその fd が別の Thread で利用中の場合にそれを待つという機構がビジーループになる可能性があった不具合を修正しているようです。これも主に FreeBSD でみられる現象だったようです。なんかこれ性能のためにわざと conditional variable を使わなかったんだったような気もちょっとしますがどうだったかな。 svn 時代の r57224 のあたりの変更だと思いますが。 https://github.com/ruby/ruby/pull/7865 [ruby-core:113520] [Bug #19680]

[d1628feaaf] KJ Tsanaktsidis 2023-05-26 02:10:45 UTC

IO の gets と close を競合させるテストでのタイムアウト値を短くしています。 66871c5a06d723f8350935ced1e88d8cc929d809 の修正により早く終わるようになったため。

[cc698c6cc2] git 2023-05-26 05:51:35 UTC

thread.c のインデントのタブを空白に展開しています。