RubyKaigi 2017 Keynoteレポート

Vladimir Makarovさん「3x3を達成するには,極めて大きな改善が必要だ」Towards Ruby 3x3 performance 〜RubyKaigi 2017 基調講演 3日目

この記事を読むのに必要な時間:およそ 2.5 分

ベンチマーク

MJITのパフォーマンスを計測するため,様々なマイクロベンチマークの結果から得られた数値と,Octcarrotを用いて,パフォーマンスがどのくらい改善されたかを計測しました。なお,本発表時点ではGraalVMのベンチマークを取ることができなかったため,未掲載となっています。

CPUの比較(Higher is better)⁠

ベンチマーク v2 MJIT GCC MJIT LLVM OMR JRuby 9k JRuby 9k-D Graal
Geomean Wall Time 1 6.18 4.02 1.09 1.59 2.48 1.83
Geomean CPU Time 1 5.55 3.67 1.09 1.33 1.88 0.69
Octcarrot FPS 1 2.83 2.94 1.20 1.14 2.38 -
Octcarrot CPU time 1 1.53 1.45 1.13 0.79 0.76 -

ご覧のとおり,Ruby 2.0だけでなく,既にJITが導入されているJRuby等と比較しても,MJITの最適化が非常に優れていることが分かります。また,興味深いことに,単純なマイクロベンチマークではGCCのコンパイラが優れていたものの,Octcarrotを用いた,より現実的なベンチマークではLLVMのほうが優れた結果が得られています。

画像

メモリ使用量の比較(Lower is better)⁠

ベンチマーク v2 MJIT GCC MJIT LLVM OMR JRuby 9k JRuby 9k-D Graal
Geomean Peak Memory 1 4.15 6.44 2.54 161.76 198.86 79.65
Octcarrot Peak Memory 1 1.16 1.16 1.41 10.67 17.68 -

コードを実行時に動的最適化するというJITの特性上,メモリ使用量が大きくなってしまうことは避けられません。したがって,いずれのケースでもJITが実装されていないRuby 2.0が最も省メモリで動作するという結果になっています。しかしながら,JITが実装された処理系の中では,MJITが非常に良い数値を残していることが分かります。

画像

まとめ

このプロジェクトはまだ始まったばかりです。make testを実行した場合はすべての結果が通るものの,RubySpecやmake checkはまだすべて通りません。また,Windowsでの動作も保証していません。このような事由から,Vladimirさんは「実装として成熟するにはあと1年ほぼかかるだろう」と述べていました。また,最も重要な最適化として,Cコードのインライン化(Ruby コードのインライン化でないことに注意)があります。これを将来的に実装する予定です。

インタビュー

講演後にお時間をいただき,Vladimirさんにインタビューを行いました。

—⁠—ご講演お疲れさまでした。現実的にみて,Vladさんの変更をMRIへマージするには,どのくらいの時間がかかるでしょうか。

私がMJITの実装を始めてから,まだ1年くらいしか経っていません。また,MRI自体のコードを理解する必要もありますから,とても時間がかかります。まず,分かっている問題を直すだけでも1年くらいはかかるでしょう。また,そこからさらにproduction環境でも安定して動かすことができるようになるには,さらに1年かかると予想しています。

—⁠—Stack machineからRTLへの変更だけであれば,どうでしょうか。

それだけでも十分に大きな変更です。JITの変更を取り入れるよりは小さくなりますが,それでもやはり1年くらいはかかると思います。

—⁠—既知の問題があるとおっしゃいましたが,具体的にどんなことがあるのでしょうか。

まず,多くの場合でRTLのほうが速いのですが,Stack machineのほうが速い場合や,互換性を確保しなければならない部分がたくさんあります。まず,このようなエッジケースを一つ一つ対応していく必要があります。また,セキュリティの問題もあります。

—⁠—まだまだ道は長そうですが,とても明るい未来が広がっていそうですね。ありがとうございました。

ありがとうございました。

著者プロフィール

西嶋悠貴(にしじまゆうき)

Ruby core コミッタ,did_you_mean gem 作者,kaminari gem メンテナ。Shutterfly,Pivotal NYオフィスに勤務後,現在はArtsy NYオフィスのシニアソフトウェアエンジニアとして開発に従事。

Twitter:@yuki24
GitHub:yuki24

コメント

コメントの記入