YJIT Benchmarks

Details for Benchmarks at 2025-05-28 03:52:19 UTC

YJIT metrics from the yjit-bench suite using Ruby 28860842cf.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 89.7% faster than CRuby 3.5.0dev
  • 6.3% faster than YJIT 3.3.6
On railsbench it is
  • 98.7% faster than CRuby 3.5.0dev
  • 6.8% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 26 minutes
aarch64 runtime: 3 hours, 44 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 83 50 157 50 155
chunky-png 5 31 5 32 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 419 5 425 50 587 50 619
liquid-compile 5 407 5 464 50 544 50 698
liquid-render 5 169 5 171 50 405 50 444
lobsters 5 19 5 19 50 10 50 10
mail 5 194 5 176 50 249 50 219
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 154 50 251 50 255
ruby-lsp 5 145 5 156 50 240 50 247
sequel 5 414 5 424 50 568 50 588
binarytrees 5 84 5 83 50 146 50 134
blurhash 5 82 5 88 50 127 50 145
erubi 5 114 5 133 50 98 50 146
etanni 5 90 5 97 50 53 50 69
fannkuchredux 5 52 5 58 50 97 50 107
fluentd 5 63 5 63 50 25 50 29
graphql 5 84 5 86 50 58 50 58
graphql-native 5 40 5 53 50 10 50 17
lee 5 23 5 24 50 10 50 10
matmul 5 51 5 52 50 88 50 98
nbody 5 249 5 259 50 585 50 696
nqueens 5 120 5 125 50 72 50 554
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 173 5 183 50 621 50 719
protoboeuf-encode 5 179 5 209 50 328 50 774
rack 5 580 5 637 50 963 50 1054
ruby-json 5 84 5 83 50 50 50 49
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 159
tinygql 5 36 5 39 50 22 50 32
30k_ifelse 5 28 5 27 50 215 50 185
30k_methods 5 39 5 38 50 481 50 475
cfunc_itself 5 359 5 342 50 1137 50 1258
fib 5 127 5 140 50 902 50 931
getivar 5 213 5 299 50 2250 50 2400
keyword_args 5 104 5 109 50 1034 50 1243
loops-times 5 24 5 27 50 48 50 62
object-new 5 322 5 353 50 405 50 532
respond_to 5 134 5 136 50 3258 50 3898
ruby-xor 5 246 5 252 50 800 50 1294
setivar 5 361 5 621 50 3185 50 5105
setivar_object 5 353 5 431 50 669 50 602
setivar_young 5 368 5 431 50 701 50 618
str_concat 5 400 5 458 50 984 50 1126
throw 5 1268 5 1296 50 1709 50 1686

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) 1488503 1246723 206 2590 0 0% 0 0 75.859296
chunky-png (click) 304547 266075 74 1330 1 0% 0 0 38.968869
erubi-rails (click) 1967898 1733873 262 3651 21 0% 0 0 101.159671
hexapdf (click) 1478143 1251659 593 15629 35 0% 0 0 456.334932
liquid-c (click) 527849 490889 114 2217 5 0% 0 0 61.005097
liquid-compile (click) 451551 402112 146 2682 2 0% 0 0 79.126758
liquid-render (click) 604561 587995 131 2933 8 0% 0 0 81.768715
lobsters (click) 8500066 7095354 3172 63543 120 0% 0 0 2147.368181
mail (click) 816025 808032 342 7227 40 0% 0 0 206.16003
psych-load (click) 261222 238853 61 825 3 0% 0 0 24.63294
railsbench (click) 3386915 2940921 1653 20165 56 0% 0 0 614.453966
rubocop (click) 5914208 4917412 2885 61690 113 0% 4 0 1826.435311
ruby-lsp (click) 855036 731055 305 5956 29 0% 0 0 165.087292
sequel (click) 480439 422366 11 114 0 0% 0 0 4.06674
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.636167
blurhash (click) 52289 51444 27 603 0 0% 0 0 18.245635
erubi (click) 261423 203861 5 125 0 0% 0 0 3.878811
etanni (click) 30806 32125 8 108 0 0% 0 0 3.539674
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.080359
fluentd (click) 392089 360019 7 115 0 0% 0 0 3.81278
graphql (click) 426415 392825 66 1035 0 0% 0 0 28.374526
graphql-native (click) 383981 352772 37 399 0 0% 0 0 11.131955
lee (click) 292331 238475 45 1012 0 0% 0 0 30.583799
matmul (click) 11125 4603 8 132 0 0% 0 0 4.25752
nbody (click) 13890 20235 6 238 0 0% 0 0 5.84544
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.342014
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 116.693955
protoboeuf (click) 170142 177773 12 2836 0 0% 0 0 75.800555
protoboeuf-encode (click) 243031 283791 14 1815 0 0% 0 0 46.53205
rack (click) 276863 247108 31 496 0 0% 0 0 13.627834
ruby-json (click) 20449 18419 8 204 0 0% 0 0 5.762569
rubyboy (click) 691259 683580 177 6965 40 0% 0 0 181.170017
rubykon (click) 145853 169867 137 2066 3 0% 0 0 56.969472
sudoku (click) 52157 66291 7 871 0 0% 0 0 24.080385
tinygql (click) 286923 268418 58 977 5 0% 0 0 27.393922
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1981.484413
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 492.201884
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.495329
fib (click) 2659 2995 3 30 0 0% 0 0 1.089642
getivar (click) 3812 6802 3 78 0 0% 0 0 1.917395
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.767492
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.768549
object-new (click) 2406 2818 2 36 0 0% 0 0 1.129147
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.115828
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.74274
setivar (click) 2783 3726 3 46 0 0% 0 0 1.255116
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.400819
setivar_young (click) 4297 4867 4 63 0 0% 0 0 1.717713
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.500784
throw (click) 5953 4624 5 53 0 0% 0 0 1.810537

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.