YJIT Benchmarks

Details for Benchmarks at 2025-03-29 03:47:15 UTC

YJIT metrics from the yjit-bench suite using Ruby 332f5d0b73.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 87.5% faster than CRuby 3.5.0dev
  • 5.9% faster than YJIT 3.3.6
On railsbench it is
  • 96.3% faster than CRuby 3.5.0dev
  • 2.8% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 19 minutes
aarch64 runtime: 3 hours, 40 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 85 50 156 50 161
chunky-png 5 32 5 34 50 15 50 34
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 430 50 567 50 633
liquid-compile 5 409 5 426 50 545 50 566
liquid-render 5 169 5 173 50 404 50 447
lobsters 5 20 5 19 50 10 50 10
mail 5 195 5 197 50 251 50 251
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 155 5 159 50 250 50 268
ruby-lsp 5 162 5 158 50 241 50 253
sequel 5 420 5 412 50 600 50 572
binarytrees 5 84 5 86 50 149 50 142
blurhash 5 82 5 88 50 127 50 145
erubi 5 125 5 142 50 98 50 142
etanni 5 90 5 103 50 54 50 73
fannkuchredux 5 52 5 58 50 95 50 106
fluentd 5 64 5 63 50 26 50 26
graphql 5 85 5 88 50 55 50 59
graphql-native 5 49 5 52 50 10 50 15
lee 5 23 5 24 50 10 50 10
matmul 5 51 5 54 50 85 50 97
nbody 5 248 5 277 50 577 50 708
nqueens 5 120 5 130 50 75 50 566
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 171 5 185 50 620 50 727
protoboeuf-encode 5 179 5 209 50 328 50 839
rack 5 592 5 638 50 962 50 1057
ruby-json 5 84 5 84 50 50 50 50
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 22 50 10 50 10
sudoku 5 48 5 51 50 164 50 159
tinygql 5 36 5 37 50 23 50 29
30k_ifelse 5 28 5 28 50 214 50 207
30k_methods 5 38 5 38 50 483 50 474
cfunc_itself 5 352 5 368 50 1147 50 1258
fib 5 127 5 148 50 910 50 933
getivar 5 207 5 340 50 2241 50 2782
keyword_args 5 107 5 111 50 1042 50 1243
loops-times 5 24 5 27 50 48 50 65
object-new 5 323 5 327 50 405 50 387
respond_to 5 134 5 141 50 3258 50 3983
ruby-xor 5 240 5 265 50 803 50 1381
setivar 5 358 5 544 50 3192 50 5883
setivar_object 5 355 5 467 50 699 50 805
setivar_young 5 365 5 466 50 744 50 815
str_concat 5 397 5 475 50 970 50 1228
throw 5 1264 5 1262 50 1778 50 1751

Different Ruby configurations want different amounts of warmup. With no JIT, CRuby needs hardly any. YJIT and MJIT 3.0 both warm up quite quickly, while MJIT in 3.1 often slows down for a time as it compiles, after an unpredictable delay.

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) 1425649 1198708 209 2202 0 0% 0 0 64.36018
chunky-png (click) 323738 286250 84 1124 1 0% 0 0 33.055443
erubi-rails (click) 1924434 1605434 260 2989 19 0% 0 0 84.562597
hexapdf (click) 1465595 1278079 596 13144 42 0% 0 0 380.017934
liquid-c (click) 503611 446399 115 1744 5 0% 0 0 48.23181
liquid-compile (click) 429660 378465 146 2080 2 0% 0 0 64.949451
liquid-render (click) 577650 496498 132 2310 8 0% 0 0 65.885022
lobsters (click) 8145007 6860493 3160 52782 105 0% 0 0 1801.714404
mail (click) 761483 680693 342 5317 14 0% 0 0 158.559801
psych-load (click) 247683 243458 61 617 3 0% 0 0 19.312279
railsbench (click) 3260978 2666603 1645 16193 52 0% 0 0 472.774132
rubocop (click) 5668451 4824218 2887 50512 110 0% 4 0 1483.380858
ruby-lsp (click) 847378 758669 305 4732 24 0% 0 0 135.572313
sequel (click) 451392 379206 11 94 0 0% 0 0 3.528452
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.26082
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.182512
erubi (click) 230229 195246 5 97 0 0% 0 0 3.282033
etanni (click) 30101 29597 8 88 0 0% 0 0 3.020968
fannkuchredux (click) 23031 13626 3 249 0 0% 0 0 7.3845
fluentd (click) 357929 293720 7 93 0 0% 0 0 3.258344
graphql (click) 398753 350764 66 676 0 0% 0 0 21.377595
graphql-native (click) 365294 312394 37 255 0 0% 0 0 8.722745
lee (click) 271951 231006 45 749 0 0% 0 0 23.735429
matmul (click) 10657 3512 8 109 0 0% 0 0 3.567821
nbody (click) 13050 17086 6 172 0 0% 0 0 4.489443
nqueens (click) 20163 27348 5 239 0 0% 0 0 6.859392
optcarrot (click) 318856 234467 188 4395 34 0% 0 0 101.034817
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.414884
protoboeuf-encode (click) 221062 212146 14 1220 0 0% 0 0 31.39526
rack (click) 263115 233246 32 385 0 0% 0 0 10.298112
ruby-json (click) 20004 17403 8 178 0 0% 0 0 4.997215
rubyboy (click) 686637 626642 177 5805 40 0% 0 0 144.868018
rubykon (click) 133501 111856 137 1482 3 0% 0 0 42.898104
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.566651
tinygql (click) 269820 204104 58 762 5 0% 0 0 21.790562
30k_ifelse (click) 5658774 5284843 9259 51667 0 0% 0 0 1427.926923
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 455.35695
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.324098
fib (click) 2599 2861 3 26 0 0% 0 0 0.932221
getivar (click) 3501 4713 3 51 0 0% 0 0 1.369441
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.609679
loops-times (click) 6688 7405 5 70 0 0% 0 0 2.338421
object-new (click) 1918 2093 2 22 0 0% 0 0 0.862498
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.705798
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.902551
setivar (click) 2652 3389 3 31 0 0% 0 0 1.000019
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.118329
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.322503
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.041884
throw (click) 5848 4291 5 46 0 0% 0 0 1.61765

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.