ruby-trunk-changes r44281 - r44289

今日は RubyGems の不具合修正や VMGC まわりのパフォーマンスのための細々した修正が主でした。

ko1:r44281 2013-12-19 01:55:01 +0900

r44278 で test/runner.rb にデバッグ用の GC.verify_internal_consistency が入っていたのを削っています。 なんかぽつんと入ってるなーと思ってましたがコミットミスだったんですね。

tmm1:r44282 2013-12-19 03:11:54 +0900

gc.c の heap_get_freeobj() の冗長な代入を削除するリファクタリング

ko1:r44283 2013-12-19 10:49:59 +0900

benchmark/gc/gcbench.rb で GC::OPTS を表示しようとしていたところを古いバージョンの ruby で実行する場合を考慮して defined? で定数の存在チェックするようにしています。

ko1:r44284 2013-12-19 10:51:16 +0900

newobj_of() でオブジェクトを生成する時に klass を設定するのに Write Barrier つきの RBASIC_SET_CLASS() を使っていましたが obj は作ったばかりでまだ新世代のはずなので RBASIC_SET_CLASS_RAW() を使うようにしています。

tmm1:r44285 2013-12-19 11:27:36 +0900

vm_insnhelper.c の vm_call_iseq_setup_normal() で VM スタックの引数部分をクリアするための for ループで条件部に演算があったのをローカル変数を導入して単純な比較だけにしています。プロファイラによってここが hotspot になっていたので最適化したそうです。

drbrain:r44286 2013-12-19 12:05:37 +0900

RubyGems を更新しています。 gem install --ignore-dependencies で利用する Installer クラスを変更して高速化、install 時に specification ファイルを削除して無限ループ状態に陥るのを防ぐ修正、Solarisflock は書き込み用に open したファイルに対してでないと排他的ロックが取得できない(EBADF になる)ので読み書き可能モードでファイルを開くようにする修正などがありました。 [ruby-core:59178] [Bug #9257]

ko1:r44287 2013-12-19 14:04:55 +0900

gc.c の空き slot を取得する関数でも性能のために空き slot のある page を取得する heap_get_freepage() を、次の page から空き slot を取得する(あれば)関数 heap_get_freeobj_from_next_freepage() に変更してよく取るパスを軽くしているそうです。なんですが眺めててもどこが要点だったのかよくわからず。多分ほとんどの場合は heap->freelist に空きがあるのですぐ p を返して終わりだと思うのですけど、その場合の処理はあんまり変わらないような気がするので、次の page を辿るところが変わってるのかなぁ。関数呼び出しの回数も変わらないと思うし。

naruse:r44288 2013-12-19 16:32:54 +0900

r44234 で test/ruby/test_alias.rb に追加した envutil.rb の require_relative のファイル名が間違っていたのを修正しています。

a_matsuda:r44289 2013-12-19 16:58:36 +0900

標準添付ライブラリ rexml の rdoc コメントの typo 修正。 matchs → matches