YJIT Benchmarks

Details for Benchmarks at 2024-02-14 19:08:14 UTC

YJIT metrics from the yjit-bench suite using Ruby 1d3b306753

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 67.0% faster than CRuby 3.4.0dev
On railsbench it is
  • 69.7% 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 498 30 498
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 341 30 341
liquid-render 30 251 30 251
lobsters 30 23 30 23
mail 30 163 30 163
psych-load 30 15 30 15
railsbench 30 15 30 15
rubocop 30 184 30 184
ruby-lsp 30 212 30 212
sequel 30 291 30 291
binarytrees 30 85 30 85
blurhash 30 100 30 100
erubi 30 75 30 75
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 18 30 18
nbody 30 312 30 312
nqueens 30 304 30 304
optcarrot 30 15 30 15
rack 30 179 30 179
ruby-json 30 15 30 15
rubykon 30 15 30 15
sudoku 30 26 30 26
tinygql 30 42 30 42
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 942 30 942
keyword_args 30 531 30 531
respond_to 30 1458 30 1458
ruby-xor 30 94 30 94
setivar 30 1668 30 1668
setivar_object 30 357 30 357
setivar_young 30 357 30 357
str_concat 30 419 30 419
throw 30 821 30 821

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) 885067 760325 49 522 0 0% 0 0 0 15.586326
chunky-png (click) 325808 279300 87 1104 1 0% 0 0 0 32.462612
erubi-rails (click) 1710330 1450320 280 2898 6 0% 0 0 0 80.857342
hexapdf (click) 1415350 1220563 596 12578 37 0% 0 0 0 365.920122
liquid-c (click) 520667 455765 120 1758 5 0% 0 0 0 47.942055
liquid-compile (click) 443846 397649 151 2057 2 0% 0 0 0 62.676733
liquid-render (click) 621784 557264 144 2274 8 0% 0 0 0 62.864075
lobsters (click) 7917040 6603787 3220 50335 72 0% 0 0 0 1711.882799
mail (click) 720759 623026 346 4849 14 0% 0 0 0 142.393178
psych-load (click) 287262 255858 65 650 3 0% 0 0 0 19.946247
railsbench (click) 2998077 2534896 1643 15616 54 0% 0 0 0 447.736506
rubocop (click) 5359391 4552308 2902 47666 105 0% 4 0 0 1415.072682
ruby-lsp (click) 626428 540711 159 2816 14 0% 0 0 0 77.315127
sequel (click) 496857 414477 16 118 0 0% 0 0 0 4.386956
binarytrees (click) 9392 7588 11 75 0 0% 0 0 0 3.004665
blurhash (click) 52697 47824 32 476 0 0% 0 0 0 15.580868
erubi (click) 259087 217427 10 114 0 0% 0 0 0 3.854897
etanni (click) 31783 27950 12 98 0 0% 0 0 0 3.25998
fannkuchredux (click) 24986 25976 9 259 0 0% 0 0 0 7.744093
fluentd (click) 385769 335045 11 111 0 0% 0 0 0 3.576987
graphql (click) 430040 367393 70 670 0 0% 0 0 0 20.485394
graphql-native (click) 395587 337096 41 268 0 0% 0 0 0 8.609811
lee (click) 313620 262149 49 737 0 0% 0 0 0 22.972448
matmul (click) 12586 12175 12 126 0 0% 0 0 0 4.188099
nbody (click) 15213 7657 11 187 0 0% 0 0 0 4.960132
nqueens (click) 23683 17949 10 263 0 0% 0 0 0 7.751318
optcarrot (click) 319946 286129 192 4345 34 0% 0 0 0 103.861295
rack (click) 259958 213048 31 322 0 0% 0 0 0 9.146643
ruby-json (click) 28208 23153 12 200 0 0% 0 0 0 5.901756
rubykon (click) 133942 122908 143 1500 3 0% 0 0 0 41.868059
sudoku (click) 47007 45195 11 507 0 0% 0 0 0 15.311116
tinygql (click) 301039 244904 63 792 5 0% 0 0 0 23.011693
30k_ifelse (click) 5222688 4374316 9264 50815 0 0% 0 0 0 1456.045026
30k_methods (click) 2019699 1594292 5782 19371 0 0% 0 0 0 521.596828
cfunc_itself (click) 7663 5893 9 72 0 0% 0 0 0 2.271829
fib (click) 5017 4633 8 49 0 0% 0 0 0 1.743179
getivar (click) 6102 6023 8 74 0 0% 0 0 0 2.150366
keyword_args (click) 8526 6585 10 74 0 0% 0 0 0 2.515567
respond_to (click) 8415 7843 9 87 0 0% 0 0 0 2.653988
ruby-xor (click) 7544 6739 9 81 0 0% 0 0 0 2.584099
setivar (click) 5253 4604 8 54 0 0% 0 0 0 1.838193
setivar_object (click) 5591 4624 8 54 0 0% 0 0 0 1.771566
setivar_young (click) 6343 5271 9 62 0 0% 0 0 0 2.003819
str_concat (click) 8006 7287 11 87 0 0% 0 0 0 2.841915
throw (click) 7946 6065 10 69 0 0% 0 0 0 2.380378

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.