YJIT Benchmarks

Details for Benchmarks at 2024-02-16 06:08:15 UTC

YJIT metrics from the yjit-bench suite using Ruby 785b7ee13d

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 68.0% faster than CRuby 3.4.0dev
On railsbench it is
  • 69.5% faster than CRuby 3.4.0dev

Performance on Headline Benchmarks

Speed of each Ruby implementation relative to the baseline CRuby measurement. Higher is better.

Memory Usage on Headline Benchmarks

Memory usage of each Ruby implementation relative to the baseline CRuby measurement. Lower is better.

Performance on Other Benchmarks

Speed of each Ruby implementation relative to the baseline CRuby measurement. Higher is better.

Memory Usage on Other Benchmarks

Memory usage of each Ruby implementation relative to the baseline CRuby measurement. Lower is better.

Performance on MicroBenchmarks

Speed of each Ruby implementation relative to the baseline CRuby measurement. Higher is better.

Memory Usage on MicroBenchmarks

Memory usage of each Ruby implementation relative to the baseline CRuby measurement. Lower is better.

Want Raw Graphs and CSV?

Benchmarks Speed Details

Benchmark Memory Usage Details

Number of Iterations and Warmups Tested

bench CRuby 3.4.0dev warmups CRuby 3.4.0dev iters YJIT 3.4.0dev warmups YJIT 3.4.0dev iters
activerecord 30 512 30 512
chunky-png 30 31 30 31
erubi-rails 30 20 30 20
hexapdf 30 15 30 15
liquid-c 30 350 30 350
liquid-compile 30 335 30 335
liquid-render 30 251 30 251
lobsters 30 23 30 23
mail 30 162 30 162
psych-load 30 15 30 15
railsbench 30 15 30 15
rubocop 30 183 30 183
ruby-lsp 30 187 30 187
sequel 30 288 30 288
binarytrees 30 84 30 84
blurhash 30 103 30 103
erubi 30 77 30 77
etanni 30 51 30 51
fannkuchredux 30 24 30 24
fluentd 30 15 30 15
graphql 30 15 30 15
graphql-native 30 22 30 22
lee 30 20 30 20
matmul 30 19 30 19
nbody 30 332 30 332
nqueens 30 306 30 306
optcarrot 30 15 30 15
rack 30 180 30 180
ruby-json 30 15 30 15
rubykon 30 15 30 15
sudoku 30 26 30 26
tinygql 30 41 30 41
30k_ifelse 30 55 30 55
30k_methods 30 23 30 23
cfunc_itself 30 827 30 827
fib 30 416 30 416
getivar 30 943 30 943
keyword_args 30 531 30 531
respond_to 30 1457 30 1457
ruby-xor 30 88 30 88
setivar 30 1668 30 1668
setivar_object 30 340 30 340
setivar_young 30 335 30 335
str_concat 30 417 30 417
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 Compile Time MS
activerecord (click) 883113 768453 49 522 0 0% 0 0 0 15.859657
chunky-png (click) 323920 285708 87 1095 1 0% 0 0 0 32.809336
erubi-rails (click) 1705447 1423477 280 2883 6 0% 0 0 0 82.017942
hexapdf (click) 1413536 1188532 596 12589 37 0% 0 0 0 377.772694
liquid-c (click) 519514 463995 120 1758 5 0% 0 0 0 49.030947
liquid-compile (click) 443096 389820 151 2063 2 0% 0 0 0 64.743194
liquid-render (click) 620368 540931 144 2274 8 0% 0 0 0 63.833836
lobsters (click) 7914465 6612927 3220 50521 72 0% 0 0 0 1763.346788
mail (click) 719489 614799 346 4849 14 0% 0 0 0 145.098361
psych-load (click) 286536 247693 65 650 3 0% 0 0 0 20.272594
railsbench (click) 2993860 2584318 1643 15623 54 0% 0 0 0 462.25132
rubocop (click) 5352183 4618507 2902 47668 105 0% 4 0 0 1444.257474
ruby-lsp (click) 624982 540819 159 2783 14 0% 0 0 0 79.457968
sequel (click) 495124 422439 16 119 0 0% 0 0 0 4.47871
binarytrees (click) 9392 7588 11 75 0 0% 0 0 0 3.1152
blurhash (click) 52663 47827 32 476 0 0% 0 0 0 15.899487
erubi (click) 258521 217483 10 114 0 0% 0 0 0 3.912548
etanni (click) 31784 27950 12 98 0 0% 0 0 0 3.320998
fannkuchredux (click) 24986 25976 9 259 0 0% 0 0 0 7.994435
fluentd (click) 385079 318746 11 111 0 0% 0 0 0 3.734636
graphql (click) 429351 367521 70 670 0 0% 0 0 0 21.015051
graphql-native (click) 394906 337134 41 268 0 0% 0 0 0 8.796807
lee (click) 313023 278534 49 737 0 0% 0 0 0 23.546338
matmul (click) 12586 12175 12 126 0 0% 0 0 0 4.349424
nbody (click) 15177 7657 11 187 0 0% 0 0 0 5.069757
nqueens (click) 23683 17949 10 263 0 0% 0 0 0 7.927328
optcarrot (click) 317208 278543 192 4345 34 0% 0 0 0 105.778786
rack (click) 259650 229757 31 325 0 0% 0 0 0 9.347753
ruby-json (click) 28209 23153 12 200 0 0% 0 0 0 6.017004
rubykon (click) 133699 106554 143 1500 3 0% 0 0 0 42.871374
sudoku (click) 47007 45195 11 507 0 0% 0 0 0 15.607411
tinygql (click) 300279 253002 63 791 5 0% 0 0 0 23.377156
30k_ifelse (click) 5222671 4374319 9264 50815 0 0% 0 0 0 1501.425696
30k_methods (click) 2019688 1594135 5782 19371 0 0% 0 0 0 529.479291
cfunc_itself (click) 7663 5893 9 72 0 0% 0 0 0 2.318817
fib (click) 5017 4633 8 49 0 0% 0 0 0 1.767039
getivar (click) 6102 6023 8 74 0 0% 0 0 0 2.219082
keyword_args (click) 8526 6585 10 74 0 0% 0 0 0 2.598656
respond_to (click) 8415 7843 9 87 0 0% 0 0 0 2.730938
ruby-xor (click) 8142 7087 9 87 0 0% 0 0 0 2.7757
setivar (click) 5193 4604 8 54 0 0% 0 0 0 1.871937
setivar_object (click) 5561 4624 8 54 0 0% 0 0 0 1.851056
setivar_young (click) 6284 5274 9 62 0 0% 0 0 0 2.066387
str_concat (click) 8006 7287 11 87 0 0% 0 0 0 3.013968
throw (click) 7946 6065 10 69 0 0% 0 0 0 2.443775

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.