RubyのYJITコンパイラをShpifyが本番に投入、Railsアプリを高速化。Rubyも本格的にJITの時代へ

今回は「RubyのYJITコンパイラをShpifyが本番に投入、Railsアプリを高速化。Rubyも本格的にJITの時代へ」についてご紹介します。

関連ワード (代表、以内、記述等) についても参考にしながら、ぜひ本記事について議論していってくださいね。

本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。


ECサイト構築サービスを提供するShopifyは、Ruby 3.2に搭載されているYJITコンパイラを同社の本番環境に投入し、Railsベースで構築された同社サービスの性能改善を実現したと明らかにしました。

YJITコンパイラはShopifyが開発を進めてきたRubyのJITコンパイラで、大規模なRailsアプリケーションにおいてより高い性能向上を目指して開発されたものです。

一昨年末のRuby 3.1でメインラインにマージされ、昨年末に登場したRuby 3.2ではさらに改善が進められて本番環境にも耐えるようになったと説明されており、今回Shopify自身がそれを実証した形になりました。

If you’re a keen Rubyist, you may have heard that YJIT is production-ready in Ruby 3.2. It’s faster and more efficient of course, but the improvements don’t stop there. Check out @Love2Code’s post to learn more. https://t.co/YDtNYWmGRM

— Shopify Engineering (@ShopifyEng) January 17, 2023

Rubyの性能向上で役割を果たしてきたJITコンパイラ

Rubyはシンプルで生産性の高いプログラムを書くことができることや、Ruby on Rails(Rails)と呼ばれるWebアプリケーションを容易に構築できるフレームワークを備えていることで人気のプログラミング言語です。

一方で以前から実行速度が遅いと指摘されることが多く、これに対してRuby 3ではRuby 2の3倍の実行速度にするという「Ruby 3×3」(ルビースリーバイスリー)構想の下で高速化が進められてきました。

2018年末にリリースされたRuby 2.6ではJITコンパイラ(MJIT)を初めて実験的に搭載しました。

JITコンパイラは実行時コンパイラとも呼ばれ、プログラムをインタプリタで実行するのと並行してコンパイルを行い、ネイティブバイナリを生成し、それを実行することで実行速度を向上させる技術です。

2020年末にリリースされたRuby 3ではこのMJITなどの成果によってCPU負荷中心のベンチマークで3倍の性能が達成されたことが示されました。

参考:Ruby 3.0正式版リリース。「Ruby 2の3倍速」到達、型の記述、スレッドセーフな並列処理など新機能

しかしMJITはRailsの大規模アプリケーションなどでの性能向上に十分な効果が発揮できていないとの評価もありました。

そこで登場したのが、Railsを大規模に利用しているShopifyが、Railsでの性能改善にフォーカスをして開発を進めてきたJITコンパイラである「YJIT」です。

YJITは2021年末に登場したRuby 3.1でメインラインにマージされ、昨年末(2022年末)に登場したRuby 3.2で本番環境に耐える実用段階に到達したと発表されました。

参考:WebAssembly版Rubyが正式に登場、YJITが実用段階に。「Ruby 3.2.0」正式リリース

JITは実行時にコンパイルを行う仕組み上、インタプリタよりも多くのメモリを要します。Ruby 3.2のYJITでは、Ruby 3.1のYJITに比べてメモリのオーバーヘッドが約3分の1に削減されるなどの改善が行われたことで、本番環境で使えるようになったと説明されています。

Ruby 3.2のインタプリタと比較して5%から10%の性能向上

ではShopifyがRuby 3.2のYJITを本番環境に展開したことで、どのくらい速度向上があったのでしょうか。

Shopifyのインフラチームに所属するシニアスタッフエンジニアのJean Boussier氏は、Ruby 3.2にアップデートしたところ、YJITなしの状態で平均でシステムのレイテンシが6.6%改善したことを、、1月13日付けのツイートで明らかにしています。

つまりYJITなしのRubyの実行速度もRuby 3.2で改善されているわけです。

Just finished upgrading Shopify's monolith to Ruby 3.2.0 today.

Average latency: -6.6%
Median latency: -5.1%
p99 latency: -6.7%

And that's without YJIT.

— Jean Boussier (@_byroot) January 12, 2023

その上で、Shopifyが今回公開した記事「Ruby 3.2’s YJIT is Production-Ready (2023)」では、本番環境において時間帯による違いはあるものの、Ruby 3.2のインタプリタに対してYJITは5%から10%の高速化を実現していることが示されています。下記はその記事で紹介された本番環境での性能比較グラフです。

fig

Shopify CEOのTobi Lutke氏もYJITによって10%以内の高速化が実現したと昨年(2022年)12月にツイートしています。

All storefront requests are now served by the latest version of ruby with YJIT enabled! We are seeing ~10% speedups across the board.

YJIT that has been developed by @Love2Code's and team at Shopify. pic.twitter.com/UiM2PIZJ51

— tobi lutke (@tobi) December 21, 2022

前述の通りRuby 3.2でインタプリタの性能も向上しているため、YJITが含まれない以前のバージョンのRubyとRuby 3.2のYJITを比較するとすれば、10%かそれ以上の性能向上となりそうです。

アプリケーションはそのままで、YJITによってサービス全体の性能が10%程度向上するのであれば、アプリケーション開発者にとってもインフラチームにとっても一定の成果があるといえるのではないでしょうか。

JavaやJavaScriptに代表されるいくつかのプログラミング言語は、仮想マシンやインタプリタによるコードの実行からJITコンパイラの採用によってさらなる実行性能の向上を実現してきており、いまもその進化を続けています。

RubyにおいてもMJITとYJITのJITコンパイラが、これからのRubyの実行性能の向上に大きな役割を果たしていくものと期待されます。

COMMENTS


Recommended

TITLE
CATEGORY
DATE
企業が使うPCの43%は「Windows 11」の要件を満たしていない
IT関連
2022-10-19 22:54
気象庁、「アメダス」などの中枢システムを刷新–仮想化基盤上で統合運用を開始
IT関連
2021-04-15 05:02
新しい「Bing」、回答のトーンを選べる機能を一部ユーザーに提供
IT関連
2023-03-02 14:10
帝人と富士通、独自転車メーカーとリサイクルを環境価値化したビジネスモデル構築
IT関連
2023-01-21 11:34
理研ら国際共同研究チーム、医療ビッグデータとコンピューター科学を活用し卵巣がんの新しい治療標的を特定
IT関連
2022-02-09 04:56
企業の採用担当者は経歴よりもスキルを重視
IT関連
2023-06-15 03:33
IT系コミュニティを不審者からどう守るか/GitHubが無停止でMySQLをアップグレード/開発中のヨドバシAPIが目指す機能、ほか。2023年12月の人気記事
編集後記
2024-01-05 14:21
フレッシュネス、シフト管理ツール「らくしふ」導入で人件費の超過を防止
IT関連
2024-08-17 01:13
業種特化型「Salesforce Industry Cloud」の特徴と機能–迅速な「Time to Value」を実現
IT関連
2022-09-15 02:20
コロナ禍で一時的に増えたPC出荷、再び減少に転じる
IT関連
2023-08-30 02:37
ベラルーシ当局がロシア語版ウィキペディアの主要編集者を逮捕、ロシア「フェイクニュース法」に抵触?
IT関連
2022-03-15 16:48
「Linux」の安全性を高めるために実践してほしい7つの基本事項
IT関連
2023-10-14 03:05
サテライトオフィス、個人情報を含むファイルを検知/暗号化するサービスを提供
IT関連
2022-10-13 04:00
リコーと九州大学共同開発によるフィルム形状の有機薄膜太陽電池のサンプルが9月提供開始、「充電のない世界」目指す
EnviroTech
2021-08-20 09:37