CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
みなさんこんにちは。今回は、Rubyのバージョンアップによって、Railsのスピードが改善されたのかについてのブログ記事をご紹介します。
Ruby 2.7.0's Rails Ruby Bench Speed is Unchanged from 2.6.0
http://engineering.appfolio.com/appfolio-engineering/2019/12/27/ruby-270s-rails-ruby-bench-speed-is-unchanged-from-260
2019年12月25日現在、Ruby 2.7.0のリリースバージョンが公開されています。タイトルにもあるように、基本的には2.6.0と同じでした。
2.7.0シリーズは、速度がほとんど変化していない点で注目に値します。全体的に非常に安定しており、パフォーマンスの変化はほとんどありません。Rails Ruby Benchの結果に見られたのはほんのわずかな傾向のみで、それは多くて1%から2%の差であり、それ以上にはなりませんでした。
その他のニュースも大きな出来事ではありませんでした。2.6.0以上のRailsアプリでは、JITのパフォーマンスはほとんど変わりません。RailsでCRubyのMJITを使用することはお勧めしません。MJITのメインメンテナーである国分崇志も使用を勧めていませんでした。
こう考えた理由には多くの調査データがあるのですが・・・。簡単にまとめると、2.6.0と2.7.0でそれぞれ10,000個のHTTPリクエストを150回の試行してみたら、結果が測定の誤差の範囲内に収まりました。JITの場合、結果は完全に近いとは言えませんが、数パーセント以内とほぼ同様でした。つまり、大規模なRailsアプリに対してJITを有効にする必要はないということです。
2.7のプレビューのどこかで小さな高速化を見逃したかもしれないので、少し時間をとって確認してみたところ、最速の2.7 Rubyと最遅の2.7 Rubyの間に速度差がありましたが、非常に、非常に小さな速度差でした。そして、私の知る限り、どの変更によっても大きな速度差は生じておらず、2%にすら達しませんでした。時間をかけるにつれて傾向が弱まっただけでした。
つまり、Rubyはこれ以上速くなることができないということでしょうか? そんなことはありません。
Vladimir Makharov(CRubyのMJITの最初の作者)は、Ruby JITの新しいスタイルであるMirに取り組んでいます。国分崇志は、現在も既存のJITを調整しています。笹田耕一が対応しているVMサブシステムの大幅な改変について興味深いことを聞きました。新しい機能が追加されており、メモリの圧縮が行われているということです。
しかし、私は現時点では、パフォーマンスを高めない方針が選ばれた合理的な理由があると言えると思います。ここからの高速化のほとんどは、より手間がかかるか、大幅なアーキテクチャの変更が必要になるでしょうから。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes