YJIT Benchmarks

Details for Benchmarks at 2021-11-16 19:09:52 UTC

YJIT metrics from the yjit-bench suite

Overall YJIT is 29.6% faster than interpreted CRuby!
On Railsbench specifically, YJIT is 24.4% 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 YJIT warmups YJIT iters
activerecord 10 125 10 113 10 177
hexapdf 10 10 10 10 10 10
liquid-render 10 107 10 114 10 162
mail 10 116 10 123 10 130
psych-load 10 10 10 10 10 10
railsbench 10 10 10 10 10 10
binarytrees 10 46 10 77 10 59
fannkuchredux 10 10 10 10 10 10
jekyll 10 10 10 10 10 10
lee 10 10 10 12 10 15
nbody 10 170 10 316 10 263
optcarrot 10 10 10 10 10 10
rubykon 10 10 10 10 10 10
30k_ifelse 10 10 10 10 10 52
30k_methods 10 10 10 10 10 17
cfunc_itself 10 207 10 327 10 508
fib 10 92 10 321 10 373
getivar 10 196 10 212 10 539
keyword_args 10 71 10 99 10 426
respond_to 10 78 10 96 10 120
setivar 10 289 10 282 10 461

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) 970090 679177 184 1174 0 0% 0 0 0
hexapdf (click) 1080746 808019 595 8000 613 7% 0 0 320
liquid-render (click) 467191 340784 143 1411 96 6% 0 0 1
mail (click) 856554 588945 339 5245 124 2% 0 0 39
psych-load (click) 297569 211650 57 436 1 0% 0 0 0
railsbench (click) 2582242 1794384 1295 9654 264 2% 0 0 26
binarytrees (click) 113637 80936 9 48 0 0% 0 0 0
fannkuchredux (click) 129189 92730 6 202 0 0% 0 0 0
jekyll (click) 1882410 1388783 336 3908 179 4% 0 0 0
lee (click) 345514 240123 44 566 70 12% 0 0 12
nbody (click) 122149 87094 8 148 0 0% 0 0 0
optcarrot (click) 452005 381471 196 3566 20 0% 0 0 0
rubykon (click) 254885 197010 139 1522 1 0% 0 0 0
30k_ifelse (click) 5501925 4300583 9261 57794 0 0% 0 0 0
30k_methods (click) 2117029 1609045 5780 19351 0 0% 0 0 0
cfunc_itself (click) 111333 78888 6 39 0 0% 0 0 0
fib (click) 109797 78496 6 28 0 0% 0 0 0
getivar (click) 112101 81356 6 55 0 0% 0 0 0
keyword_args (click) 112165 79529 7 41 0 0% 0 0 0
respond_to (click) 113445 80222 6 54 0 0% 0 0 0
setivar (click) 111461 79531 6 28 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.