YJIT Benchmarks

Details for Benchmarks at 2021-11-22 19:10:48

Overall YJIT is 26.4% faster than interpreted CRuby!
On Railsbench specifically, YJIT is 16.5% 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 50 156 50 132 50 128 50 224
hexapdf 50 15 50 15 50 15
liquid-render 50 118 50 132 50 128 50 207
mail 50 138 50 150 50 136 50 150
psych-load 50 15 50 15 50 15 50 15
railsbench 50 15 50 15 50 15 50 15
binarytrees 50 32 50 82 50 77 50 58
erubi 50 22 50 24 50 25 50 22
erubi_rails 50 677 50 539 50 654 50 846
fannkuchredux 50 15 50 15 50 15 50 15
jekyll 50 15 50 15 50 15 50 15
lee 50 15 50 15 50 15 50 15
nbody 50 234 50 441 50 458 50 348
optcarrot 50 15 50 15 50 15 50 15
rubykon 50 15 50 15 50 15 50 15
30k_ifelse 50 15 50 15 50 15 50 48
30k_methods 50 15 50 15 50 15 50 15
cfunc_itself 50 280 50 449 50 415 50 707
fib 50 98 50 446 50 429 50 527
getivar 50 261 50 273 50 261 50 781
keyword_args 50 73 50 108 50 107 50 602
respond_to 50 74 50 113 50 94 50 126
setivar 50 414 50 387 50 415 50 667

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) 954986 678528 184 1141 0 0% 0 0 0
hexapdf (click) 1073898 810441 595 7954 616 7% 0 0 320
liquid-render (click) 466871 344953 143 1432 95 6% 0 0 1
mail (click) 786730 551863 324 4599 124 2% 0 0 39
psych-load (click) 293345 212344 57 423 1 0% 0 0 0
railsbench (click) 2566242 1803425 1294 9696 263 2% 0 0 26
binarytrees (click) 111845 80908 9 48 0 0% 0 0 0
erubi (click) 272225 195925 8 35 0 0% 0 0 0
erubi_rails (click) 2423330 1552242 260 1905 17 0% 0 0 3
fannkuchredux (click) 127845 92918 6 202 0 0% 0 0 0
jekyll (click) 1886122 1402986 336 3994 179 4% 0 0 0
lee (click) 297450 212988 44 226 54 23% 0 0 12
nbody (click) 121253 87743 8 148 0 0% 0 0 0
optcarrot (click) 450213 381877 196 3566 20 0% 0 0 0
rubykon (click) 253989 197489 138 1529 1 0% 0 0 0
30k_ifelse (click) 5501029 4301232 9261 57794 0 0% 0 0 0
30k_methods (click) 2116453 1610022 5780 19351 0 0% 0 0 0
cfunc_itself (click) 110629 79670 6 39 0 0% 0 0 0
fib (click) 108901 79145 6 28 0 0% 0 0 0
getivar (click) 111205 82005 6 55 0 0% 0 0 0
keyword_args (click) 111269 80178 7 41 0 0% 0 0 0
respond_to (click) 112549 80871 6 54 0 0% 0 0 0
setivar (click) 111141 80529 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.