YJIT Benchmarks

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

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 90.2% faster than CRuby 3.5.0dev
  • 4.7% faster than YJIT 3.3.6
On railsbench it is
  • 99.7% faster than CRuby 3.5.0dev
  • 6.7% 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 85 50 175 50 193
chunky-png 5 31 5 33 50 14 50 25
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 420 5 390 50 597 50 539
liquid-compile 5 411 5 463 50 552 50 711
liquid-render 5 170 5 169 50 413 50 385
lobsters 5 19 5 19 50 10 50 10
mail 5 189 5 175 50 249 50 200
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 136 5 141 50 206 50 216
ruby-lsp 5 144 5 147 50 236 50 245
sequel 5 435 5 431 50 592 50 591
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 80 50 146 50 117
blurhash 5 82 5 87 50 127 50 145
erubi 5 71 5 139 50 100 50 138
etanni 5 90 5 96 50 53 50 68
fannkuchredux 5 52 5 57 50 98 50 93
fluentd 5 62 5 63 50 24 50 22
graphql 5 337 5 456 50 462 50 919
graphql-native 5 52 5 78 50 13 50 64
lee 5 23 5 23 50 10 50 10
matmul 5 51 5 50 50 88 50 91
nbody 5 249 5 232 50 585 50 705
nqueens 5 120 5 127 50 74 50 550
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 186 50 621 50 686
protoboeuf-encode 5 179 5 202 50 327 50 805
rack 5 421 5 441 50 646 50 689
ruby-json 5 83 5 84 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 40 5 43 50 42 50 48
30k_ifelse 5 28 5 27 50 216 50 185
30k_methods 5 38 5 38 50 481 50 474
attr_accessor 5 158 5 184 50 1722 50 1878
cfunc_itself 5 354 5 373 50 1137 50 1258
fib 5 127 5 145 50 902 50 931
getivar 5 213 5 299 50 2251 50 2392
keyword_args 5 104 5 105 50 1034 50 1243
loops-times 5 24 5 25 50 48 50 56
object-new 5 318 5 303 50 404 50 432
respond_to 5 133 5 137 50 3256 50 3898
ruby-xor 5 245 5 253 50 800 50 1281
setivar 5 361 5 342 50 3190 50 4915
setivar_object 5 353 5 295 50 671 50 596
setivar_young 5 367 5 299 50 703 50 636
str_concat 5 397 5 455 50 979 50 1203
throw 5 1275 5 1139 50 1722 50 1431

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) 1520198 1296272 203 2569 0 0% 0 0 75.014119
chunky-png (click) 314898 263740 74 1322 1 0% 0 0 39.11778
erubi-rails (click) 1915330 1590106 262 3706 22 0% 0 0 104.888037
hexapdf (click) 1500880 1229289 593 15629 43 0% 0 0 453.66623
liquid-c (click) 537874 489612 114 2217 5 0% 0 0 62.599908
liquid-compile (click) 463475 395311 146 2734 2 0% 0 0 82.266896
liquid-render (click) 644284 523240 131 2933 8 0% 0 0 80.953817
lobsters (click) 8549902 7231662 3163 63950 118 0% 0 0 2183.343802
mail (click) 830016 801050 342 7233 40 0% 0 0 208.288177
psych-load (click) 273221 221094 61 830 2 0% 0 0 25.488016
railsbench (click) 3378134 2914621 1668 20471 57 0% 0 0 587.399501
rubocop (click) 6108330 5237532 3011 63535 155 0% 6 0 1852.039234
ruby-lsp (click) 952758 902490 345 6778 44 0% 1 0 191.648908
sequel (click) 488269 421128 11 119 0 0% 0 0 3.996174
shipit (click) 7679653 6510927 3372 53812 209 0% 0 0 1747.37621
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.622825
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.061635
erubi (click) 233975 198710 5 125 0 0% 0 0 3.918167
etanni (click) 30806 32125 8 108 0 0% 0 0 3.568688
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.167641
fluentd (click) 464261 392425 7 115 0 0% 0 0 3.802954
graphql (click) 400100 347848 73 1919 19 0% 0 0 55.819972
graphql-native (click) 343385 280521 39 532 0 0% 0 0 14.181871
lee (click) 308380 300529 49 1070 0 0% 0 0 32.033138
matmul (click) 11125 4603 8 132 0 0% 0 0 4.227695
nbody (click) 13890 20235 6 238 0 0% 0 0 5.872069
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.362108
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 111.967326
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.838256
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.740992
rack (click) 272055 245012 35 580 0 0% 0 0 15.201107
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.778656
rubyboy (click) 685885 583198 154 6860 42 0% 0 0 173.574164
rubykon (click) 148508 140471 137 2101 3 0% 0 0 57.616621
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.953456
tinygql (click) 297965 242967 59 1025 5 0% 0 0 28.040276
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1958.863264
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 483.352302
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.049176
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.447389
fib (click) 2659 2995 3 30 0 0% 0 0 1.078338
getivar (click) 3812 6802 3 78 0 0% 0 0 1.893229
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.786107
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.749296
object-new (click) 2406 2818 2 36 0 0% 0 0 1.097747
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.152681
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.753485
setivar (click) 2783 3726 3 46 0 0% 0 0 1.243165
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.414509
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.731376
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.453864
throw (click) 5953 4624 5 53 0 0% 0 0 1.805651

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.