YJIT Benchmarks

Details for Benchmarks at 2022-11-16 04:11:30

Overall YJIT is 32.7% faster than interpreted CRuby!
On Railsbench specifically, YJIT is 37.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 YJIT warmups YJIT iters
activerecord 5 199 5 199
hexapdf 5 15 5 15
liquid-render 5 176 5 176
mail 5 124 5 124
psych-load 5 15 5 15
railsbench 5 15 5 15
ruby-lsp 5 240 5 240
binarytrees 5 84 5 84
chunky_png 5 32 5 32
erubi 5 69 5 69
erubi_rails 5 1118 5 1118
etanni 5 42 5 42
fannkuchredux 5 15 5 15
lee 5 21 5 21
nbody 5 228 5 228
optcarrot 5 15 5 15
rubykon 5 15 5 15
30k_ifelse 5 50 5 50
30k_methods 5 20 5 20
cfunc_itself 5 472 5 472
fib 5 327 5 327
getivar 5 426 5 426
keyword_args 5 379 5 379
respond_to 5 702 5 702
setivar 5 407 5 407
str_concat 5 453 5 453

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) 2329376 2327910 25 374 6 1% 0 0 0
hexapdf (click) 1794007 1793533 819 10285 218 2% 0 0 0
liquid-render (click) 561551 559917 156 1837 34 1% 0 0 0
mail (click) 1346322 1345173 373 5126 176 3% 0 0 0
psych-load (click) 813573 812541 70 636 19 2% 0 0 0
railsbench (click) 5686636 5685032 1779 13924 484 3% 0 0 0
ruby-lsp (click) 5533342 5531162 6425 40546 1521 3% 13854 0 0
binarytrees (click) 128118 126448 16 137 4 2% 0 0 0
chunky_png (click) 834853 832521 89 1214 31 2% 0 0 0
erubi (click) 752806 750538 13 145 4 2% 0 0 0
erubi_rails (click) 4780650 4780624 329 2690 111 4% 0 0 0
etanni (click) 136490 134707 13 105 4 3% 0 0 0
fannkuchredux (click) 140146 139607 13 267 4 1% 0 0 0
lee (click) 838323 837267 79 803 25 3% 0 0 0
nbody (click) 150291 149264 15 246 6 2% 0 0 0
optcarrot (click) 569011 567651 203 4131 93 2% 0 0 0
rubykon (click) 278688 278510 146 1645 32 1% 0 0 0
30k_ifelse (click) 5419657 5419411 9268 57194 4 0% 0 0 0
30k_methods (click) 2088065 2087759 5787 19423 4 0% 0 0 0
cfunc_itself (click) 133540 132581 13 120 4 3% 0 0 0
fib (click) 124604 124101 13 109 4 3% 0 0 0
getivar (click) 134164 132917 13 136 4 2% 0 0 0
keyword_args (click) 134328 133148 14 122 4 3% 0 0 0
respond_to (click) 126571 125338 13 136 5 3% 0 0 0
setivar (click) 134318 133148 13 109 4 3% 0 0 0
str_concat (click) 133784 132749 15 135 6 4% 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.