Ruby 3.3的YJIT:更快同时使用更少的记忆|大规模使用Rails
- Ruby 3.3的YJIT相比Ruby 3.2的YJIT有显著改进,提供更好的性能、更快的启动时间和减少的内存使用。
- YJIT 3.3包括更好的JIT覆盖率、核心方法调用的内联原语和新的寄存器分配器等优化。
- 通过改进元数据大小和实施“冷阈值”启发式算法,努力减少YJIT的内存使用。
- YJIT 3.3具有更好的默认值,并且可以在运行时从Ruby代码中启用。
- 性能基准测试显示,YJIT 3.3在渲染liquid模板、Railsbench和Ruby LSP等方面提供了显著的性能提升。
- 内存使用基准测试表明,与YJIT 3.2相比,YJIT 3.3的内存开销减少了。
- YJIT已成功部署在Shopify的StoreFront Renderer基础设施中,提供了一致的性能改进。
- 即使在最慢的请求上,YJIT 3.3比CRuby 3.3解释器更快,并且在内存与性能之间有良好的平衡。
- YJIT 3.3在optcarrot基准测试中实现了比CRuby 3.3解释器快3.3倍以上的性能。
- 带有YJIT的Ruby 3.3.0版本将于12月25日发布,性能、内存使用和启动时间都有显著改进。
评论
YJIT 3.3的记忆优化标志着Ruby的JIT编译效率的飞跃,但它们并没有完全缓解JIT固有的权衡,例如执行时间的不可预测性,这可能对实时或低延迟应用程序不利。JIT的动态特性,在实现运行时知情优化的同时,可以优于静态编译,也引入了可变性。例如,如果运行时行为与预测不匹配,推测性优化虽然通常是有益的,但可能会适得其反,导致性能下降。对于一致性性能至关重要的应用程序来说,这种不可预测性是一个重要问题。尽管YJIT的进步可能会使许多Ruby应用程序受益,但考虑到它们的性能改进和可变执行时间的潜力,在使用环境中评估像YJIT这样的JIT编译器是至关重要的。
2023-12-19 07:10:08 +0800