YJIT Benchmarks

Details for Benchmarks at 2025-08-31 03:48:45 UTC

YJIT metrics from the yjit-bench suite using Ruby 5c7dfe85a1.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 93.4% faster than CRuby 3.5.0dev
  • 7.9% faster than YJIT 3.3.6
On railsbench it is
  • 106.7% faster than CRuby 3.5.0dev
  • 8.0% 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 169 50 214
chunky-png 5 31 5 33 50 14 50 28
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 422 5 386 50 597 50 554
liquid-compile 5 406 5 472 50 547 50 715
liquid-render 5 173 5 171 50 408 50 392
lobsters 5 20 5 20 50 10 50 10
mail 5 195 5 182 50 249 50 224
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 138 5 142 50 201 50 217
ruby-lsp 5 144 5 148 50 233 50 249
sequel 5 431 5 431 50 578 50 594
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 83 50 146 50 129
blurhash 5 82 5 87 50 127 50 145
erubi 5 126 5 137 50 86 50 132
etanni 5 90 5 70 50 53 50 36
fannkuchredux 5 52 5 57 50 97 50 95
fluentd 5 62 5 61 50 25 50 29
graphql 5 347 5 455 50 463 50 919
graphql-native 5 51 5 77 50 12 50 63
lee 5 23 5 23 50 10 50 10
matmul 5 51 5 51 50 88 50 91
nbody 5 249 5 264 50 585 50 701
nqueens 5 120 5 126 50 74 50 544
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 178 5 183 50 621 50 761
protoboeuf-encode 5 178 5 207 50 326 50 827
rack 5 419 5 434 50 646 50 691
ruby-json 5 83 5 83 50 50 50 50
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 43 50 41 50 48
30k_ifelse 5 28 5 27 50 214 50 184
30k_methods 5 38 5 38 50 476 50 475
attr_accessor 5 157 5 194 50 1718 50 1903
cfunc_itself 5 357 5 363 50 1147 50 1258
fib 5 127 5 142 50 902 50 931
getivar 5 212 5 307 50 2252 50 2404
keyword_args 5 104 5 108 50 1042 50 1243
loops-times 5 24 5 26 50 48 50 56
object-new 5 318 5 309 50 405 50 465
respond_to 5 134 5 139 50 3256 50 3900
ruby-xor 5 245 5 251 50 799 50 1277
setivar 5 361 5 381 50 3187 50 4960
setivar_object 5 352 5 319 50 671 50 568
setivar_young 5 367 5 323 50 703 50 590
str_concat 5 397 5 452 50 980 50 1193
throw 5 1273 5 1127 50 1737 50 1392

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) 1539388 1332600 203 2570 0 0% 0 0 75.078387
chunky-png (click) 317531 291913 74 1322 1 0% 0 0 39.213724
erubi-rails (click) 1944715 1624886 262 3735 22 0% 0 0 104.361912
hexapdf (click) 1504117 1319074 593 15710 43 0% 0 0 457.655243
liquid-c (click) 542159 470555 114 2235 5 0% 0 0 61.842924
liquid-compile (click) 451478 358917 146 2693 2 0% 0 0 79.949869
liquid-render (click) 636665 573390 131 2946 8 0% 0 0 81.839966
lobsters (click) 8562373 7130092 3118 63673 118 0% 0 0 2149.693115
mail (click) 857016 824419 342 7696 40 0% 0 0 220.778859
psych-load (click) 281342 256772 61 830 2 0% 0 0 24.550637
railsbench (click) 3330367 2828588 1605 19550 47 0% 0 0 572.060972
rubocop (click) 6120627 5301531 3014 63662 157 0% 6 0 1853.702237
ruby-lsp (click) 961494 855309 347 6796 44 0% 1 0 187.087695
sequel (click) 495245 454074 11 119 0 0% 0 0 4.132621
shipit (click) 7652517 6553062 3288 52697 184 0% 0 0 1730.678996
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.668808
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.215119
erubi (click) 235882 209816 5 125 0 0% 0 0 3.9669
etanni (click) 32930 35718 8 114 0 0% 0 0 3.650509
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.226925
fluentd (click) 466495 387647 7 115 0 0% 0 0 3.907934
graphql (click) 402789 367989 73 1920 19 0% 0 0 55.377983
graphql-native (click) 346130 284358 39 532 0 0% 0 0 14.431628
lee (click) 299303 234356 49 1070 0 0% 0 0 31.98077
matmul (click) 11125 4603 8 132 0 0% 0 0 4.215329
nbody (click) 13890 20235 6 238 0 0% 0 0 5.851912
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.593747
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 112.561202
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.596599
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.858019
rack (click) 262978 211558 35 580 0 0% 0 0 15.571307
ruby-json (click) 19776 17761 8 204 0 0% 0 0 5.754647
rubyboy (click) 677122 615723 154 6860 42 0% 0 0 174.08222
rubykon (click) 146229 153926 137 2070 3 0% 0 0 57.006568
sudoku (click) 52157 66291 7 871 0 0% 0 0 24.102137
tinygql (click) 289400 283696 59 1031 5 0% 0 0 27.49142
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1960.863659
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 484.998986
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.106795
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.507651
fib (click) 2659 2995 3 30 0 0% 0 0 1.097078
getivar (click) 3812 6802 3 78 0 0% 0 0 1.928547
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.808526
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.728385
object-new (click) 2406 2818 2 36 0 0% 0 0 1.169111
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.134866
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.824965
setivar (click) 2783 3726 3 46 0 0% 0 0 1.27627
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.444142
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.673591
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.459772
throw (click) 5953 4624 5 53 0 0% 0 0 1.840196

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.