今日は主に MJIT の JIT コードの入れ替えの頻度を落としてオーバーヘッドの大きい処理を頻繁に実行してしまわないようにするチューニングや、特殊変数 $KCODE の削除などがありました。
[039ba387aa] Nobuyoshi Nakada 2020-11-27 12:36:12 UTC
2db2fb9f6c742d5bd0019ccd11c7a375e1b12c0b の Ractor 毎の乱数生成器のための構造体 rb_random_t を void* の型で取り回してたのを struct にタグをつけて内容は不可視な構造体ポインタとして扱うように修正しています。
[f0bfa266d7] Benoit Daloze 2020-11-27 13:55:29 UTC
spec/mspec に upstream からマージしています。
[f02d2f82bf] Benoit Daloze 2020-11-27 13:55:31 UTC
spec/ruby に upstream からマージ。
[ddb1736bfc] Benoit Daloze 2020-11-27 14:47:17 UTC
spec/ruby に upstream から再度マージ。
[16dab6b692] Takashi Kokubun 2020-11-28 05:28:57 UTC
MJIT が JIT コンパイル対象のコードを単一の C ソースコードにまとめて 1つの共有ライブラリにビルドする処理(GC.compact とまぎらわしいですが JIT compaction と呼ばれている)の処理の途中に JIT コードをメモリ上から外す unload_units() の処理を避けるようにしていたのを、unload_units() の実行を mjit_worker のスレッド側で実行するようにして競合しないようにしています。このため mjit.c から関連する関数を mjit_worker.c に移動しています。JIT compaction 中であることを示す in_compact 変数は削除して、かわりに unload 処理の要求を示す unload_units_p という変数を追加してスレッド間の通信のために使っています。
[46a49536e3] git 2020-11-28 05:39:27 UTC
version.h の日付更新
[12866b0d31] Takashi Kokubun 2020-11-28 05:52:22 UTC
MJIT の JIT compaction 処理を行う compile_compact_jit_code() でまとめようとしてた rb_mjit_unit の ISeq が GC で回収済みだった場合にデバッグログを出力するようにしています。
[d80226e7bd] Takashi Kokubun 2020-11-28 06:07:02 UTC
unload_units() で JIT コードから外す rb_mjit_unit を選ぶロジックを変更して、呼び出し回数で下位10%をかならず外すようになってたのを充分な呼び出し回数があれば外さないようにしています。
[276f6a225d] Jeremy Evans 2020-11-27 05:16:19 UTC
Time.new の秒のところに Rational を渡してさらに timezone を指定するオブジェクトも渡した時のテストを追加しています。コミットログをみると Time.new の不具合修正っぽいんですけどこのコミットではテストメソッドの追加だけで、修正は次の 95bef7b69a6fb42687a6200b338060be307259f5 に分離されてそうですね。
[95bef7b69a] Nobuyoshi Nakada 2020-11-27 07:13:42 UTC
ということで 276f6a225d18561cbe5282b798cb4e416c66079f で追加したテストに対応する(?) Time.new の修正です。
[122cd35939] Takashi Kokubun 2020-11-28 06:46:01 UTC
d80226e7bd801fcbccf71f19ba373b7baf71a49e で MJIT の JIT コードをメモリ上からはずす unload 処理の基準を変更したため外されにくくなって unload_units() の呼び出しがより頻繁になると考えられるので、実際に処理するのを cache サイズ / 10 の回数ごとにまで間引くようにしています。
[2a7e858617] Takashi Kokubun 2020-11-28 07:13:17 UTC
122cd35939ddf8ef7bfa17ad75570c01d0cf06ab の MJIT の unload_unit() 呼び出しの頻度変更に対応してテストを修正しています。
[096f54428d] Takashi Kokubun 2020-11-28 07:25:31 UTC
MJIT の JIT compaction もコストが高いのであまり頻繁に実行してしまわないようにしています。
[3378a1ccef] Takashi Kokubun 2020-11-28 07:46:10 UTC
096f54428d8000cccce430022784cb0e7cd31cb4 による MJIT の JIT compaction の頻度変更にテストを追随させています。
[14453a256d] Lars Kanis 2020-11-26 10:15:37 UTC
Windows 環境で環境変数を取得するのに getnev() ではなく w32_getenv() という API を直接利用するようにしています。元々マクロで w32_getenv() を呼ぶようになってましたが、codepage の指定の引数 cp が暗黙のうちに渡されるようになっていてわかりにくいのでそれをやめようということみたいです。
[3db21cf25f] Nobuyoshi Nakada 2020-11-28 09:39:57 UTC
14453a256d58b11b06d432e2a4388d95aac298d6 の続きで win32/win32.c で getenv() を w32_getenv() を使うように書きかえるマクロ定義を削除してたのを復活させています。 win32/win32.c は dln_find.c を #include していて、この中の getenv() も差し替えるためにこのマクロは必要だったそうです。dln_find.c の中の getenv() も書きかえるわけにはいかないのかな。
[85aabef023] Nobuyoshi Nakada 2020-08-31 13:13:34 UTC
特殊変数 $KCODE は既に obsoleted になっていて代入や参照すると警告が出るようになってましたが、それも消してただのグローバル変数として扱われるようにしています。 [ruby-core:99785] [Feature #17136]
[fd329e24c5] Nobuyoshi Nakada 2020-11-28 09:52:22 UTC
85aabef023e1a2e81c308ad98741137c73d4d80b の特殊変数 $KCODE の削除について NEWS に追記しています。 [ruby-core:99785] [Feature #17136]