YJIT Benchmarks

Details for Benchmarks at 2025-06-09 03:57:34 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 94.7% faster than CRuby 3.5.0dev
  • 5.9% faster than YJIT 3.3.6
On railsbench it is
  • 102.5% faster than CRuby 3.5.0dev
  • 4.0% 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 82 5 76 50 157 50 168
chunky-png 5 31 5 32 50 14 50 26
erubi-rails 5 16 5 14 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 418 5 417 50 594 50 596
liquid-compile 5 407 5 444 50 540 50 696
liquid-render 5 169 5 171 50 405 50 436
lobsters 5 19 5 19 50 10 50 10
mail 5 194 5 176 50 236 50 221
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 153 50 251 50 257
ruby-lsp 5 158 5 151 50 259 50 249
sequel 5 426 5 415 50 596 50 584
binarytrees 5 84 5 81 50 146 50 121
blurhash 5 82 5 87 50 127 50 145
erubi 5 125 5 132 50 87 50 152
etanni 5 90 5 101 50 53 50 70
fannkuchredux 5 52 5 57 50 97 50 101
fluentd 5 63 5 64 50 25 50 28
graphql 5 85 5 82 50 57 50 55
graphql-native 5 40 5 44 50 10 50 15
lee 5 22 5 23 50 10 50 10
matmul 5 51 5 51 50 88 50 91
nbody 5 249 5 240 50 584 50 627
nqueens 5 120 5 112 50 75 50 523
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 154 50 620 50 730
protoboeuf-encode 5 179 5 205 50 327 50 787
rack 5 586 5 624 50 957 50 1042
ruby-json 5 84 5 83 50 50 50 49
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 22 50 10 50 10
sudoku 5 48 5 51 50 163 50 150
tinygql 5 36 5 35 50 23 50 33
30k_ifelse 5 28 5 27 50 215 50 185
30k_methods 5 39 5 38 50 480 50 474
cfunc_itself 5 359 5 358 50 1147 50 1258
fib 5 127 5 140 50 902 50 931
getivar 5 213 5 289 50 2252 50 2374
keyword_args 5 104 5 109 50 1041 50 1243
loops-times 5 24 5 26 50 48 50 56
object-new 5 322 5 358 50 405 50 598
respond_to 5 133 5 135 50 3257 50 3901
ruby-xor 5 245 5 249 50 800 50 1293
setivar 5 361 5 405 50 3192 50 4981
setivar_object 5 354 5 395 50 671 50 626
setivar_young 5 368 5 394 50 700 50 657
str_concat 5 406 5 463 50 979 50 1156
throw 5 1271 5 1276 50 1727 50 1700

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) 1496189 1251108 206 2590 0 0% 0 0 75.235759
chunky-png (click) 308228 301423 74 1322 1 0% 0 0 39.099971
erubi-rails (click) 1974490 1771725 262 3712 21 0% 0 0 101.822302
hexapdf (click) 1481122 1325167 593 15610 38 0% 0 0 452.704364
liquid-c (click) 513142 437725 114 2217 5 0% 0 0 60.880398
liquid-compile (click) 430355 383991 146 2716 2 0% 0 0 80.241588
liquid-render (click) 623000 572474 131 2933 8 0% 0 0 80.926846
lobsters (click) 8563400 7253020 3169 64172 118 0% 0 0 2155.982923
mail (click) 824044 798103 342 7227 40 0% 0 0 205.855288
psych-load (click) 261235 236944 61 825 3 0% 0 0 24.359081
railsbench (click) 3398423 2917884 1653 20175 56 0% 0 0 579.705251
rubocop (click) 5893248 5093947 2885 61707 114 0% 4 0 1833.830664
ruby-lsp (click) 892677 787975 305 5956 29 0% 0 0 163.609703
sequel (click) 479734 412190 11 114 0 0% 0 0 3.899336
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.655093
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.313334
erubi (click) 238117 196770 5 125 0 0% 0 0 3.916402
etanni (click) 30806 32125 8 108 0 0% 0 0 3.514081
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.167681
fluentd (click) 394120 289523 7 115 0 0% 0 0 3.830905
graphql (click) 431958 379723 66 1035 0 0% 0 0 28.439329
graphql-native (click) 376222 304554 37 399 0 0% 0 0 11.015647
lee (click) 293991 213715 45 1012 0 0% 0 0 30.552148
matmul (click) 11125 4603 8 132 0 0% 0 0 4.231179
nbody (click) 13890 20235 6 238 0 0% 0 0 5.873604
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.383796
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 112.303322
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.289483
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.794196
rack (click) 243285 191273 31 496 0 0% 0 0 13.511525
ruby-json (click) 20449 18419 8 204 0 0% 0 0 5.771201
rubyboy (click) 704238 635920 177 6919 40 0% 0 0 175.50677
rubykon (click) 146441 162602 137 2076 3 0% 0 0 57.470917
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.966801
tinygql (click) 297725 270184 58 977 5 0% 0 0 26.991977
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1964.395819
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 491.364305
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.507056
fib (click) 2659 2995 3 30 0 0% 0 0 1.03203
getivar (click) 3812 6802 3 78 0 0% 0 0 1.882073
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.804285
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.786403
object-new (click) 2406 2818 2 36 0 0% 0 0 1.126115
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.057105
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.711923
setivar (click) 2783 3726 3 46 0 0% 0 0 1.213681
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.450811
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.707065
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.484333
throw (click) 5953 4624 5 53 0 0% 0 0 1.819673

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.