Ruby Ruby 3.2 带来的 YJIT 性能提升提升 ~40%

huacnlee · December 22, 2022 · Last by EvanYa replied at January 12, 2023 · 2937 hits

Overall YJIT is 38.9% faster than interpreted CRuby! On Railsbench specifically, YJIT is 38.9% faster than CRuby!

https://speed.yjit.org

开始使用 Ruby 3.2

brew upgrade ruby-build
rbenv install 3.2.0-rc1
rbenv global 3.2.0-rc1

然后设置 ENV 开启 YJIT,设置到 .bash_profile 或其他地方

export RUBY_YJIT_ENABLE=true

然后检查 YJIT 是否开启,启动 irb

irb> RubyVM::YJIT.enabled?
=> true

流批了,ActiveRecord 快了 60% 勒

希望 json 序列化能快一些

厉害了,YJIT 算是 ruby 第一个长期在生产环境上跑的 jit 了吧?

o 不是默认开启

lead 这个项目的人有博士学位,之后一直做 compiler 相关的工作。

装了正式版,提示 irb> RubyVM::YJIT 这个常量不存在

Reply to amonlei

俺也一样

Reply to amonlei

yjit 默认没启用。使用源码编译,加上 --enable-yjit 试试

Reply to huacnlee

请问是 #10 楼说的那样使用源码编译,加上 --enable-yjit 吗?

Reply to huacnlee

内存占用情况怎么样?

Reply to Peter

不是,用的是 ruby:3.2-slim-buster 通过设置环境变量来启用的。

Reply to kikyous

看了一下主机的统计,似乎有所下降。整个部署逻辑和程序都没变的,就是升级了 Ruby 3.2

Reply to huacnlee

对,我前几天也看到了,只有 alpine 的镜像带 yjit

Reply to huacnlee

推荐一下 fullstaq-ruby https://fullstaqruby.org/ 的镜像 https://quay.io/repository/evl.ms/fullstaq-ruby?tab=tags

https://github.com/fullstaq-ruby/server-edition

之前用官方的镜像内存一直涨,换的他们的 jemalloc 镜像内存占用就稳定了,他们的镜像有特殊的优化补丁,你也可以测试一下,他们的镜像好像也支持 yjit

 export RUBY_CONFIGURE_OPTS=--enable-yjit
 rvm install ruby-3.1.3


dev@ubuntu:~/Workspace/github$ ruby --yjit -v
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) +YJIT [x86_64-linux]



dev@ubuntu:~/Workspace/github$ irb
3.1.3 :001 > RubyVM::YJIT.enabled?
 => true

这次正确开启了,打包了好几次。目前线上已经以 Ruby 3.2.0 + YJIT 的模式运行了。

还发现 ruby:3.2-alpine 的 Docker Image 引入以后,带来了 /root 文件夹权限问题,之前服务器的 Docker 版本 18 不支持,查了好久原来是得升级到 Docker v20 以上的版本。

内存占用相比之前 3.1 是少了

比較關注 yjit 開啟後對 rails 的優化

Reply to minix

有了,不是默认开启,看来还不是很自信

25 Floor has deleted
canonpd in macOS 下正确安装 Ruby 3.2.2 + YJIT 步骤 mention this topic. 28 Jan 09:03
You need to Sign in before reply, if you don't have an account, please Sign up first.