ruby-trunk-changes r63926 - r63952

今日は主に benchmark 関係の変更がありました。

k0kubun: r63926 2018-07-10 22:05:29 +0900

r63900 で benchmark の下の YAML ファイルに変換したベンチマークスクリプトを一部(vm1_* と vm2_* 以外) .rb ファイルに戻しています。 ko1 さんの好みにあわせたとのこと。また common.mk で benchmark-each が .PHONY ターゲットに並べてるところまだ残ってたので削除しています。

svn: r63927 2018-07-10 22:05:31 +0900

r63926 で復活したファイルの svn property 設定。

k0kubun: r63928 2018-07-10 22:08:40 +0900

benchmark/ の下のベンチマークスクリプトファイルの bm_ の prefix を削除しています。

k0kubun: r63929 2018-07-10 22:16:55 +0900

make benchmark で実行するベンチマークをファイルの辞書順にソートして実行するようにしています。

k0kubun: r63930 2018-07-10 22:36:44 +0900

benchmark/README.md で gem の名前が benchmark-driver になっていたので benchmark_driver に修正しています。 benchmark-driver でも本家に dependency を持たせた alias 用の gem があってそれでも動くみたいですが。

k0kubun: r63931 2018-07-10 22:41:13 +0900

benchmark/README.md に benchmark-driver --help の出力を貼り付けています。

k0kubun: r63932 2018-07-10 23:16:57 +0900

benchmark/lib/benchmark_driver/ 配下の benchmark_driver の plugin で BenchmarkDriver::Runner::Xxx#metric メソッドを定義するようにしています。benchmark_driver の作りがわかってないのでどう効くのかわかりませんが make benchmark で OPTS に -o で出力フォーマット指定した時に効くようにするみたいです。

k0kubun: r63933 2018-07-11 00:01:27 +0900

benchmark/lib/benchmark_driver/runner/ の benchmark_driver の plugin にさらに cstime/cutime/stime/utime/total などの CPU 時間で測定する runner も追加しています。

svn: r63934 2018-07-11 00:01:28 +0900

version.h の日付更新。

svn: r63935 2018-07-11 00:01:29 +0900

r63933 で新規追加されたファイルの svn property 設定。

k0kubun: r63936 2018-07-11 00:06:59 +0900

r63926 で一部の YAML ファイルを .rb ファイルに戻したので、r63926 の GC 絡みのベンチマークの内容をコピーしてたのを revert して require に戻しています。

k0kubun: r63937 2018-07-11 00:44:45 +0900

benchmark/lib/benchmark_driver/output/driver.rb という benchmark_driver の output plugin を追加して旧 benchmark/driver.rb の挙動を真似るものを追加しています。 ko1 さんリクエストによるものとのこと。

svn: r63938 2018-07-11 00:44:46 +0900

r63937 の新規追加ファイルの svn property 設定。

k0kubun: r63939 2018-07-11 00:49:42 +0900

benchmark/README.md にまだ benchmark-driver という間違った gem 名が残ってたので修正。

k0kubun: r63940 2018-07-11 00:51:29 +0900

benchmark/README.md のサンプルのベンチマークスクリプトが .yml から .rb に戻されたので記述も修正しています。

k0kubun: r63941 2018-07-11 00:58:52 +0900

benchmark/ の app_erb と erb_render を .rb から .yml にまた戻しています。YAML 記法を使ったほうが正確に測定できるとのこと。

k0kubun: r63942 2018-07-11 01:03:51 +0900

r63941 で benchmark/README.md のサンプルも変更していましたが不十分だったので追加修正。

naruse: r63943 2018-07-11 01:10:57 +0900

rb_scan_args_xxx() 系の関数/マクロ定義で clang の diagnose_if という attribute が使えたら rb_scan_args_set() でこれを利用して静的に判定できる引数のチェックを行ってエラーメッセージを改善するようにしています。

k0kubun: r63944 2018-07-11 08:56:57 +0900

benchmark/README.md のサンプルでベンチマークファイルが .yml と .rb の混在になっているので両方混ぜるようにしています。

k0kubun: r63945 2018-07-11 09:34:32 +0900

利用する benchmark_driver のバージョンを 0.14.6 に更新して、benchmark/README.md に貼られてる --help の出力も更新しています。うーん、これ貼り付けなくても --help してみてね、でいいんじゃないかな。

normal: r63946 2018-07-11 17:33:32 +0900

rubyspec で一時ファイルの後始末が漏れてたものがあったので Dir.mktmpdir や Tempfile.create のブロックつき呼び出しを利用して後始末するようにしています。一時ファイル作りすぎて tmpdir の inode が枯渇したらしくて、消すのも大変だったろうな。

normal: r63947 2018-07-11 17:33:37 +0900

test/ の配下の Tempfile と Dir.mktmpdir のテストでも一時ファイルの leak があったみたいで後始末するように修正しています。

normal: r63948 2018-07-11 17:49:18 +0900

USE_SLEEPY_TIMER_THREAD というマクロで不要な時に timer thread を定期的に起こすのをやめる実装が今は(可能なら)デフォルトになっていますが、これをなぜかビットフラグにして TIMER_IMPL という定数マクロに定義するようにしています。これはなにがしたいんだろう……と思ったのですが、コミットログを読むと timer thread を thread を使わない実装にする(ちょっとなに言ってるのかわかりませんが)というのがやりたいらしくて、その時にフラグを追加したいので今のうちにビットフラグにして1つの定数マクロで timer thread の実装についての情報をまとめられるようにした、ということみたいです。
ちなみに USE_SLEEPY_TIMER_THREAD の実装ってそんなに昔じゃなかったと思ってたんですけど、今回このマクロの定義の歴史を調べてみると 2.0.0 の頃には既に存在してて、思ったよりも昔からありました。

normal: r63949 2018-07-11 17:49:23 +0900

timer thread との通信用の pipe の作成で rb_cloexec_pipe() がエラーになった時に警告メッセージが呼び元でも重複して出ていたので setup_communication_pipe_internal() の中に一本化しています。

normal: r63950 2018-07-11 18:47:36 +0900

IO のテストで CPU 負荷が関係するもの? を実行する時に他に Thread が存在していたら skip するようにしています。 [Bug #14906]

nobu: r63951 2018-07-11 18:56:49 +0900

array.c の rdoc 用コメントのメソッド呼び出しやブロックのかっこの前後の空白の記法について統一するようにしています。 https://github.com/ruby/ruby/pull/1910
うむ、個人的にはブロックパラメーターの書きかたはこのほうが好み。

normal: r63952 2018-07-11 19:28:02 +0900

IO.copy_stream のテストで Thread を起動するもので終了時に Thread#join してなくて終了を待っていないものがあったので join して後始末するようにしています。