YJIT Benchmarks

Details for Benchmarks at 2024-12-29 03:45:47 UTC

YJIT metrics from the yjit-bench suite using Ruby a33c944ba8.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 90.6% faster than CRuby 3.5.0dev
  • 6.9% faster than YJIT 3.3.6
On railsbench it is
  • 90.7% faster than CRuby 3.5.0dev
  • the same speed as YJIT 3.3.6
x86_64 runtime: 3 hours, 51 minutes
aarch64 runtime: 3 hours, 20 minutes

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.3.6 warmups CRuby 3.3.6 iters CRuby 3.5.0dev warmups CRuby 3.5.0dev iters YJIT 3.3.6 warmups YJIT 3.3.6 iters YJIT 3.5.0dev warmups YJIT 3.5.0dev iters
activerecord 5 81 5 83 50 150 50 161
chunky-png 5 32 5 32 50 15 50 34
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 408 5 424 50 575 50 623
liquid-compile 5 411 5 409 50 547 50 554
liquid-render 5 170 5 170 50 407 50 434
lobsters 5 20 5 20 50 10 50 10
mail 5 190 5 185 50 252 50 251
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 156 50 252 50 266
ruby-lsp 5 158 5 158 50 204 50 271
sequel 5 419 5 421 50 596 50 586
binarytrees 5 84 5 82 50 144 50 140
blurhash 5 82 5 82 50 127 50 145
erubi 5 116 5 146 50 99 50 150
etanni 5 91 5 97 50 54 50 72
fannkuchredux 5 52 5 55 50 101 50 103
fluentd 5 63 5 72 50 25 50 29
graphql 5 84 5 86 50 57 50 56
graphql-native 5 49 5 53 50 10 50 15
lee 5 22 5 23 50 10 50 10
loops-times 5 24 5 23 50 48 50 65
matmul 5 51 5 51 50 85 50 98
nbody 5 248 5 258 50 577 50 703
nqueens 5 116 5 120 50 75 50 564
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 175 50 620 50 719
protoboeuf-encode 5 179 5 197 50 328 50 826
rack 5 573 5 629 50 950 50 1037
ruby-json 5 84 5 84 50 49 50 50
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 164 50 160
tinygql 5 36 5 37 50 23 50 28
30k_ifelse 5 28 5 28 50 215 50 207
30k_methods 5 39 5 39 50 484 50 475
cfunc_itself 5 346 5 329 50 1046 50 1145
fib 5 127 5 127 50 909 50 937
getivar 5 207 5 217 50 2255 50 2628
keyword_args 5 106 5 104 50 959 50 1134
object-new 5 321 5 310 50 404 50 378
respond_to 5 133 5 141 50 3261 50 3983
ruby-xor 5 241 5 245 50 804 50 1384
setivar 5 358 5 358 50 3128 50 5712
setivar_object 5 374 5 341 50 746 50 851
setivar_young 5 373 5 344 50 768 50 851
str_concat 5 401 5 392 50 970 50 1182
throw 5 1258 5 1265 50 1739 50 1701

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) 1416882 1197167 210 2207 0 0% 0 0 64.772037
chunky-png (click) 304438 268033 85 1127 1 0% 0 0 33.398918
erubi-rails (click) 1904578 1586751 259 2968 19 0% 0 0 81.519436
hexapdf (click) 1443211 1302822 596 13145 41 0% 0 0 377.279417
liquid-c (click) 479481 437411 115 1750 5 0% 0 0 48.767104
liquid-compile (click) 408766 343053 147 2087 2 0% 0 0 65.663597
liquid-render (click) 586844 487695 132 2315 8 0% 0 0 65.214938
lobsters (click) 8113039 6817799 3213 52500 169 0% 0 0 1797.042847
mail (click) 730669 644381 343 5321 14 0% 0 0 154.195394
psych-load (click) 273764 240429 62 620 3 0% 0 0 19.209246
railsbench (click) 3239123 2842970 1642 16186 52 0% 0 0 474.257373
rubocop (click) 5668675 4868668 2888 50556 110 0% 4 0 1485.562238
ruby-lsp (click) 833653 754023 306 4737 24 0% 0 0 132.65062
sequel (click) 449701 369132 12 97 0 0% 0 0 3.657502
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.35078
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.276255
erubi (click) 233869 212685 6 100 0 0% 0 0 3.284342
etanni (click) 31129 29637 8 87 0 0% 0 0 2.979089
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.451602
fluentd (click) 372063 333402 8 96 0 0% 0 0 3.350749
graphql (click) 392647 345083 67 679 0 0% 0 0 20.933745
graphql-native (click) 394685 353888 38 258 0 0% 0 0 8.838523
lee (click) 277756 239859 46 749 0 0% 0 0 23.507773
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.395648
matmul (click) 10988 3769 9 112 0 0% 0 0 3.672528
nbody (click) 13396 17343 7 175 0 0% 0 0 4.521807
nqueens (click) 20494 27605 6 242 0 0% 0 0 7.061711
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 103.218635
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.630637
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.604577
rack (click) 230624 221098 33 388 0 0% 0 0 10.287804
ruby-json (click) 24498 21285 9 181 0 0% 0 0 5.063064
rubykon (click) 135230 146429 138 1500 3 0% 0 0 42.871905
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.453252
tinygql (click) 264338 224853 59 765 5 0% 0 0 21.804178
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1417.586181
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 452.928429
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.46417
fib (click) 2930 3118 4 29 0 0% 0 0 1.157643
getivar (click) 3832 4970 4 54 0 0% 0 0 1.454878
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.783781
object-new (click) 2264 2350 3 25 0 0% 0 0 0.919152
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.917922
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 1.960766
setivar (click) 2983 3646 4 34 0 0% 0 0 1.142119
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.205877
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.489308
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.122406
throw (click) 6179 4548 6 49 0 0% 0 0 1.701019

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.