高性能 Ruby

在 GraalVM 的 Ruby 实现 TruffleRuby 上更快地运行您的 Ruby 代码

优势

small footprint advantage icon

更快地运行 Ruby 代码

对于许多 CPU 密集型基准测试,TruffleRuby 是最快的 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 多语言 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、Flamegraphs 等等。

  $ 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

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

尝试将 GraalVM 用于您的 Ruby 应用程序

与我们联系