YJIT Benchmarks

Details for Benchmarks at 2025-08-14 05:15:45 UTC

YJIT metrics from the yjit-bench suite using Ruby 21be7417d5.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 87.8% faster than CRuby 3.5.0dev
  • 4.7% faster than YJIT 3.3.6
On railsbench it is
  • 99.0% faster than CRuby 3.5.0dev
  • 3.8% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 29 minutes
aarch64 runtime: 3 hours, 49 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 83 50 156 50 165
chunky-png 5 31 5 32 50 14 50 25
erubi-rails 5 16 5 14 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 405 5 420 50 598 50 594
liquid-compile 5 408 5 465 50 540 50 681
liquid-render 5 172 5 167 50 415 50 383
lobsters 5 19 5 20 50 10 50 10
mail 5 195 5 177 50 250 50 201
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 141 5 142 50 202 50 219
ruby-lsp 5 142 5 146 50 227 50 247
sequel 5 431 5 435 50 594 50 599
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 79 50 146 50 117
blurhash 5 82 5 86 50 127 50 145
erubi 5 125 5 142 50 99 50 141
etanni 5 90 5 97 50 53 50 68
fannkuchredux 5 52 5 56 50 97 50 94
fluentd 5 62 5 63 50 24 50 24
graphql 5 336 5 457 50 463 50 916
graphql-native 5 51 5 77 50 13 50 61
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 49 50 88 50 90
nbody 5 248 5 234 50 585 50 705
nqueens 5 120 5 127 50 74 50 548
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 182 50 622 50 688
protoboeuf-encode 5 178 5 196 50 327 50 792
rack 5 421 5 445 50 642 50 694
ruby-json 5 83 5 84 50 50 50 50
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 20 5 21 50 10 50 10
sudoku 5 48 5 51 50 163 50 149
tinygql 5 41 5 43 50 43 50 49
30k_ifelse 5 28 5 27 50 216 50 185
30k_methods 5 38 5 38 50 480 50 472
attr_accessor 5 157 5 180 50 1722 50 1872
cfunc_itself 5 358 5 352 50 1137 50 1258
fib 5 127 5 144 50 902 50 931
getivar 5 211 5 311 50 2252 50 2400
keyword_args 5 104 5 105 50 1034 50 1242
loops-times 5 24 5 25 50 48 50 55
object-new 5 318 5 301 50 405 50 435
respond_to 5 134 5 138 50 3255 50 3894
ruby-xor 5 245 5 237 50 799 50 1280
setivar 5 361 5 345 50 3191 50 4917
setivar_object 5 354 5 308 50 683 50 599
setivar_young 5 367 5 311 50 704 50 644
str_concat 5 397 5 446 50 984 50 1198
throw 5 1271 5 1134 50 1734 50 1413

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) 1506164 1352245 206 2590 0 0% 0 0 74.800631
chunky-png (click) 314898 263740 74 1322 1 0% 0 0 38.504509
erubi-rails (click) 1893292 1690057 262 3704 22 0% 0 0 102.581393
hexapdf (click) 1498915 1333823 593 15652 43 0% 0 0 450.572791
liquid-c (click) 533101 412243 114 2224 5 0% 0 0 62.995917
liquid-compile (click) 460704 368064 146 2698 2 0% 0 0 79.806829
liquid-render (click) 645151 548722 131 2933 8 0% 0 0 80.71347
lobsters (click) 8548442 7247183 3161 63849 118 0% 0 0 2144.446078
mail (click) 827604 815501 342 7227 40 0% 0 0 204.760625
psych-load (click) 278709 212284 61 830 2 0% 0 0 24.342757
railsbench (click) 3331884 2877059 1649 20164 58 0% 0 0 571.653582
rubocop (click) 6108357 5295035 3011 63542 155 0% 6 0 1878.332171
ruby-lsp (click) 943618 852586 345 6778 44 0% 1 0 186.743122
sequel (click) 494300 449739 11 119 0 0% 0 0 3.843293
shipit (click) 7200837 6184460 3391 54029 212 0% 0 0 1747.522446
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.617531
blurhash (click) 52295 51444 27 603 0 0% 0 0 17.955625
erubi (click) 243809 225966 5 125 0 0% 0 0 3.9175
etanni (click) 30806 32125 8 108 0 0% 0 0 3.556012
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.1477
fluentd (click) 463033 424191 7 115 0 0% 0 0 3.770202
graphql (click) 398416 346527 73 1919 19 0% 0 0 55.604602
graphql-native (click) 343451 321539 39 532 0 0% 0 0 14.190124
lee (click) 297086 239313 49 1070 0 0% 0 0 32.219503
matmul (click) 11125 4603 8 132 0 0% 0 0 4.172821
nbody (click) 13890 20235 6 238 0 0% 0 0 5.839883
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.324072
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 111.789753
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.471787
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.933289
rack (click) 257060 237784 35 580 0 0% 0 0 15.446573
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.682695
rubyboy (click) 685963 607859 154 6858 42 0% 0 0 174.245938
rubykon (click) 148508 140471 137 2101 3 0% 0 0 57.334687
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.856262
tinygql (click) 287083 247649 59 1031 5 0% 0 0 26.903558
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1943.674457
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 478.979485
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.070442
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.464545
fib (click) 2659 2995 3 30 0 0% 0 0 1.118587
getivar (click) 3812 6802 3 78 0 0% 0 0 1.946081
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.777633
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.769248
object-new (click) 2406 2818 2 36 0 0% 0 0 1.07033
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.124615
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.742219
setivar (click) 2783 3726 3 46 0 0% 0 0 1.228209
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.39103
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.698862
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.431427
throw (click) 5953 4624 5 53 0 0% 0 0 1.763008

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.