高性能 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 性能和工具能力的 Ruby 实现的唯一现实选择。

box
Chris Seaton
Shopify 高级职员工程师

尝试示例

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

运行现有代码,无需更改,包括原生扩展

TruffleRuby 可以运行 Rails,并且是除了 CRuby 之外唯一通过所有 RubyGems 测试的实现。
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.java.net.cn/docs/tools/chrome-debugger
E.g. in Chrome open: devtools://devtools/bundled/js_app.html?ws=127.0.0.1:9229/...

包含内置采样分析器和调试器

以及 VisualVM、火焰图等。

  $ 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 代码。

为实际应用带来改变

在 GraalVM 上使用 TruffleRuby 更快地运行 Rack 和 Rails

使用即时 (JIT) 编译器优化 Rack 和 Rails 应用程序是一个挑战。例如,MJIT 目前无法加速 Rails。GraalVM 团队接受了这一挑战,现在 TruffleRuby 在 Rails Simpler 基准测试中实现了比任何其他 Ruby 实现更高的性能。了解 TruffleRuby 是如何实现这一目标的,以及哪些优化对 Rack 和 Rails 应用程序有用。

为您的 Ruby 应用程序尝试 GraalVM

联系我们