YJIT Benchmarks

Details for Benchmarks at 2021-11-23 14:03:13

Overall YJIT is 25.6% faster than interpreted CRuby!
On Railsbench specifically, YJIT is 15.7% 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 MJIT3.0 warmups MJIT3.0 iters MJIT warmups MJIT iters YJIT warmups YJIT iters
activerecord 5 15 20 15 75 15 20 15
hexapdf 5 15 20 15 20 15
liquid-render 5 15 20 15 75 15 20 15
mail 5 15 20 15 75 15 20 15
psych-load 5 15 20 15 75 15 20 15
railsbench 5 15 20 15 75 15 20 15
binarytrees 5 15 20 15 75 15 20 15
erubi 5 15 20 15 75 15 20 15
erubi_rails 5 15 20 15 75 15 20 15
fannkuchredux 5 15 20 15 54 15 20 15
jekyll 5 15 20 15 35 15 20 15
lee 5 15 20 15 75 15 20 15
nbody 5 15 20 15 75 15 20 15
optcarrot 5 15 20 15 75 15 20 15
rubykon 5 15 20 15 43 15 20 15
30k_ifelse 5 15 20 15 75 15 20 15
30k_methods 5 15 20 15 41 15 20 15
cfunc_itself 5 15 20 15 75 15 20 15
fib 5 15 20 15 75 15 20 15
getivar 5 15 20 15 75 15 20 15
keyword_args 5 15 20 15 75 15 20 15
respond_to 5 15 20 15 75 15 20 15
setivar 5 15 20 15 75 15 20 15

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) 955818 718569 184 1145 0 0% 0 0 0
hexapdf (click) 1074346 856128 595 7956 616 7% 0 0 320
liquid-render (click) 466615 362771 143 1421 95 6% 0 0 1
mail (click) 794986 587384 324 4694 124 2% 0 0 39
psych-load (click) 293217 227839 57 423 1 0% 0 0 0
railsbench (click) 2563106 1910781 1293 9674 263 2% 0 0 26
binarytrees (click) 112805 85741 9 48 0 0% 0 0 0
erubi (click) 272033 211400 8 35 0 0% 0 0 0
erubi_rails (click) 2413282 1722223 260 1824 17 0% 0 0 3
fannkuchredux (click) 128805 97751 6 202 0 0% 0 0 0
jekyll (click) 1884266 1497847 336 3957 179 4% 0 0 0
lee (click) 297834 230454 44 226 54 23% 0 0 12
nbody (click) 121701 92363 8 148 0 0% 0 0 0
optcarrot (click) 450661 391809 196 3566 20 0% 0 0 0
rubykon (click) 253285 203263 139 1517 1 0% 0 0 0
30k_ifelse (click) 5501477 4305716 9261 57794 0 0% 0 0 0
30k_methods (click) 2116581 1614178 5780 19351 0 0% 0 0 0
cfunc_itself (click) 110885 84021 6 39 0 0% 0 0 0
fib (click) 109349 83629 6 28 0 0% 0 0 0
getivar (click) 111077 86140 6 55 0 0% 0 0 0
keyword_args (click) 111717 84702 7 41 0 0% 0 0 0
respond_to (click) 113509 85824 6 54 0 0% 0 0 0
setivar (click) 111525 85013 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.