YJIT Benchmarks

Details for Benchmarks at 2022-10-14 04:42:57

Overall YJIT is 38.8% faster than interpreted CRuby!
On Railsbench specifically, YJIT is 30.8% faster than CRuby!

The basic "faster" measurement is the geomean of all "headlining" x86 benchmarks on this page.

Headlining Benchmarks

These are "headlining" because the "overall" speedup above is based on these benchmarks specifically.

Speed of each Ruby implementation (iterations/second) relative to the CRuby interpreter. Higher is better.

Other Benchmarks

Speed of each Ruby implementation (iterations/second) relative to the CRuby interpreter. Higher is better.

MicroBenchmarks

Speed of each Ruby implementation (iterations/second) relative to the CRuby interpreter. Higher 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 YJIT warmups YJIT iters
activerecord 5 201 5 201
hexapdf 5 15 5 15
liquid-render 5 178 5 178
mail 5 127 5 127
psych-load 5 15 5 15
railsbench 5 15 5 15
binarytrees 5 86 5 86
chunky_png 5 30 5 30
erubi 5 67 5 67
erubi_rails 5 1045 5 1045
etanni 5 42 5 42
fannkuchredux 5 15 5 15
lee 5 21 5 21
nbody 5 244 5 244
optcarrot 5 15 5 15
rubykon 5 15 5 15
30k_ifelse 5 56 5 56
30k_methods 5 24 5 24
cfunc_itself 5 488 5 488
fib 5 326 5 326
getivar 5 426 5 426
keyword_args 5 368 5 368
respond_to 5 716 5 716
setivar 5 424 5 424
str_concat 5 413 5 413

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) 2496081 1483500 23 286 6 2% 0 0 0
hexapdf (click) 1905683 1301539 872 9623 189 1% 0 0 0
liquid-render (click) 745555 488653 154 1741 34 1% 0 0 0
mail (click) 1466643 943044 385 4905 176 3% 0 0 0
psych-load (click) 949331 610583 68 489 19 3% 0 0 0
railsbench (click) 5431121 3318224 1784 12877 475 3% 0 0 0
binarytrees (click) 318867 198815 14 70 4 5% 0 0 0
chunky_png (click) 972435 630948 87 1032 31 3% 0 0 0
erubi (click) 900691 585066 11 78 4 5% 0 0 0
erubi_rails (click) 4496337 2664324 327 2472 107 4% 0 0 0
etanni (click) 319635 198685 11 38 4 10% 0 0 0
fannkuchredux (click) 329683 206880 11 200 4 2% 0 0 0
lee (click) 982867 639782 80 746 25 3% 0 0 0
nbody (click) 327571 204698 13 179 6 3% 0 0 0
optcarrot (click) 757331 543977 201 4001 93 2% 0 0 0
rubykon (click) 469267 312710 143 1561 32 2% 0 0 0
30k_ifelse (click) 5603155 4344079 9266 57127 4 0% 0 0 0
30k_methods (click) 2276691 1725978 5785 19356 4 0% 0 0 0
cfunc_itself (click) 316307 196667 11 53 4 7% 0 0 0
fib (click) 309075 192708 11 42 4 9% 0 0 0
getivar (click) 316627 197910 11 69 4 5% 0 0 0
keyword_args (click) 316755 196996 12 55 4 7% 0 0 0
respond_to (click) 309587 193148 11 55 5 9% 0 0 0
setivar (click) 317075 197492 11 42 4 9% 0 0 0
str_concat (click) 316563 197516 13 68 6 8% 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.