YJIT Benchmarks

Details for Benchmarks at 2025-08-22 03:50:03 UTC

YJIT metrics from the yjit-bench suite using Ruby 6fbe2dd36e.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 89.5% faster than CRuby 3.5.0dev
  • 5.0% faster than YJIT 3.3.6
On railsbench it is
  • 101.1% faster than CRuby 3.5.0dev
  • 7.2% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 28 minutes
aarch64 runtime: 3 hours, 48 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 85 50 174 50 208
chunky-png 5 31 5 32 50 14 50 26
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 395 50 591 50 526
liquid-compile 5 410 5 470 50 538 50 678
liquid-render 5 172 5 166 50 407 50 375
lobsters 5 20 5 20 50 10 50 10
mail 5 188 5 176 50 249 50 197
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 138 5 141 50 202 50 217
ruby-lsp 5 141 5 146 50 223 50 246
sequel 5 425 5 432 50 598 50 590
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 79 50 146 50 117
blurhash 5 82 5 83 50 127 50 145
erubi 5 70 5 140 50 99 50 137
etanni 5 91 5 96 50 53 50 68
fannkuchredux 5 52 5 57 50 97 50 97
fluentd 5 62 5 62 50 24 50 21
graphql 5 344 5 450 50 472 50 928
graphql-native 5 51 5 78 50 13 50 60
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 48 50 88 50 92
nbody 5 248 5 240 50 585 50 700
nqueens 5 120 5 125 50 74 50 543
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 177 5 184 50 621 50 692
protoboeuf-encode 5 176 5 202 50 327 50 791
rack 5 426 5 437 50 638 50 685
ruby-json 5 83 5 83 50 50 50 49
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 149
tinygql 5 41 5 42 50 43 50 49
30k_ifelse 5 28 5 27 50 216 50 184
30k_methods 5 38 5 38 50 478 50 475
attr_accessor 5 157 5 186 50 1723 50 1882
cfunc_itself 5 359 5 355 50 1135 50 1258
fib 5 127 5 146 50 901 50 931
getivar 5 213 5 297 50 2250 50 2390
keyword_args 5 104 5 108 50 1034 50 1242
loops-times 5 23 5 24 50 48 50 56
object-new 5 319 5 299 50 405 50 437
respond_to 5 134 5 118 50 3255 50 3899
ruby-xor 5 245 5 247 50 800 50 1281
setivar 5 361 5 350 50 3191 50 4923
setivar_object 5 353 5 312 50 671 50 601
setivar_young 5 368 5 316 50 703 50 644
str_concat 5 401 5 436 50 983 50 1193
throw 5 1270 5 1132 50 1715 50 1417

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) 1518950 1295280 203 2569 0 0% 0 0 73.894417
chunky-png (click) 314857 280115 74 1322 1 0% 0 0 39.010427
erubi-rails (click) 1905622 1677052 263 3645 22 0% 0 0 102.627675
hexapdf (click) 1510802 1297364 593 15656 43 0% 0 0 454.726482
liquid-c (click) 538162 481736 114 2217 5 0% 0 0 62.474943
liquid-compile (click) 460346 367422 146 2692 2 0% 0 0 80.547053
liquid-render (click) 639701 551251 131 2933 8 0% 0 0 81.052511
lobsters (click) 8473077 7224094 3118 63154 118 0% 0 0 2142.084298
mail (click) 827311 782385 342 7227 40 0% 0 0 204.683555
psych-load (click) 280952 229566 61 830 2 0% 0 0 24.782445
railsbench (click) 3302301 2826886 1605 19585 47 0% 0 0 561.477191
rubocop (click) 6107400 5261923 3011 63539 156 0% 6 0 1850.315088
ruby-lsp (click) 948990 866131 344 6749 43 0% 1 0 188.893719
sequel (click) 494300 449739 11 119 0 0% 0 0 3.942645
shipit (click) 7569774 6417627 3288 52220 181 0% 0 0 1698.18466
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.614461
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.122617
erubi (click) 244447 218319 5 125 0 0% 0 0 3.802388
etanni (click) 30806 32125 8 108 0 0% 0 0 3.515145
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.168984
fluentd (click) 464261 417050 7 115 0 0% 0 0 3.803834
graphql (click) 399278 322592 73 1919 19 0% 0 0 55.300677
graphql-native (click) 342629 320879 39 532 0 0% 0 0 13.993703
lee (click) 308380 243185 49 1070 0 0% 0 0 32.129036
matmul (click) 11125 4603 8 132 0 0% 0 0 4.246342
nbody (click) 13890 20235 6 238 0 0% 0 0 5.898359
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.458081
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 111.728242
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.569465
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.526974
rack (click) 267175 239924 35 580 0 0% 0 0 15.462073
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.779004
rubyboy (click) 686040 624336 154 6858 42 0% 0 0 173.205063
rubykon (click) 146229 162118 137 2070 3 0% 0 0 57.165729
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.922739
tinygql (click) 297672 250972 59 1031 5 0% 0 0 27.970723
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1953.979809
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 483.32329
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.091446
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.486357
fib (click) 2659 2995 3 30 0 0% 0 0 1.123966
getivar (click) 3812 6802 3 78 0 0% 0 0 1.905248
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.795725
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.756857
object-new (click) 2406 2818 2 36 0 0% 0 0 1.144984
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.112662
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.793982
setivar (click) 2783 3726 3 46 0 0% 0 0 1.237555
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.423459
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.696018
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.458895
throw (click) 5953 4624 5 53 0 0% 0 0 1.813357

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.