YJIT Benchmarks

Details for Benchmarks at 2025-01-05 03:45:10 UTC

YJIT metrics from the yjit-bench suite using Ruby dfc9e978fb.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 89.9% faster than CRuby 3.5.0dev
  • 5.4% faster than YJIT 3.3.6
On railsbench it is
  • 100.2% faster than CRuby 3.5.0dev
  • 6.4% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 51 minutes
aarch64 runtime: 3 hours, 18 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 81 5 83 50 156 50 163
chunky-png 5 32 5 32 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 407 5 425 50 590 50 625
liquid-compile 5 407 5 410 50 575 50 562
liquid-render 5 171 5 171 50 408 50 435
lobsters 5 20 5 20 50 10 50 10
mail 5 195 5 176 50 237 50 213
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 155 50 249 50 267
ruby-lsp 5 154 5 157 50 242 50 250
sequel 5 427 5 414 50 580 50 586
binarytrees 5 83 5 80 50 144 50 139
blurhash 5 82 5 83 50 127 50 145
erubi 5 75 5 147 50 90 50 150
etanni 5 91 5 98 50 54 50 71
fannkuchredux 5 52 5 55 50 101 50 107
fluentd 5 63 5 64 50 25 50 30
graphql 5 85 5 85 50 57 50 57
graphql-native 5 49 5 53 50 10 50 14
lee 5 22 5 22 50 10 50 10
loops-times 5 24 5 23 50 48 50 65
matmul 5 50 5 52 50 85 50 97
nbody 5 248 5 258 50 577 50 706
nqueens 5 120 5 121 50 75 50 562
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 170 50 620 50 712
protoboeuf-encode 5 177 5 197 50 328 50 829
rack 5 590 5 608 50 952 50 1046
ruby-json 5 83 5 84 50 50 50 50
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 164 50 161
tinygql 5 35 5 38 50 22 50 28
30k_ifelse 5 28 5 28 50 214 50 205
30k_methods 5 38 5 39 50 480 50 462
cfunc_itself 5 346 5 332 50 1046 50 1144
fib 5 127 5 126 50 909 50 937
getivar 5 207 5 216 50 2257 50 2625
keyword_args 5 107 5 103 50 959 50 1134
object-new 5 321 5 310 50 405 50 371
respond_to 5 133 5 141 50 3260 50 3982
ruby-xor 5 241 5 246 50 803 50 1384
setivar 5 358 5 357 50 3122 50 5702
setivar_object 5 374 5 345 50 747 50 846
setivar_young 5 374 5 344 50 769 50 853
str_concat 5 401 5 398 50 969 50 1210
throw 5 1261 5 1264 50 1731 50 1681

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) 1420251 1147317 210 2207 0 0% 0 0 63.909171
chunky-png (click) 301321 240555 85 1127 1 0% 0 0 33.067943
erubi-rails (click) 1920136 1593991 260 2965 19 0% 0 0 80.995043
hexapdf (click) 1440395 1242547 596 13141 41 0% 0 0 376.957375
liquid-c (click) 472355 378208 115 1750 5 0% 0 0 49.014267
liquid-compile (click) 432929 362715 147 2096 2 0% 0 0 64.764177
liquid-render (click) 584139 476934 132 2315 8 0% 0 0 65.437768
lobsters (click) 8103252 6769500 3213 52396 170 0% 0 0 1762.025051
mail (click) 763629 672411 343 5321 14 0% 0 0 156.649969
psych-load (click) 278712 235731 62 620 3 0% 0 0 19.20935
railsbench (click) 3225478 2796269 1642 16190 52 0% 0 0 467.536822
rubocop (click) 5689304 4864808 2888 50558 110 0% 4 0 1470.609803
ruby-lsp (click) 817040 704300 306 4738 24 0% 0 0 133.378212
sequel (click) 453592 379924 12 97 0 0% 0 0 3.849603
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.372822
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.271211
erubi (click) 254197 213804 6 100 0 0% 0 0 3.371707
etanni (click) 31129 29637 8 87 0 0% 0 0 2.97494
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.441767
fluentd (click) 341550 284469 8 96 0 0% 0 0 3.291223
graphql (click) 387019 357114 67 679 0 0% 0 0 21.304748
graphql-native (click) 370033 324605 38 258 0 0% 0 0 8.680546
lee (click) 303093 247545 46 749 0 0% 0 0 23.299757
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.320032
matmul (click) 10988 3769 9 112 0 0% 0 0 3.679271
nbody (click) 13396 17343 7 175 0 0% 0 0 4.56197
nqueens (click) 20494 27605 6 242 0 0% 0 0 7.006764
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 100.357528
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.190425
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.30031
rack (click) 233296 205870 33 388 0 0% 0 0 10.02326
ruby-json (click) 25708 22755 9 181 0 0% 0 0 5.101309
rubykon (click) 134396 137392 138 1492 3 0% 0 0 42.619953
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.375847
tinygql (click) 266889 233978 59 765 5 0% 0 0 21.608493
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1411.594275
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 452.82648
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.505637
fib (click) 2930 3118 4 29 0 0% 0 0 1.06801
getivar (click) 3832 4970 4 54 0 0% 0 0 1.461364
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.750443
object-new (click) 2264 2350 3 25 0 0% 0 0 0.910321
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.918704
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 1.95587
setivar (click) 2983 3646 4 34 0 0% 0 0 1.153355
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.250516
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.454821
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.114587
throw (click) 6179 4548 6 49 0 0% 0 0 1.693096

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.