YJIT Benchmarks

Details for Benchmarks at 2025-06-27 03:56:05 UTC

YJIT metrics from the yjit-bench suite using Ruby 8bba087ae5.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 91.2% faster than CRuby 3.5.0dev
  • 3.5% faster than YJIT 3.3.6
On railsbench it is
  • 105.3% faster than CRuby 3.5.0dev
  • 4.9% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 27 minutes
aarch64 runtime: 3 hours, 45 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 83 5 74 50 158 50 159
chunky-png 5 31 5 31 50 15 50 22
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 410 5 420 50 587 50 604
liquid-compile 5 406 5 449 50 539 50 695
liquid-render 5 169 5 171 50 403 50 421
lobsters 5 20 5 19 50 10 50 10
mail 5 195 5 173 50 250 50 193
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 155 50 248 50 257
ruby-lsp 5 156 5 152 50 256 50 257
sequel 5 427 5 420 50 598 50 582
binarytrees 5 84 5 80 50 146 50 117
blurhash 5 82 5 87 50 127 50 144
erubi 5 124 5 138 50 98 50 140
etanni 5 90 5 101 50 53 50 70
fannkuchredux 5 52 5 58 50 97 50 95
fluentd 5 63 5 61 50 25 50 29
graphql 5 85 5 82 50 58 50 54
graphql-native 5 39 5 45 50 10 50 16
lee 5 23 5 22 50 10 50 10
matmul 5 51 5 51 50 88 50 86
nbody 5 249 5 241 50 585 50 691
nqueens 5 120 5 123 50 75 50 565
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 156 50 620 50 754
protoboeuf-encode 5 178 5 196 50 327 50 814
rack 5 582 5 602 50 932 50 1039
ruby-json 5 83 5 82 50 49 50 48
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 51 50 163 50 150
tinygql 5 35 5 33 50 22 50 30
30k_ifelse 5 28 5 27 50 215 50 186
30k_methods 5 38 5 38 50 468 50 477
cfunc_itself 5 359 5 350 50 1147 50 1258
fib 5 127 5 142 50 902 50 935
getivar 5 213 5 325 50 2252 50 2405
keyword_args 5 104 5 107 50 1041 50 1243
loops-times 5 24 5 23 50 48 50 55
object-new 5 322 5 350 50 405 50 567
respond_to 5 134 5 142 50 3257 50 3935
ruby-xor 5 245 5 244 50 799 50 1296
setivar 5 361 5 360 50 3185 50 4918
setivar_object 5 354 5 344 50 670 50 633
setivar_young 5 368 5 344 50 702 50 648
str_concat 5 400 5 410 50 984 50 1093
throw 5 1271 5 1271 50 1725 50 1701

Different Ruby configurations want different amounts of warmup. With no JIT, CRuby needs hardly any. YJIT warms up fairly quickly, while some JITs may start slower as they do more advanced compilation.

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) 1548790 1312730 206 2590 0 0% 0 0 75.846964
chunky-png (click) 371593 307392 74 1322 1 0% 0 0 39.221906
erubi-rails (click) 2013205 1772606 262 3689 21 0% 0 0 102.60393
hexapdf (click) 1555004 1333775 594 15620 43 0% 0 0 454.731714
liquid-c (click) 567884 549339 114 2217 5 0% 0 0 62.936401
liquid-compile (click) 493998 430492 146 2690 2 0% 0 0 79.019457
liquid-render (click) 680352 662821 131 2933 8 0% 0 0 82.288763
lobsters (click) 8559781 7397504 3169 63719 118 0% 0 0 2170.132092
mail (click) 854214 805479 342 7227 40 0% 0 0 205.469289
psych-load (click) 321525 306955 61 831 3 0% 0 0 25.01162
railsbench (click) 3428380 3049277 1655 20188 56 0% 0 0 581.731538
rubocop (click) 5952426 5286399 2886 61705 115 0% 4 0 1821.091129
ruby-lsp (click) 923299 829865 305 5956 29 0% 0 0 166.06493
sequel (click) 545008 469017 11 115 0 0% 0 0 3.828466
binarytrees (click) 152249 149612 6 64 0 0% 0 0 2.623614
blurhash (click) 197266 185948 27 603 0 0% 0 0 18.048579
erubi (click) 300892 278115 5 125 0 0% 0 0 3.951331
etanni (click) 174395 165261 7 98 0 0% 0 0 3.143993
fannkuchredux (click) 169717 175457 3 399 0 0% 0 0 11.058789
fluentd (click) 445814 348143 7 115 0 0% 0 0 3.826704
graphql (click) 498942 472401 66 1035 0 0% 0 0 29.000604
graphql-native (click) 452488 429902 37 399 0 0% 0 0 11.010121
lee (click) 361205 338619 45 1012 0 0% 0 0 30.769446
matmul (click) 156096 147299 8 132 0 0% 0 0 4.146429
nbody (click) 158861 162931 6 238 0 0% 0 0 5.854931
nqueens (click) 167623 171464 5 387 0 0% 0 0 10.313322
optcarrot (click) 470405 424615 188 4740 34 0% 0 0 113.743014
protoboeuf (click) 314557 401678 11 2828 0 0% 0 0 75.901652
protoboeuf-encode (click) 387224 458397 13 1805 0 0% 0 0 46.555185
rack (click) 318161 314730 31 496 0 0% 0 0 13.301743
ruby-json (click) 169667 158143 8 204 0 0% 0 0 5.74255
rubyboy (click) 762443 710254 177 6962 40 0% 0 0 179.002876
rubykon (click) 289622 278524 135 2052 3 0% 0 0 56.811655
sudoku (click) 196554 200084 6 863 0 0% 0 0 23.905653
tinygql (click) 352616 308004 58 977 5 0% 0 0 27.414402
30k_ifelse (click) 6364929 5068920 9259 75432 0 0% 0 0 1981.596946
30k_methods (click) 2379542 1735613 5778 19357 0 0% 0 0 494.981215
cfunc_itself (click) 150098 146851 4 53 0 0% 0 0 1.434734
fib (click) 147630 145691 3 30 0 0% 0 0 1.018521
getivar (click) 148788 149503 3 78 0 0% 0 0 1.890356
keyword_args (click) 151308 147666 5 56 0 0% 0 0 1.758853
loops-times (click) 151948 150714 5 93 0 0% 0 0 2.761323
object-new (click) 147377 145514 2 36 0 0% 0 0 1.046039
respond_to (click) 151427 149520 4 80 0 0% 0 0 2.05223
ruby-xor (click) 150834 151318 4 100 0 0% 0 0 2.752103
setivar (click) 147754 146422 3 46 0 0% 0 0 1.180839
setivar_object (click) 148373 146652 3 49 0 0% 0 0 1.348817
setivar_young (click) 149271 147563 4 63 0 0% 0 0 1.653678
str_concat (click) 150823 149734 6 82 0 0% 0 0 2.431002
throw (click) 150929 147325 5 53 0 0% 0 0 1.842548

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.