YJIT Benchmarks

Details for Benchmarks at 2022-01-15 07:12:55 UTC

YJIT metrics from the yjit-bench suite

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

Performance on Headline Benchmarks

Speed of each Ruby implementation relative to the baseline CRuby measurement. Higher is better.

Memory Usage on Headline Benchmarks

Memory usage of each Ruby implementation relative to the baseline CRuby measurement. Lower is better.

Performance on Other Benchmarks

Speed of each Ruby implementation relative to the baseline CRuby measurement. Higher is better.

Memory Usage on Other Benchmarks

Memory usage of each Ruby implementation relative to the baseline CRuby measurement. Lower is better.

Performance on MicroBenchmarks

Speed of each Ruby implementation relative to the baseline CRuby measurement. Higher is better.

Memory Usage on MicroBenchmarks

Memory usage of each Ruby implementation relative to the baseline CRuby measurement. Lower is better.

Want Raw Graphs and CSV?

Benchmarks Speed Details

Benchmark Memory Usage Details

Number of Iterations and Warmups Tested

bench No JIT warmups No JIT iters MJIT3.0 warmups MJIT3.0 iters MJIT warmups MJIT iters YJIT warmups YJIT iters
activerecord 5 193 20 193 75 193 20 193
hexapdf 5 15 20 15 20 15
liquid-render 5 175 20 175 75 175 20 175
mail 5 144 20 144 75 144 20 144
psych-load 5 15 20 15 75 15 20 15
railsbench 5 15 20 15 75 15 20 15
binarytrees 5 85 20 85 75 85 20 85
erubi 5 56 20 56 75 56 20 56
erubi_rails 5 1020 20 1020 75 1020 20 1020
fannkuchredux 5 15 20 15 75 15 20 15
lee 5 26 20 26 75 26 20 26
nbody 5 344 20 344 75 344 20 344
optcarrot 5 15 20 15 75 15 20 15
rubykon 5 15 20 15 44 15 20 15
30k_ifelse 5 62 20 62 75 62 20 62
30k_methods 5 26 20 26 44 26 20 26
cfunc_itself 5 536 20 536 75 536 20 536
fib 5 383 20 383 75 383 20 383
getivar 5 961 20 961 75 961 20 961
keyword_args 5 452 20 452 75 452 20 452
respond_to 5 130 20 130 75 130 20 130
setivar 5 2210 20 2210 75 2210 20 2210

Different Ruby configurations want different amounts of warmup. With no JIT, CRuby needs hardly any. YJIT and MJIT 3.0 both warm up quite quickly, while MJIT in 3.1 often slows down for a time as it compiles, after an unpredictable delay.

Benchmark YJIT Stats

Hover your cursor over the benchmark names for descriptions of each benchmark.

bench Exit Report Inline Outlined Comp iSeqs Comp Blocks Inval Inval Ratio Bind Alloc Bind Set Const Bumps
activerecord (click) 966033 740209 185 1195 0 0% 0 0 0
hexapdf (click) 1095249 897410 600 8175 614 7% 0 0 321
liquid-render (click) 476881 379550 143 1564 95 6% 0 0 1
mail (click) 861969 644989 325 5353 124 2% 0 0 39
psych-load (click) 296401 233974 58 444 1 0% 0 0 0
railsbench (click) 2513169 1914294 1297 9358 268 2% 0 0 26
binarytrees (click) 112465 86374 10 54 0 0% 0 0 0
erubi (click) 294673 234301 9 73 0 0% 0 0 0
erubi_rails (click) 1895633 1426323 261 1962 18 0% 0 0 3
fannkuchredux (click) 126225 97072 7 184 0 0% 0 0 0
lee (click) 336977 265264 45 586 72 12% 0 0 12
nbody (click) 121745 93575 9 154 0 0% 0 0 0
optcarrot (click) 448977 399205 197 3571 20 0% 0 0 0
rubykon (click) 254033 207005 140 1532 1 0% 0 0 0
30k_ifelse (click) 5501521 4306698 9262 57800 0 0% 0 0 0
30k_methods (click) 2116689 1615160 5781 19357 0 0% 0 0 0
cfunc_itself (click) 110929 85003 7 45 0 0% 0 0 0
fib (click) 110033 84940 7 34 0 0% 0 0 0
getivar (click) 111249 87122 7 61 0 0% 0 0 0
keyword_args (click) 111825 85644 8 47 0 0% 0 0 0
respond_to (click) 113105 86457 7 60 0 0% 0 0 0
setivar (click) 111249 85646 7 34 0 0% 0 0 0

YJIT stats correspond to the YJIT stats exit report.

Note: currently, all stats are collected on x86_64, not ARM.

Raw JSON data files

All graphs and table data in this page comes from processing these data files, which come from benchmark runs.