ruby-trunk-changes r29684 - r29698

今日は GC 関連のパフォーマンスの改善のコミットがありました。確かに make test-all のメモリ使用量が改善されているようで、物理メモリの少ない環境では実行時間もぐっと短縮されました。嬉しいです。

ko1:r29684 2010-11-04 20:15:36 +0900

ファイナライザは GC の sweep フェーズ完了後に実行していましたが、Lazy Sweep が導入された今はこれだと全ての sweep が完了するまで呼ばれなくなるので、slot_sweep
で slot をひとつ sweep する度に実行するようにしています。 [ruby-dev:42520]

ko1:r29685 2010-11-04 20:21:44 +0900

rb_sweep_method_entry を呼ぶのを after_gc_sweep から before_gc_sweep にして、少しでも早く解放するようにしています。

ko1:r29686 2010-11-04 20:27:09 +0900

r29685 で VM 構造体を取得するマクロを利用し忘れていたのを修正。

ko1:r29687 2010-11-04 20:46:26 +0900

run_finalizer で不必要な引数を削除しています。また条件文のなかの無意味な式を消しています。

ko1:r29688 2010-11-04 20:48:01 +0900

gc_finalize_deferred という関数を消しています。呼び元によって free_unused_heaps() を呼ぶ必要があるかどうかが異なるため展開されています。

ko1:r29689 2010-11-04 20:51:11 +0900

r29687 と r29688 の ChangeLog への追記です。

ko1:r29690 2010-11-04 21:06:08 +0900

GC.stress = true の時には lazy sweep するだけでなく make & sweep を完了させて解放できるメモリは解放した状態にするようにしています。
また rb_newobj_from_heap() という関数はリファクタリングされて rb_newobj() だけになっています。

tenderlove:r29691 2010-11-05 00:15:39 +0900

拡張ライブラリ ffi の extconf.rb の修正。Windows での libffi の検索する名前を追加しています。[ruby-core:32930]

svn:r29692 2010-11-05 00:15:42 +0900

version.h の日付変更

nobu:r29693 2010-11-05 00:26:18 +0900

ripper.c を生成する時に環境変数 RUBY をセットしておく必要があるらしく common.mk のルールに追記。

nobu:r29694 2010-11-05 00:39:07 +0900

IO#readlines や IO#each_line の limit 引数に 0 を渡すと無限ループになるので、例外を発生させるように修正。 #4024

nobu:r29695 2010-11-05 01:21:38 +0900

Process.spawn や popen でコマンドとして指定されたファイルが shebang(先頭の行の !#)がないなどで execv が ENOEXEC で失敗したら /bin/sh が指定されたものとしてリトライするようにしています。[ruby-core:32745] [EXPERIMENTAL]
判定方法が errno が ENOEXEC の時というものですが、ELF のアーキテクチャ違いとかもあるかも。バイナリファイルを sh に渡すと "cannot execute binary file" とか言われてしまって、却ってなにが悪いのかわかりにくくなったりしないでしょうか。

nobu:r29697 2010-11-05 12:18:03 +0900

r29695 で spawnv を使っている場所もリトライ時に execv を呼び出す関数を利用していたのでそこだけ spawnv を呼ぶように修正されています。

nobu:r29698 2010-11-05 12:23:10 +0900

r29695 で追加したテストは /bin/sh に実行可能ファイルが存在する時だけ実行するように if が追加されています。