Rubyの実装数が増加しているので、テスト一式を用いた互換性の比較だけでなく(RubySpecプロジェクトについてもっと読む(参考記事))、様々な実装のベンチマーク試験も興味深い。
Antonio Cangiano氏は(リンク)Ruby Benchmark Suite(Rubyベンチマークスイート)プロジェクトを開始した。ベンチマークスイートの詳細や(リンク)、入れる予定にしているコードの種類、プロジェクトへの貢献方法をCangiano氏に聞いた。
Ruby Benchmark Suiteがどのような計画になっているのかを訊ねた。
Ruby実装のパフォーマンス測定に使用できるベンチマークの標準セットが今のところ存在しないので、Ruby Benchmark Suiteを思いつきました。Ruby 1.9のレポジトリから取ってきたベンチマーク一式が便利だったので、前回のシュートアウトではこのベンチマークを使用しました。しかし、最終的なパフォーマンス評価をこのベンチマーク試験のみから導き出すのは明らかに不適切です。ある仮想マシンが別の仮想マシンより高速に空のループを実行するからといって、システム管理スクリプトやRailsアプリケーションを動作させた場合のこのマシン2基の比較については、実際のところ、ほとんど分からないのですから。
ですから、標準ベンチマークの目的は、実世界のRubyアプリケーションで一般に見られる様々な側面を表現するに十分なほど、多方面をカバーすることです。現在、我々は以下のカテゴリーにベンチマークを分類しています。
これまでに受け取ったフィードバックや、代替Rubyの実装開発者(GemStone、Microsoft、Engine Yard、Sunの開発者など)が寄せた関心から、このプロジェクトは高い確率で順調に進行すると思います。
- core-features (コア機能):厳密に言語機能のみを使うベンチマーク。基本的な演算以外にライブラリ・クラスをほとんど必要としない。
- core-library (コアライブラリ):Rubyのコアライブラリ・クラスとメソッドに限定して機能させるベンチマーク。
- standard-library (標準ライブラリ):Rubyの標準ライブラリ・クラスとメソッドに限定して機能させるベンチマーク。
- micro-benchmarks (マイクロ・ベンチマーク):普遍的ですが、現実のアプリケーションとなるにはまだほど遠い小型のベンチマーク。例として、The Computer Language Benchmarks Gameや伝統的なアルゴリズムからインポートしたベンチマークが挙げられます。
- real-world (実世界):最も興味深いカテゴリーであり、実世界のプログラムから抽出された可能性もあるマクロ・ベンチマークが含まれる。たとえば、ログを処理する優れたスクリプトなどは、このカテゴリーのフォルダに入れるのにぴったりである。
ベンチマークの整理方法について、Cangiano氏は次のように答えている。
現在のところは、独立したベンチマークが複数あるだけですが、こうしたベンチマークを動作させて、CPU時間やメモリ使用などの測定基準を報告できるようなスクリプトを入れる予定です。次回のシュートアウトでは実行時間のみの分析となる可能性が高いのですが、長期計画では、サーバーで特に重要な側面であるメモリ消費も視野に入れています。
Tim Brayは(リンク)すでに自らのRX Ruby tokenizerを復活させて(リンク)、ベンチマークスイートに貢献している。Cangiano氏はさらに他の人々からの貢献も求めている。
このプロジェクトはオープンソースであり、MITライセンスでリリースされているので、誰でも自由に貢献できます。現在はGitHubで(リンク)ホストされており、常連のコントリビューターならレポジトリへの書き込みアクセスも許可されるようになるでしょう。GitHubやGitにあまり詳しくない方々は、いつでも私宛に電子メールでベンチマークをお送りいただくか.com)、私たちのGoogleグループに直接お送りください(リンク)。
最良のベンチマークは常にあなた自身のプログラムですから、最もありがたい貢献は、タイプ(テキスト処理、XML処理、計算など)に関係なく、実際のプログラムから抽出したものです。前述したログプロセッサは、アイデアの1つにすぎません。たとえば、実世界のフォルダにはBorasky氏の行列ベンチマークが入っていますが、その理由は、このベンチマークは本質的に、数値演算分野の現実のコードだからです(その事実がなかったら、高速のCライブラリを代わりに選ぶ人が多いでしょう)。
伝統的なアルゴリズムやその他のマイクロ・ベンチマークも歓迎はしますが、すでにそれとなく申し上げたように、私たちが必要としているのは、こうした全仮想マシンが実世界でいかに機能するかを指し示す上で、より優れたベンチマークなのです。なぜなら、実際のアプリケーションが(たとえば)平均50%しかパフォーマンス向上を示さないような場合に、「YarvはRuby 1.8.6の3倍高速」と主張しても意味がないからです。余談になりますが、標準ライブラリ・クラスとメソッドの網羅範囲を改善する必要があるので、標準ライブラリのフォルダにも愛の手を差し伸べてください。
ベンチマークスイートがRubyのコアライブラリと標準ライブラリに専念するのか、あるいは外部ライブラリもベンチマークするのかということも、興味深いところである。
スイートの巨大化は希望していませんが、少なくともある程度までは外部ライブラリのベンチマークを予定しています。多数のRubyプログラマーがActiveRecordやActiveSupportなどのライブラリに依存していることを念頭においておく必要があり、そして各VMがこうしたライブラリといかにうまく機能するかを確かめられるようにしたいと思っています。実のところ将来のシュートアウトでは、RailsやMerbのような人気フレームワークをテストすることさえ、悪くはないでしょう。成熟度の低いVMはこうしたフレームワークを動作できませんが、代替Rubyの実装評価に興味を持っているユーザーにしてみれば、これも重要な情報の一つになります。
前回のRubyシュートアウトが行われたのは(リンク)2007年12月なので、次回がいつごろになるかを聞いてみた。
6月24日のシュートアウト向けにテストを開始する予定で、その結果は遅くとも30日までに私のブログで発表することにしています。私は最近、自由時間の大半をWroxから出る書籍Ruby on Rails for Microsoft Developers(Microsoft開発者のためのRuby on Rails)に費やしているので、24日というのは任意の日付ではありません。第3章の締め切り翌日にあたります。Ruby 1.8.xやRuby 1.9、JRuby、Rubinius、IronRuby、MacRuby、Ruby Enterprise Edition、MagLevをMac OS X(サポートされたら)、Linux(32と64ビットの両方)、Windows Vista上でテストするなら、テストに数日要することになりますが、30日までには終了できるでしょう。
原文はこちらです:http://www.infoq.com/news/2008/06/introducing-ruby-benchmark-suite