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

huacnlee · 2022年12月22日 · 最后由 EvanYa 回复于 2023年01月12日 · 3186 次阅读

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 这个常量不存在

amonlei 回复

俺也一样

amonlei 回复

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

huacnlee 回复

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

huacnlee 回复

内存占用情况怎么样?

Peter 回复

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

kikyous 回复

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

huacnlee 回复

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

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 的優化

minix 回复

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

25 楼 已删除
canonpd macOS 下正确安装 Ruby 3.2.2 + YJIT 步骤 提及了此话题。 01月28日 09:03
需要 登录 后方可回复, 如果你还没有账号请 注册新账号