YJIT Benchmarks

Details for Benchmarks at 2025-08-13 03:56:47 UTC

YJIT metrics from the yjit-bench suite using Ruby 40d07f268e.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 88.2% faster than CRuby 3.5.0dev
  • 4.9% faster than YJIT 3.3.6
On railsbench it is
  • 97.2% faster than CRuby 3.5.0dev
  • 5.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 84 50 157 50 166
chunky-png 5 31 5 33 50 14 50 26
erubi-rails 5 16 5 14 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 422 5 392 50 598 50 541
liquid-compile 5 413 5 461 50 556 50 709
liquid-render 5 171 5 171 50 407 50 388
lobsters 5 19 5 20 50 10 50 10
mail 5 191 5 176 50 241 50 200
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 140 5 141 50 195 50 217
ruby-lsp 5 147 5 148 50 234 50 246
sequel 5 426 5 437 50 594 50 587
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 80 50 146 50 118
blurhash 5 82 5 87 50 127 50 145
erubi 5 126 5 143 50 100 50 136
etanni 5 90 5 97 50 53 50 67
fannkuchredux 5 52 5 56 50 98 50 95
fluentd 5 62 5 64 50 24 50 29
graphql 5 341 5 448 50 476 50 912
graphql-native 5 51 5 77 50 12 50 58
lee 5 23 5 22 50 10 50 10
matmul 5 51 5 49 50 88 50 92
nbody 5 249 5 239 50 585 50 704
nqueens 5 120 5 126 50 74 50 546
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 180 5 189 50 621 50 696
protoboeuf-encode 5 178 5 197 50 327 50 798
rack 5 426 5 439 50 644 50 688
ruby-json 5 83 5 83 50 50 50 49
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 20 5 22 50 10 50 10
sudoku 5 48 5 51 50 163 50 149
tinygql 5 41 5 43 50 42 50 49
30k_ifelse 5 28 5 27 50 216 50 184
30k_methods 5 38 5 38 50 474 50 473
attr_accessor 5 157 5 172 50 1723 50 1852
cfunc_itself 5 357 5 344 50 1137 50 1258
fib 5 127 5 142 50 902 50 931
getivar 5 212 5 306 50 2250 50 2390
keyword_args 5 104 5 108 50 1034 50 1243
loops-times 5 24 5 24 50 48 50 56
object-new 5 319 5 300 50 403 50 413
respond_to 5 134 5 139 50 3256 50 3902
ruby-xor 5 245 5 250 50 800 50 1280
setivar 5 361 5 343 50 3187 50 4911
setivar_object 5 353 5 298 50 671 50 565
setivar_young 5 367 5 299 50 703 50 581
str_concat 5 398 5 444 50 979 50 1198
throw 5 1272 5 1115 50 1731 50 1373

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) 1508002 1222805 206 2590 0 0% 0 0 74.406694
chunky-png (click) 315799 289220 74 1330 1 0% 0 0 39.212893
erubi-rails (click) 1892780 1639734 263 3729 22 0% 0 0 103.707352
hexapdf (click) 1509658 1378260 594 15646 43 0% 0 0 452.308637
liquid-c (click) 538162 457160 114 2217 5 0% 0 0 62.111116
liquid-compile (click) 449765 356010 146 2699 2 0% 0 0 79.403236
liquid-render (click) 644800 556530 131 2933 8 0% 0 0 80.203134
lobsters (click) 8520994 7101848 3162 63606 119 0% 0 0 2180.895866
mail (click) 829202 800194 342 7229 40 0% 0 0 204.359893
psych-load (click) 279858 229850 61 830 2 0% 0 0 24.469167
railsbench (click) 3330520 2883967 1649 20160 58 0% 0 0 574.323356
rubocop (click) 6109251 5336788 3011 63545 155 0% 6 0 1965.397697
ruby-lsp (click) 948561 906571 344 6743 43 0% 1 0 187.179348
sequel (click) 492841 400590 11 119 0 0% 0 0 4.255335
shipit (click) 7349944 6105768 3445 55175 219 0% 1 0 1764.22571
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.647804
blurhash (click) 52295 51444 27 603 0 0% 0 0 17.867203
erubi (click) 244976 218683 5 125 0 0% 0 0 3.782694
etanni (click) 30806 32125 8 108 0 0% 0 0 3.547686
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.119532
fluentd (click) 463982 408578 7 115 0 0% 0 0 3.760535
graphql (click) 400100 356040 73 1919 19 0% 0 0 56.161976
graphql-native (click) 343451 337923 39 532 0 0% 0 0 14.13015
lee (click) 308380 275953 49 1070 0 0% 0 0 31.84352
matmul (click) 11125 4603 8 132 0 0% 0 0 4.119882
nbody (click) 13890 20235 6 238 0 0% 0 0 5.775678
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.386171
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 114.918342
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.392625
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.421207
rack (click) 271767 244708 35 580 0 0% 0 0 15.555148
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.664391
rubyboy (click) 685963 599667 154 6858 42 0% 0 0 173.561835
rubykon (click) 146229 162118 137 2070 3 0% 0 0 56.557015
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.856764
tinygql (click) 297354 250709 59 1031 5 0% 0 0 27.925616
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1946.84815
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 479.698105
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.069645
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.470476
fib (click) 2659 2995 3 30 0 0% 0 0 1.090335
getivar (click) 3812 6802 3 78 0 0% 0 0 1.883091
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.779658
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.725297
object-new (click) 2406 2818 2 36 0 0% 0 0 1.08859
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.106707
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.728034
setivar (click) 2783 3726 3 46 0 0% 0 0 1.241151
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.379326
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.655759
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.470201
throw (click) 5953 4624 5 53 0 0% 0 0 1.841053

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.