YJIT Benchmarks

Details for Benchmarks at 2022-09-06 20:11:56

Overall YJIT is 30.8% faster than interpreted CRuby!
On Railsbench specifically, YJIT is 29.3% 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 194 75 194 20 194
hexapdf 5 15 20 15
liquid-render 5 161 75 161 20 161
mail 5 119 75 119 20 119
psych-load 5 15 75 15 20 15
railsbench 5 15 75 15 20 15
binarytrees 5 64 75 64 20 64
chunky_png 5 30 75 30 20 30
erubi 5 61 75 61 20 61
erubi_rails 5 1038 75 1038 20 1038
fannkuchredux 5 15 54 15 20 15
lee 5 21 75 21 20 21
nbody 5 262 75 262 20 262
optcarrot 5 15 75 15 20 15
rubykon 5 15 34 15 20 15
30k_ifelse 5 53 68 53 20 53
30k_methods 5 25 22 25 20 25
cfunc_itself 5 437 75 437 20 437
fib 5 309 75 309 20 309
getivar 5 469 75 469 20 469
keyword_args 5 381 75 381 20 381
respond_to 5 105 75 105 20 105
setivar 5 462 75 462 20 462
str_concat 5 424 75 424 20 424

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) 1075255 780551 131 1271 0 0% 0 0 0
hexapdf (click) 1193847 923764 682 8014 9 0% 0 0 0
liquid-render (click) 536951 403369 150 1686 2 0% 0 0 0
mail (click) 939959 654259 374 5387 17 0% 0 0 0
psych-load (click) 360695 263626 68 482 1 0% 0 0 0
railsbench (click) 2758135 1967252 1436 9997 16 0% 0 0 0
binarytrees (click) 177079 127466 13 58 0 0% 0 0 0
chunky_png (click) 406711 292840 88 1042 0 0% 0 0 0
erubi (click) 344759 252835 10 79 0 0% 0 0 0
erubi_rails (click) 2042423 1430526 300 2012 4 0% 0 0 0
fannkuchredux (click) 189047 136369 10 196 0 0% 0 0 0
lee (click) 400247 290941 58 634 0 0% 0 0 0
nbody (click) 187511 136621 12 171 0 0% 0 0 0
optcarrot (click) 536119 442347 207 3588 20 0% 0 0 0
rubykon (click) 330871 255724 144 1569 1 0% 0 0 0
30k_ifelse (click) 5705271 4348219 9265 57804 0 0% 0 0 0
30k_methods (click) 2208887 1656356 5784 19361 0 0% 0 0 0
cfunc_itself (click) 174775 126199 10 49 0 0% 0 0 0
fib (click) 173111 125807 10 38 0 0% 0 0 0
getivar (click) 174903 127894 10 65 0 0% 0 0 0
keyword_args (click) 176567 127228 11 51 0 0% 0 0 0
respond_to (click) 177079 127653 10 64 0 0% 0 0 0
setivar (click) 174839 126714 10 38 0 0% 0 0 0
str_concat (click) 174455 126668 12 62 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.