高性能Ruby

GraalVMのRuby実装であるTruffleRubyで、Rubyコードを高速に実行します。

利点

small footprint advantage icon

Rubyコードの高速実行

TruffleRubyは、多くのCPU集約的なベンチマークにおいて、最速のRuby実装です。
improved security advantage icon

Rubyコードの並列実行

TruffleRubyはRubyスレッドを並列に実行し、Rubyコードに対するグローバルインタープリタロックがありません。
fast startup advantage icon

C拡張のサポート

データベースドライバなど、多くのC拡張がそのまま動作します。
ideal for containers advantage icon

Java、JavaScript、Python、Rとのオーバーヘッドの低い相互運用性

GraalVM Polyglot APIによって提供されます。
microservices advantage icon

標準Rubyとの高い互換性の維持

TruffleRubyは、標準Rubyランタイム(MRI/CRuby)との完全な互換性を目指しており、JRubyによって提供される追加機能も備えています。
clouds advantage icon

デバッガやモニタリングなどのツールの提供

ツールサポートには、プロファイラ、デバッガ、VisualVMなどが含まれ、複数の言語で動作します。

TruffleRubyとGraalVMによる高速なRuby

Optcarrotベンチマーク

TruffleRuby JVM CEはCRuby 3.0より4.2倍高速、TruffleRuby JVM EEはCRuby 3.0より8.2倍高速です。
optcarrot benchmark

Rubykonベンチマーク

TruffleRuby JVM CEはCRuby 3.0より7.3倍高速、TruffleRuby JVM EEはCRuby 3.0より10.6倍高速です。
rubykon benchmark
box

TruffleRubyは、Shopifyの主要な本番Rubyアプリケーションを、標準のRuby構成からほぼ完全に変更せずに実行できるため、パフォーマンスとツールの真の向上可能性を秘めたRuby実装への移行において、唯一現実的な選択肢となっています。

box
クリス・シートン
Shopifyシニアスタッフエンジニア

例の実行

require 'sinatra'
  require 'some-c-extension'
  get '/' do
    CExtensions.work!
  end

ネイティブ拡張を含む既存のコードをそのまま実行

TruffleRubyはRailsを実行でき、すべてのRubyGemsテストに合格した実装はCRuby以外ではTruffleRubyだけです。
array = Java.type('int[]').new(4)
  array[2] = 42
  p array[2]

RubyからのJavaへのアクセス

任意のJVMライブラリを再利用できます。
$ ruby --cpusampler app.rb
Name                       | Total Time |Opt%||  Self Time |Opt%
----------------------------------------------------------------
Optcarrot::PPU#main_loop   |3372ms 64.5%| 98%||1991ms 38.1%| 99%
Optcarrot::PPU#render_pixel| 309ms  5.9%| 80%|| 309ms  5.9%| 80%

$ ruby --inspect app.rb
Debugger listening on ws://127.0.0.1:9229/...
For help, see: https://graalvm.dokyumento.jp/docs/tools/chrome-debugger
E.g. in Chrome open: devtools://devtools/bundled/js_app.html?ws=127.0.0.1:9229/...

組み込みサンプリングプロファイラとデバッガを含む

VisualVM、Flamegraphなども含みます。

  $ ruby -ropen-uri -e 'URI.open("https://expired.badssl.com/", &:read)'
  cext.rb:1096:in `rb_exc_raise': certificate has expired (OpenSSL::SSL::SSLError)
  from openssl/ossl.c:300:in `ossl_raise'
  from openssl/ossl_ssl.c:1697:in `ossl_start_ssl'
  from openssl/ossl_ssl.c:1755:in `ossl_ssl_connect_nonblock'
  from net/protocol.rb:44:in `ssl_socket_connect'
  from net/http.rb:1021:in `connect'
  from ...
  from -e:1:in `main'
  

C拡張でのバックトレース

GraalVMはRubyとCコードをまとめて実行およびコンパイルできます。

実世界のアプリケーションへの影響

TruffleRubyによるGraalVMでのRackとRailsの高速実行

Just-in-Time(JIT)コンパイラを使用してRackおよびRailsアプリケーションを最適化することは困難です。たとえば、MJITは現在Railsを高速化しません。GraalVMチームはこの課題に取り組み、TruffleRubyはRails Simpler Benchmarksで他のどのRuby実装よりも高いパフォーマンスを実現しました。TruffleRubyがどのように実現し、RackおよびRailsアプリケーションにどのような最適化が役立つのかをご覧ください。

RubyアプリケーションにGraalVMを試してみましょう

お問い合わせ