YJIT Benchmarks

Details for Benchmarks at 2022-03-24 19:12:44

Overall YJIT is 31.9% faster than interpreted CRuby!
On Railsbench specifically, YJIT is 32.6% 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 MJIT warmups MJIT iters YJIT warmups YJIT iters
activerecord 5 181 75 181 20 181
hexapdf 5 15 20 15
liquid-render 5 152 75 152 20 152
mail 5 123 75 123 20 123
psych-load 5 15 75 15 20 15
railsbench 5 15 75 15 20 15
binarytrees 5 65 75 65 20 65
chunky_png 5 30 75 30 20 30
discourse 5 34 75 34 20 34
erubi 5 48 75 48 20 48
erubi_rails 5 977 75 977 20 977
fannkuchredux 5 15 75 15 20 15
lee 5 22 75 22 20 22
nbody 5 283 75 283 20 283
optcarrot 5 15 75 15 20 15
rubykon 5 15 24 15 20 15
30k_ifelse 5 55 75 55 20 55
30k_methods 5 22 29 22 20 22
cfunc_itself 5 450 75 450 20 450
fib 5 318 75 318 20 318
getivar 5 774 75 774 20 774
keyword_args 5 377 75 377 20 377
respond_to 5 107 75 107 20 107
setivar 5 1798 75 1798 20 1798

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) 988049 808366 185 1185 0 0% 0 0 0
hexapdf (click) 1097617 920129 600 7907 430 5% 0 0 321
liquid-render (click) 501073 422814 143 1523 92 6% 0 0 5
mail (click) 898577 693170 325 5484 96 1% 0 0 111
psych-load (click) 341393 286443 59 434 1 0% 0 0 0
railsbench (click) 2594897 2102924 1297 9369 224 2% 0 0 26
binarytrees (click) 168401 138123 11 58 0 0% 0 0 0
chunky_png (click) 374993 308960 85 858 0 0% 0 0 0
discourse (click) 6239633 5607514 3128 26899 3243 12% 2 0 140
erubi (click) 329361 277025 10 79 0 0% 0 0 0
erubi_rails (click) 1957009 1597444 262 1878 12 0% 0 0 3
fannkuchredux (click) 183505 149524 8 188 0 0% 0 0 0
lee (click) 378577 315736 45 582 68 11% 0 0 13
nbody (click) 179025 146027 10 158 0 0% 0 0 0
optcarrot (click) 506257 451657 198 3575 20 0% 0 0 0
rubykon (click) 314321 261470 140 1572 1 0% 0 0 0
30k_ifelse (click) 5559313 4359479 9263 57804 0 0% 0 0 0
30k_methods (click) 2173969 1667612 5782 19361 0 0% 0 0 0
cfunc_itself (click) 168017 137033 8 50 0 0% 0 0 0
fib (click) 166801 137063 8 38 0 0% 0 0 0
getivar (click) 168593 139687 8 65 0 0% 0 0 0
keyword_args (click) 169105 138096 9 51 0 0% 0 0 0
respond_to (click) 170385 138909 8 64 0 0% 0 0 0
setivar (click) 168977 138427 8 38 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.