YJIT Benchmarks

Details for Benchmarks at 2025-06-13 03:55:18 UTC

YJIT metrics from the yjit-bench suite using Ruby 7cfdcde069.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 89.8% faster than CRuby 3.5.0dev
  • 3.5% faster than YJIT 3.3.6
On railsbench it is
  • 101.1% faster than CRuby 3.5.0dev
  • 4.8% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 27 minutes
aarch64 runtime: 3 hours, 45 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 77 50 156 50 153
chunky-png 5 31 5 32 50 14 50 23
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 406 5 416 50 585 50 621
liquid-compile 5 406 5 452 50 541 50 694
liquid-render 5 168 5 170 50 404 50 436
lobsters 5 19 5 19 50 10 50 10
mail 5 194 5 174 50 236 50 189
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 249 50 255
ruby-lsp 5 156 5 151 50 257 50 262
sequel 5 412 5 417 50 596 50 578
binarytrees 5 84 5 81 50 146 50 121
blurhash 5 82 5 87 50 127 50 145
erubi 5 124 5 141 50 34 50 147
etanni 5 91 5 101 50 53 50 72
fannkuchredux 5 52 5 57 50 97 50 103
fluentd 5 63 5 59 50 25 50 27
graphql 5 84 5 82 50 57 50 54
graphql-native 5 49 5 46 50 10 50 16
lee 5 22 5 21 50 10 50 10
matmul 5 51 5 52 50 88 50 91
nbody 5 249 5 251 50 585 50 686
nqueens 5 120 5 127 50 75 50 525
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 161 50 620 50 747
protoboeuf-encode 5 179 5 199 50 327 50 799
rack 5 578 5 613 50 955 50 1050
ruby-json 5 84 5 82 50 49 50 48
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 33
30k_ifelse 5 28 5 27 50 215 50 183
30k_methods 5 39 5 38 50 481 50 475
cfunc_itself 5 359 5 347 50 1147 50 1258
fib 5 127 5 139 50 902 50 931
getivar 5 213 5 280 50 2253 50 2384
keyword_args 5 104 5 114 50 1041 50 1243
loops-times 5 24 5 25 50 48 50 56
object-new 5 322 5 360 50 404 50 570
respond_to 5 133 5 134 50 3256 50 3901
ruby-xor 5 245 5 256 50 799 50 1296
setivar 5 361 5 354 50 3190 50 4926
setivar_object 5 354 5 329 50 671 50 586
setivar_young 5 367 5 329 50 702 50 603
str_concat 5 399 5 450 50 978 50 1189
throw 5 1274 5 1279 50 1712 50 1718

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) 1525576 1244946 206 2590 0 0% 0 0 77.061321
chunky-png (click) 308228 301423 74 1322 1 0% 0 0 39.605641
erubi-rails (click) 1964541 1746583 262 3643 21 0% 0 0 102.708371
hexapdf (click) 1521420 1339665 594 15665 41 0% 0 0 459.85283
liquid-c (click) 531576 509855 114 2217 5 0% 0 0 62.254787
liquid-compile (click) 422844 383098 146 2698 2 0% 0 0 81.417036
liquid-render (click) 610418 575089 131 2933 8 0% 0 0 82.293402
lobsters (click) 8530197 7146600 3168 63706 118 0% 0 0 2160.281383
mail (click) 827556 752035 342 7227 40 0% 0 0 206.089678
psych-load (click) 264929 240056 61 825 3 0% 0 0 24.456889
railsbench (click) 3377263 2966775 1653 20203 56 0% 0 0 583.022279
rubocop (click) 5885408 5195263 2885 61708 114 0% 4 0 1831.82539
ruby-lsp (click) 856615 687750 305 5956 29 0% 0 0 168.776421
sequel (click) 482082 413549 11 114 0 0% 0 0 3.983935
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.655482
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.513178
erubi (click) 242397 202073 5 125 0 0% 0 0 4.008457
etanni (click) 30806 32125 8 108 0 0% 0 0 3.541468
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.220931
fluentd (click) 421921 354299 7 115 0 0% 0 0 3.804892
graphql (click) 444026 384738 66 1035 0 0% 0 0 30.500943
graphql-native (click) 397166 349834 37 399 0 0% 0 0 12.127078
lee (click) 297717 249712 45 1012 0 0% 0 0 30.788212
matmul (click) 11125 4603 8 132 0 0% 0 0 4.256992
nbody (click) 13890 20235 6 238 0 0% 0 0 5.86304
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.372084
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 114.096338
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 75.738549
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 47.25357
rack (click) 255567 227106 31 496 0 0% 0 0 13.364315
ruby-json (click) 20667 18692 8 204 0 0% 0 0 5.870588
rubyboy (click) 699363 645264 177 6962 40 0% 0 0 182.18951
rubykon (click) 146441 162602 137 2076 3 0% 0 0 57.733601
sudoku (click) 52157 66291 7 871 0 0% 0 0 24.085855
tinygql (click) 292334 246892 58 977 5 0% 0 0 27.316587
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1986.953487
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 497.519544
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.491606
fib (click) 2659 2995 3 30 0 0% 0 0 1.096366
getivar (click) 3812 6802 3 78 0 0% 0 0 1.927736
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.779195
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.736086
object-new (click) 2406 2818 2 36 0 0% 0 0 1.121207
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.115757
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.722471
setivar (click) 2783 3726 3 46 0 0% 0 0 1.252553
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.404938
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.731723
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.487508
throw (click) 5953 4624 5 53 0 0% 0 0 1.827334

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.