YJIT Benchmarks

Details for Benchmarks at 2022-11-18 04:10:50

Overall YJIT is 36.3% faster than interpreted CRuby!
On Railsbench specifically, YJIT is 34.9% 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 209 5 209
hexapdf 5 15 5 15
liquid-render 5 173 5 173
mail 5 123 5 123
psych-load 5 15 5 15
railsbench 5 15 5 15
ruby-lsp 5 274 5 274
binarytrees 5 79 5 79
chunky_png 5 32 5 32
erubi 5 68 5 68
erubi_rails 5 1123 5 1123
etanni 5 42 5 42
fannkuchredux 5 15 5 15
lee 5 21 5 21
nbody 5 231 5 231
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 489 5 489
fib 5 327 5 327
getivar 5 426 5 426
keyword_args 5 378 5 378
respond_to 5 716 5 716
setivar 5 407 5 407
str_concat 5 421 5 421

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) 2335402 2334559 25 381 6 1% 0 0 0
hexapdf (click) 1807935 1806082 819 10288 218 2% 0 0 0
liquid-render (click) 603683 601683 156 1843 34 1% 0 0 0
mail (click) 1348171 1346629 373 5146 176 3% 0 0 0
psych-load (click) 815160 813866 70 639 19 2% 0 0 0
railsbench (click) 5684955 5684143 1779 13922 484 3% 0 0 0
ruby-lsp (click) 5546626 5545351 6425 40608 1521 3% 12354 0 0
binarytrees (click) 136042 134433 16 139 4 2% 0 0 0
chunky_png (click) 836778 836421 89 1193 31 2% 0 0 0
erubi (click) 757771 756471 13 147 4 2% 0 0 0
erubi_rails (click) 4781446 4781106 329 2692 111 4% 0 0 0
etanni (click) 136891 135013 13 107 4 3% 0 0 0
fannkuchredux (click) 148083 147677 13 269 4 1% 0 0 0
lee (click) 834983 834972 79 804 25 3% 0 0 0
nbody (click) 150700 149520 15 248 6 2% 0 0 0
optcarrot (click) 577330 576025 203 4133 93 2% 0 0 0
rubykon (click) 286032 283627 146 1642 32 1% 0 0 0
30k_ifelse (click) 5420062 5419577 9268 57196 4 0% 0 0 0
30k_methods (click) 2096008 2095802 5787 19425 4 0% 0 0 0
cfunc_itself (click) 133936 132892 13 122 4 3% 0 0 0
fib (click) 125001 124169 13 111 4 3% 0 0 0
getivar (click) 127077 125795 13 138 4 2% 0 0 0
keyword_args (click) 134725 133524 14 124 4 3% 0 0 0
respond_to (click) 134459 133173 13 138 5 3% 0 0 0
setivar (click) 134725 133524 13 111 4 3% 0 0 0
str_concat (click) 134185 132985 15 137 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.