YJIT Benchmarks

Details for Benchmarks at 2021-11-05 07:10:21

Overall YJIT is 29.1% faster than interpreted CRuby!
On Railsbench specifically, YJIT is 26.0% 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 YJIT warmups YJIT iters
activerecord 10 127 10 117 10 173
hexapdf 10 10 10 10 10 10
liquid-render 10 103 10 108 10 157
mail 10 115 10 123 10 127
psych-load 10 10 10 10 10 10
railsbench 10 10 10 10 10 10
binarytrees 10 48 10 70 10 61
fannkuchredux 10 10 10 10 10 10
jekyll 10 10 10 10 10 10
lee 10 10 10 14 10 15
nbody 10 178 10 331 10 267
optcarrot 10 10 10 10 10 10
rubykon 10 10 10 10 10 10
30k_ifelse 10 10 10 10 10 52
30k_methods 10 10 10 10 10 17
cfunc_itself 10 215 10 338 10 506
fib 10 94 10 307 10 375
getivar 10 229 10 211 10 530
keyword_args 10 74 10 95 10 429
respond_to 10 74 10 87 10 119
setivar 10 287 10 264 10 438

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) 978932 768855 184 1156 0 0% 0 0 0
hexapdf (click) 1096948 918020 603 7980 624 7% 0 0 320
liquid-render (click) 474369 388438 143 1424 95 6% 0 0 1
mail (click) 866228 672324 339 5241 124 2% 0 0 39
psych-load (click) 301729 241585 57 416 1 0% 0 0 0
railsbench (click) 2612081 2039011 1295 9634 262 2% 0 0 26
binarytrees (click) 114986 91464 9 48 0 0% 0 0 0
fannkuchredux (click) 131050 105089 6 202 0 0% 0 0 0
jekyll (click) 1901364 1581428 336 3866 177 4% 0 0 0
lee (click) 349556 273796 44 566 70 12% 0 0 12
nbody (click) 123818 98800 8 148 0 0% 0 0 0
optcarrot (click) 460842 431364 196 3566 20 0% 0 0 0
rubykon (click) 256938 222376 138 1513 1 0% 0 0 0
30k_ifelse (click) 5562026 4891999 9261 57794 0 0% 0 0 0
30k_methods (click) 2118570 1817816 5780 19351 0 0% 0 0 0
cfunc_itself (click) 113450 89903 6 39 0 0% 0 0 0
fib (click) 111338 89082 6 28 0 0% 0 0 0
getivar (click) 113706 92317 6 55 0 0% 0 0 0
keyword_args (click) 113706 90265 7 41 0 0% 0 0 0
respond_to (click) 115050 91023 6 54 0 0% 0 0 0
setivar (click) 113706 90626 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.