YJIT Benchmarks

Details for Benchmarks at 2025-06-15 03:57:30 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 92.3% faster than CRuby 3.5.0dev
  • 4.6% faster than YJIT 3.3.6
On railsbench it is
  • 104.8% faster than CRuby 3.5.0dev
  • 7.8% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 27 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 83 5 74 50 155 50 159
chunky-png 5 31 5 32 50 14 50 24
erubi-rails 5 16 5 14 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 408 5 412 50 585 50 609
liquid-compile 5 407 5 446 50 541 50 689
liquid-render 5 169 5 172 50 401 50 427
lobsters 5 19 5 19 50 10 50 10
mail 5 188 5 176 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 156 5 153 50 251 50 252
ruby-lsp 5 161 5 149 50 245 50 260
sequel 5 427 5 417 50 567 50 580
binarytrees 5 84 5 80 50 146 50 118
blurhash 5 82 5 83 50 127 50 145
erubi 5 115 5 140 50 97 50 152
etanni 5 90 5 101 50 53 50 71
fannkuchredux 5 52 5 57 50 98 50 104
fluentd 5 63 5 59 50 25 50 28
graphql 5 85 5 82 50 57 50 54
graphql-native 5 40 5 46 50 10 50 15
lee 5 23 5 21 50 10 50 10
matmul 5 51 5 53 50 88 50 91
nbody 5 249 5 253 50 585 50 687
nqueens 5 120 5 123 50 75 50 526
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 161 50 621 50 729
protoboeuf-encode 5 179 5 198 50 327 50 790
rack 5 578 5 614 50 957 50 1025
ruby-json 5 84 5 82 50 50 50 47
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 36 5 34 50 22 50 32
30k_ifelse 5 28 5 27 50 215 50 184
30k_methods 5 39 5 38 50 478 50 477
cfunc_itself 5 357 5 341 50 1147 50 1258
fib 5 127 5 142 50 902 50 931
getivar 5 213 5 305 50 2251 50 2393
keyword_args 5 104 5 111 50 1041 50 1243
loops-times 5 24 5 25 50 48 50 56
object-new 5 323 5 359 50 405 50 579
respond_to 5 133 5 135 50 3256 50 3897
ruby-xor 5 245 5 242 50 799 50 1295
setivar 5 361 5 371 50 3189 50 4942
setivar_object 5 353 5 346 50 671 50 587
setivar_young 5 368 5 345 50 703 50 604
str_concat 5 400 5 453 50 980 50 1191
throw 5 1273 5 1265 50 1720 50 1717

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) 1519452 1263666 206 2590 0 0% 0 0 76.271462
chunky-png (click) 334789 292985 74 1330 1 0% 0 0 39.335548
erubi-rails (click) 1984551 1731507 262 3633 21 0% 0 0 99.902081
hexapdf (click) 1495323 1332230 593 15683 40 0% 0 0 457.006829
liquid-c (click) 498390 464335 114 2217 5 0% 0 0 60.816376
liquid-compile (click) 428786 390871 146 2760 2 0% 0 0 82.482954
liquid-render (click) 608519 509195 131 2933 8 0% 0 0 81.043678
lobsters (click) 8529972 7092067 3169 63808 118 0% 0 0 2176.707026
mail (click) 797903 757407 342 7227 40 0% 0 0 204.355252
psych-load (click) 296499 269836 61 825 3 0% 0 0 24.443777
railsbench (click) 3373098 2994246 1653 20202 56 0% 0 0 614.476807
rubocop (click) 5920742 5168308 2885 61707 114 0% 4 0 1788.379599
ruby-lsp (click) 890194 785928 305 5956 29 0% 0 0 167.715978
sequel (click) 481112 420703 11 114 0 0% 0 0 3.821827
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.616338
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.421063
erubi (click) 240761 192889 5 125 0 0% 0 0 3.946319
etanni (click) 30806 32125 8 108 0 0% 0 0 3.511142
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.151574
fluentd (click) 389788 350426 7 115 0 0% 0 0 3.830894
graphql (click) 430551 380016 66 1035 0 0% 0 0 28.137913
graphql-native (click) 388557 356659 37 399 0 0% 0 0 11.060493
lee (click) 320142 253606 45 1012 0 0% 0 0 30.263755
matmul (click) 11125 4603 8 132 0 0% 0 0 4.267006
nbody (click) 13890 20235 6 238 0 0% 0 0 5.839619
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.294489
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 112.424232
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 75.420495
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.815191
rack (click) 249061 172723 31 496 0 0% 0 0 13.269938
ruby-json (click) 24676 22156 8 204 0 0% 0 0 5.854736
rubyboy (click) 730819 665876 177 6919 40 0% 0 0 178.752001
rubykon (click) 146441 162602 137 2076 3 0% 0 0 57.400535
sudoku (click) 52157 66291 7 871 0 0% 0 0 24.120693
tinygql (click) 289684 244241 58 977 5 0% 0 0 27.376986
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1974.352883
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 493.173274
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.478305
fib (click) 2659 2995 3 30 0 0% 0 0 1.080573
getivar (click) 3812 6802 3 78 0 0% 0 0 1.896505
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.778775
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.716017
object-new (click) 2406 2818 2 36 0 0% 0 0 1.134653
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.095338
ruby-xor (click) 5863 8622 4 100 0 0% 0 0 2.721334
setivar (click) 2783 3726 3 46 0 0% 0 0 1.225418
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.404326
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.686287
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.482401
throw (click) 5953 4624 5 53 0 0% 0 0 1.832999

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.