ruby-trunk-changes 2020-07-07

今日はオブジェクトを格納する page のサイズをシステムのページサイズx4 よりちょっと小さくしていたオフセットをなくす変更などがありました。

[2c6512fe67] Jean Boussier 2020-06-27 21:10:42 UTC

file.c の rb_check_realpath_internal() という関数で Linux または macOS 以外の環境でのみ必要な stat(2) の呼び出しを preprocessor の分岐で括っています。 realpath(3) が成功してるからもう不要なはずということですが一部の環境(OS)では realpath(3) が実際には存在しないファイルパスを返す可能性があるためのチェックとのことです。 https://github.com/ruby/ruby/pull/3267

[b02a9584a1] git 2020-07-06 15:26:58 UTC

version.h の日付更新

[b06a4dc6f1] Aaron Patterson 2020-06-25 22:20:25 UTC

オブジェクトの実体である struct RVALUE を配列状につめこむ heap の領域(page)を確保する時に、malloc() が返すアドレスの前にメタデータを格納する領域を使うという前提で REQUIRED_SIZE_BY_MALLOC という定数で定義しているサイズぶん page のサイズを減らしてたのをやめています。ひとつには jemalloc() を使っている場合はメタデータは専用のページに作られるため単に無駄な隙間になってしまうというのと、glibc の実装の場合は確保した領域が OS 管理の page をまたがってしまうことがある(このため ruby のメモリ管理上の page が OS の page を余分に多くまたがってしまうのでパフォーマンス悪化に繋りうる)こと、さらに現在可能な場合は posix_memalign() などで OS の page に align して確保するようになっているため、実はメタデータが OS 管理側の page でひとつ前のところに乗ってしまって意図したようになってないという問題があるそうです。jemalloc() のほうはいいけど posix_memalign() の時の問題はこれでは解決しなさそうな気もするけどどうなんだろ。 [ruby-core:99000] [Feature #17002]