YJIT Benchmarks

Details for Benchmarks at 2023-05-16 19:08:42


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 30 474 30 474
hexapdf 30 15 30 15
liquid-c 30 335 30 335
liquid-compile 30 369 30 369
liquid-render 30 184 30 184
mail 30 154 30 154
psych-load 30 15 30 15
railsbench 30 15 30 15
ruby-lsp 30 342 30 342
sequel 30 297 30 297
binarytrees 30 88 30 88
chunky_png 30 30 30 30
erubi 30 77 30 77
erubi_rails 30 1323 30 1323
etanni 30 47 30 47
fannkuchredux 30 25 30 25
lee 30 21 30 21
nbody 30 287 30 287
optcarrot 30 15 30 15
ruby-json 30 15 30 15
rubykon 30 15 30 15
30k_ifelse 30 55 30 55
30k_methods 30 23 30 23
cfunc_itself 30 522 30 522
fib 30 448 30 448
getivar 30 945 30 945
keyword_args 30 418 30 418
respond_to 30 785 30 785
setivar 30 1667 30 1667
setivar_object 30 419 30 419
setivar_young 30 440 30 440
str_concat 30 463 30 463
throw 30 812 30 812

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) 1119092 769340 51 453 1 0% 0 0 0
hexapdf (click) 1896732 1124980 601 10749 22 0% 0 0 0
liquid-c (click) 672056 434140 125 1644 3 0% 0 0 0
liquid-compile (click) 490228 266460 149 1995 2 0% 0 0 0
liquid-render (click) 744804 438216 146 1994 8 0% 0 0 0
mail (click) 1030388 746284 346 4831 9 0% 0 0 0
psych-load (click) 321720 192844 64 572 1 0% 0 0 0
railsbench (click) 3618364 2480584 1355 11372 7 0% 0 0 0
ruby-lsp (click) 7949472 5188788 3392 44346 309 0% 4 0 0
sequel (click) 634592 402112 15 95 0 0% 0 0 0
binarytrees (click) 13468 11768 11 75 0 0% 0 0 0
chunky_png (click) 401992 233284 86 1082 1 0% 0 0 0
erubi (click) 296848 157436 9 83 0 0% 0 0 0
erubi_rails (click) 2473156 1737476 288 2554 1 0% 0 0 0
etanni (click) 18340 16804 11 55 0 0% 0 0 0
fannkuchredux (click) 32888 30648 8 219 0 0% 0 0 0
lee (click) 350580 236600 49 655 0 0% 0 0 0
nbody (click) 24340 9936 10 178 0 0% 0 0 0
optcarrot (click) 516652 220384 197 4341 22 0% 0 0 0
ruby-json (click) 37208 33880 11 184 0 0% 0 0 0
rubykon (click) 224536 162588 145 1619 2 0% 0 0 0
30k_ifelse (click) 8276636 6631148 9263 50806 0 0% 0 0 0
30k_methods (click) 2936372 2418892 5781 19360 0 0% 0 0 0
cfunc_itself (click) 9212 7976 8 61 0 0% 0 0 0
fib (click) 7208 7044 8 49 0 0% 0 0 0
getivar (click) 9516 1248 8 74 0 0% 0 0 0
keyword_args (click) 10704 8688 9 63 0 0% 0 0 0
respond_to (click) 10804 2588 8 76 0 0% 0 0 0
setivar (click) 7940 7228 8 54 0 0% 0 0 0
setivar_object (click) 8360 7252 8 54 0 0% 0 0 0
setivar_young (click) 9600 8824 9 62 0 0% 0 0 0
str_concat (click) 10212 1680 10 76 0 0% 0 0 0
throw (click) 5788 5184 10 37 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.