カナダShopifyは、同社がサービスを提供する本番環境で、プログラミング言語「Ruby」のJITコンパイラ「YJIT」を使い始めたと1月17日(現地時間)に発表した。Shopifyは世界でeコマース・サービスを提供しており、そのシステムの構築にはRubyと「Ruby on Rails」フレームワークを主に使用している。
YJITは、Shopify社内のチームが2020年に開発を始めたJITコンパイラ。その時点ですでにRubyには「MJIT」と呼ぶJITコンパイラが備わっていた。しかしMJITは小規模なベンチマーク・プログラムでは高い性能を発揮したが、実際に多くの人が使用しているプログラムではほとんど効果を発揮できていなかった。YJITは2021年12月に公開となったRuby 3.1.0で、実験的な新機能として提供が始まり、2022年12月に登場したRuby 3.2.0で実験的な段階から脱し、本番環境や製品に投入できる(Production-ready)機能となった。
Shopifyは、Ruby 3.2.0が登場して間もなく、本番環境のサーバー・クラスタにRuby 3.2.0とYJITを投入した。その結果、インタプリタに比べて処理性能が5〜10%(時間帯によって変動)向上したという。Shopify社内のYJIT開発チームがベンチマーク・プログラム「railsbench」を使って検証したところ、Ruby 3.2.0のYJITは、同じくRuby 3.2.0のインタプリタに比べて38%ほど処理性能が高いという結果が出たとしている。しかし、Ruby 3.2.0ではインタプリタも高速化している。そこで、YJIT開発チームがさまざまなデータを集めて検証したところ、Ruby 3.2.0のYJITは、Ruby 3.1.3のインタプリタに比べて57%も処理性能が高いという結果が出ている。
Ruby 3.2.0のYJITでは、メモリ使用量を削減するためにさまざまな改善を加えた。元々JITコンパイラは、インタプリタに比べて多くのメモリを消費するものだ。Shopify社内のYJIT開発チームも、Ruby 3.1.xのYJITが消費するメモリ量に満足しておらず、Shopifyの本番環境にはまだ使えないと考えていた。そして今回の改善の結果、Ruby 3.1.xのYJITに比べてメモリ使用量が3分の1程度までに削減できた。
そして今回のYJITでは、C言語で記述していたソース・コードを、Rustで書き直した。この点について開発チームは、2つ理由を挙げている。一つ目は、C言語では得られない安全性を得るため。もう一つは、YJITの開発が進み、ソース・コードがどんどん複雑になってきたため、その複雑さに対処できる言語としてRustを選んだというものだ。
さらに、Ruby 3.2.0のYJITでは、64ビットArmアーキテクチャーのプロセッサに対応した。以前はx86-64アーキテクチャーのプロセッサに対応するmacOSとLinuxでしか使えなかったが、新しいYJITはAppleの「M1」シリーズや「M2」シリーズ、Amazon Web Servicesの「Graviton 1」「Graviton 2」、そしてRaspberry Piでも動作するという。
- 関連リンク
この記事は参考になりましたか?
- この記事の著者
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です