Ruby 2.5.0はどれだけ高速化したか(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Ruby 2.5.0はどれだけ高速化したか(翻訳)

昨年11月に、Ruby 2.5.0 preview 1のスピード測定結果の記事を公開しました。そのときの結果はRuby 2.4よりかろうじて速い程度で、ほんのちょっぴりがっかりしました。しかし、2.5.0の完成直前になってパフォーマンス上極めて重要なパッチが登場し、最終的な速度が大きく変わりました。

どれだけ速くなったのでしょうか?早速見てみましょう。

グラフでの概要

グラフが見られればいいんですよねきっと?私もです。以下はRails Ruby Bench(RRB)で測定した総時間のグラフです。ここでは、Discourse(Rails)のさまざまなリクエストを巨大なコンカレントサーバーを介してプッシュするのに要した時間を測定しています。

う、グラフの右側が短いんでないかい?

うぐ、グラフの右側が短いんでないかい?

総じて悪くない結果です。では数値とパーセントの表にしてみたらどのぐらい速くなったように見えるでしょうか?

パーセンタイル Ruby 2.4.3 Ruby 2.5.0 高速化(%)
0% 29.17 26.99 7.5%
10% 32.25 30.73 4.7%
50% 33.98 32.39 4.7%
90% 35.15 33.37 5.1%
100% 36.77 35.62 3.1%

ここで興味深いのは、数値が大きい(速度が遅い)実行結果ほど高速化の度合いが小さくなっている点です。こういう挙動はなかなか見かけません。ほぼすべての高速化で度合いの違いが生じた原因は、今回のパフォーマンスパッチのこの珍しい性質によるものであることはほぼ確実でしょう。この違いは多かれ少なかれ、Rubyバイトコード操作ごとの定数におけるオーバーヘッドによるものです。遅い実行に含まれるインストラクションの実行時間が長くなる(ようである)と、パフォーマンスの改善度合いが鈍ると考えられそうです。だいたいご覧のとおりの結果です。

「なるほど、でもトータルではどうなの?Ruby 2.5.0は結局どれだけ速くなったの?」と質問されたときのために、実行時間ごとのパーセンタイルではなく、スループットで取り急ぎ回答してみようと思います。スループットを見てみましょう。

測定 Ruby 2.4.3 Ruby 2.5.0 % Faster
スループット(平均値) 170.6 179.3 5.1%
スループット(中間値) 171.0 179.6 5.0%

「どれだけ速くなったの?」への回答は、「巨大なコンカレントRailsサーバーで5%スループットが高速化した」です。お友だちにも教えてやってください。

「もっと速くなる?」もちろんです。多数の小さな操作が高速化したことで、Railsのリクエストが最大で7.5%高速化したのを眼にしました。また、Koichiはいくつかのベンチマークで12%高速化したのを見たそうです。

「これでワイのRailsアプリはもっと速くなるの?」は、要するに「イエス」です。5%高速化します。互換性が失われる可能性の低い、静かめのアップグレードとしてはまずまずの出来です。コードはとにかく高速になりますし、うれしい機能がいくつも追加されています

関連記事

Ruby 3 JITの最新情報: 現状と今後(翻訳)

米国から見た日本のRuby事情(翻訳)

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ