
Issue #21164 has been updated by k0kubun (Takashi Kokubun). Status changed from Open to Feedback Using `time` for benchmarking Ruby involves a lot of noise not relevant to the interpreter/JIT's performance. I suggest using `Benchmark.realtime` or at least `--disable-gems` on the Ruby command. In my local environment, the results look like this without `--disable-gems`: ``` $ chruby 3.3.7; time ruby -v --jit array.rb ruby 3.3.7 (2025-01-15 revision be31f993d7) +YJIT [x86_64-linux] 40000000 ruby -v --jit array.rb 1.36s user 0.01s system 99% cpu 1.367 total $ chruby 3.4.2; time ruby -v --jit array.rb ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +YJIT +PRISM [x86_64-linux] 40000000 ruby -v --jit array.rb 0.76s user 0.01s system 99% cpu 0.771 total ``` With `--disable-gems`: ``` $ chruby 3.3.7; time ruby -v --disable-gems --jit array.rb ruby 3.3.7 (2025-01-15 revision be31f993d7) +YJIT [x86_64-linux] 40000000 ruby -v --disable-gems --jit array.rb 0.77s user 0.01s system 99% cpu 0.773 total $ chruby 3.4.2; time ruby -v --disable-gems --jit array.rb ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +YJIT +PRISM [x86_64-linux] 40000000 ruby -v --disable-gems --jit array.rb 0.74s user 0.00s system 99% cpu 0.746 total ``` You can see enabling rubygems adds a lot of overhead to the execution time of the whole command, which is not relevant to the benchmark script. The performance without `--disable-gems` could potentially be influenced by the number of gems that you installed for the Ruby version, for example. Anyway, in both cases, I couldn't see any slowdown in my environment. ---------------------------------------- Bug #21164: Performance Regression using --jit https://bugs.ruby-lang.org/issues/21164#change-112149 * Author: purbug28 (puni ru) * Status: Feedback * ruby -v: ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-linux] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- Ruby 3.4.2 --jit runs slower than no JIT, while Ruby 3.3.7 --jit runs faster. ```ruby # frozen_string_literal: true n = 200000 c = Array.new(n + 1, 0) (1..n).each do |i| a = [] m = 100 (1..m).each do a << i c[i] += 1 a << i / m c[i % m] += 1 end end puts c.sum ``` results of /usr/bin/time ruby 3.4.2 --jit : 1.98user 0.03system 0:02.02elapsed 99%CPU (0avgtext+0avgdata 19692maxresident)k no JIT: 1.77user 0.02system 0:01.80elapsed 99%CPU (0avgtext+0avgdata 18916maxresident)k ruby 3.3.7 --jit : 1.20user 0.05system 0:01.26elapsed 99%CPU (0avgtext+0avgdata 23220maxresident)k no JIT: 1.81user 0.02system 0:01.83elapsed 99%CPU (0avgtext+0avgdata 22952maxresident)k `ruby -v --jit` ``` ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +YJIT +PRISM [x86_64-linux] ``` -- https://bugs.ruby-lang.org/