YJIT Benchmarks

Details for Benchmarks at 2025-03-26 03:47:36 UTC

YJIT metrics from the yjit-bench suite using Ruby 310c00a137.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 88.6% faster than CRuby 3.5.0dev
  • 5.6% faster than YJIT 3.3.6
On railsbench it is
  • 104.0% faster than CRuby 3.5.0dev
  • 7.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 80 5 86 50 156 50 165
chunky-png 5 32 5 34 50 15 50 32
erubi-rails 5 16 5 16 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 420 5 439 50 587 50 639
liquid-compile 5 409 5 412 50 537 50 567
liquid-render 5 170 5 170 50 405 50 450
lobsters 5 19 5 19 50 10 50 10
mail 5 195 5 196 50 252 50 256
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 157 50 250 50 268
ruby-lsp 5 155 5 160 50 258 50 246
sequel 5 430 5 414 50 595 50 575
binarytrees 5 84 5 87 50 149 50 142
blurhash 5 82 5 87 50 127 50 145
erubi 5 124 5 150 50 98 50 151
etanni 5 91 5 101 50 54 50 72
fannkuchredux 5 52 5 58 50 99 50 106
fluentd 5 64 5 65 50 26 50 24
graphql 5 85 5 84 50 56 50 60
graphql-native 5 39 5 53 50 10 50 15
lee 5 22 5 23 50 10 50 10
matmul 5 51 5 54 50 85 50 97
nbody 5 248 5 277 50 578 50 671
nqueens 5 120 5 129 50 75 50 564
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 183 50 620 50 729
protoboeuf-encode 5 178 5 208 50 328 50 814
rack 5 585 5 625 50 942 50 1058
ruby-json 5 83 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 161 50 161
tinygql 5 35 5 38 50 23 50 29
30k_ifelse 5 28 5 28 50 214 50 206
30k_methods 5 38 5 39 50 484 50 473
cfunc_itself 5 345 5 380 50 1147 50 1258
fib 5 127 5 149 50 910 50 933
getivar 5 207 5 330 50 2243 50 2778
keyword_args 5 107 5 109 50 1042 50 1243
loops-times 5 24 5 27 50 48 50 65
object-new 5 322 5 328 50 405 50 389
respond_to 5 134 5 139 50 3258 50 3983
ruby-xor 5 241 5 264 50 803 50 1383
setivar 5 358 5 657 50 3191 50 5938
setivar_object 5 355 5 477 50 699 50 810
setivar_young 5 364 5 477 50 743 50 812
str_concat 5 398 5 482 50 970 50 1226
throw 5 1267 5 1322 50 1767 50 1770

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) 1423290 1197224 209 2202 0 0% 0 0 64.01989
chunky-png (click) 295193 227867 84 1124 1 0% 0 0 33.199878
erubi-rails (click) 1898690 1574796 259 2932 19 0% 0 0 80.728834
hexapdf (click) 1440749 1238862 595 13139 41 0% 0 0 379.660577
liquid-c (click) 505256 406904 114 1741 5 0% 0 0 48.452651
liquid-compile (click) 401861 352845 146 2090 2 0% 0 0 66.255429
liquid-render (click) 604281 521525 131 2307 8 0% 0 0 65.560588
lobsters (click) 8138509 6709890 3160 52764 104 0% 0 0 1828.910274
mail (click) 728100 594388 342 5317 14 0% 0 0 156.947416
psych-load (click) 249342 227081 61 615 3 0% 0 0 19.219798
railsbench (click) 3238217 2695073 1645 16211 52 0% 0 0 471.780899
rubocop (click) 5664285 4893829 2887 50517 110 0% 4 0 1482.053513
ruby-lsp (click) 844768 805635 305 4730 24 0% 0 0 135.808424
sequel (click) 459678 354295 11 94 0 0% 0 0 3.684509
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.235226
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.277306
erubi (click) 224415 196873 5 97 0 0% 0 0 3.169898
etanni (click) 27158 26329 8 88 0 0% 0 0 3.015163
fannkuchredux (click) 23031 13626 3 249 0 0% 0 0 7.329689
fluentd (click) 385613 309753 7 93 0 0% 0 0 3.099847
graphql (click) 425297 374176 66 676 0 0% 0 0 21.087296
graphql-native (click) 387684 349863 37 255 0 0% 0 0 8.617181
lee (click) 274222 231482 45 749 0 0% 0 0 23.865089
matmul (click) 10657 3512 8 109 0 0% 0 0 3.581311
nbody (click) 13050 17086 6 172 0 0% 0 0 4.426027
nqueens (click) 20163 27348 5 239 0 0% 0 0 6.840593
optcarrot (click) 318856 234467 188 4395 34 0% 0 0 101.687147
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.186965
protoboeuf-encode (click) 221062 212146 14 1220 0 0% 0 0 31.345195
rack (click) 236091 209637 32 385 0 0% 0 0 10.249146
ruby-json (click) 23776 20702 8 181 0 0% 0 0 5.163131
rubyboy (click) 686477 642654 177 5803 40 0% 0 0 144.309616
rubykon (click) 133501 111856 137 1482 3 0% 0 0 42.923161
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.476308
tinygql (click) 272212 239544 58 762 5 0% 0 0 21.792727
30k_ifelse (click) 5658774 5284843 9259 51667 0 0% 0 0 1428.156743
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 453.575199
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.346415
fib (click) 2599 2861 3 26 0 0% 0 0 0.978194
getivar (click) 3501 4713 3 51 0 0% 0 0 1.35787
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.622484
loops-times (click) 6688 7405 5 70 0 0% 0 0 2.312507
object-new (click) 1918 2093 2 22 0 0% 0 0 0.82979
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.716691
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.923689
setivar (click) 2652 3389 3 31 0 0% 0 0 1.004585
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.097799
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.325926
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.000504
throw (click) 5848 4291 5 46 0 0% 0 0 1.626719

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.