[ruby-core:121208] [Ruby master Bug#21164] Performance Regression using --jit
From:
"k0kubun (Takashi Kokubun) via ruby-core" <ruby-core@...>
Date:
2025-02-28 17:40:44 UTC
List:
ruby-core #121208
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/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/