YJIT Benchmarks

Details for Benchmarks at 2024-12-30 03:45:04 UTC

YJIT metrics from the yjit-bench suite using Ruby 3650f2460f.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 89.7% faster than CRuby 3.5.0dev
  • 6.7% faster than YJIT 3.3.6
On railsbench it is
  • 94.8% faster than CRuby 3.5.0dev
  • 3.1% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 51 minutes
aarch64 runtime: 3 hours, 20 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 84 5 84 50 150 50 159
chunky-png 5 32 5 32 50 15 50 33
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 409 5 425 50 570 50 627
liquid-compile 5 410 5 408 50 546 50 556
liquid-render 5 173 5 170 50 409 50 437
lobsters 5 20 5 20 50 10 50 10
mail 5 191 5 186 50 252 50 237
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 154 50 250 50 266
ruby-lsp 5 145 5 156 50 205 50 268
sequel 5 416 5 419 50 570 50 582
binarytrees 5 84 5 82 50 144 50 140
blurhash 5 82 5 82 50 127 50 145
erubi 5 117 5 146 50 88 50 150
etanni 5 91 5 98 50 54 50 72
fannkuchredux 5 52 5 55 50 101 50 103
fluentd 5 63 5 64 50 26 50 24
graphql 5 84 5 85 50 57 50 57
graphql-native 5 49 5 53 50 10 50 15
lee 5 22 5 23 50 10 50 10
loops-times 5 24 5 23 50 48 50 65
matmul 5 51 5 51 50 85 50 98
nbody 5 248 5 258 50 577 50 703
nqueens 5 120 5 120 50 75 50 564
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 175 50 620 50 719
protoboeuf-encode 5 180 5 196 50 327 50 829
rack 5 578 5 624 50 950 50 1046
ruby-json 5 83 5 85 50 49 50 51
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 164 50 160
tinygql 5 36 5 37 50 23 50 28
30k_ifelse 5 28 5 28 50 215 50 206
30k_methods 5 39 5 39 50 479 50 469
cfunc_itself 5 346 5 329 50 1046 50 1144
fib 5 127 5 128 50 908 50 937
getivar 5 198 5 217 50 2256 50 2629
keyword_args 5 106 5 104 50 959 50 1134
object-new 5 321 5 310 50 403 50 378
respond_to 5 133 5 141 50 3260 50 3980
ruby-xor 5 224 5 245 50 803 50 1383
setivar 5 358 5 358 50 3124 50 5711
setivar_object 5 374 5 342 50 748 50 850
setivar_young 5 374 5 344 50 769 50 852
str_concat 5 401 5 392 50 967 50 1167
throw 5 1261 5 1264 50 1731 50 1702

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) 1440902 1225816 210 2207 0 0% 0 0 63.280736
chunky-png (click) 295310 252667 85 1127 1 0% 0 0 33.270343
erubi-rails (click) 1926236 1665141 259 2976 19 0% 0 0 81.057535
hexapdf (click) 1459821 1295684 596 13145 41 0% 0 0 377.476086
liquid-c (click) 497597 439709 115 1750 5 0% 0 0 48.339089
liquid-compile (click) 426413 349623 147 2087 2 0% 0 0 65.048079
liquid-render (click) 581674 537768 132 2315 8 0% 0 0 65.29427
lobsters (click) 8110934 6845416 3212 52498 169 0% 0 0 1793.836706
mail (click) 726737 665989 343 5321 14 0% 0 0 154.05106
psych-load (click) 263309 223215 62 620 3 0% 0 0 19.347667
railsbench (click) 3251430 2827073 1642 16215 52 0% 0 0 469.633368
rubocop (click) 5665086 4819021 2888 50571 110 0% 4 0 1567.915358
ruby-lsp (click) 816497 687245 306 4738 24 0% 0 0 133.527054
sequel (click) 450463 423706 12 97 0 0% 0 0 3.384156
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.387687
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.589
erubi (click) 254458 189467 6 100 0 0% 0 0 3.405577
etanni (click) 27627 26630 9 91 0 0% 0 0 3.120484
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.480078
fluentd (click) 337876 296334 8 96 0 0% 0 0 3.384125
graphql (click) 428303 374805 67 679 0 0% 0 0 21.155537
graphql-native (click) 366100 312692 38 258 0 0% 0 0 8.703876
lee (click) 285785 242333 46 749 0 0% 0 0 23.377879
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.409464
matmul (click) 10988 3769 9 112 0 0% 0 0 3.668398
nbody (click) 13396 17343 7 175 0 0% 0 0 4.606518
nqueens (click) 20494 27605 6 242 0 0% 0 0 7.014392
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 101.535341
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.054779
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.449578
rack (click) 259190 228938 33 388 0 0% 0 0 10.239972
ruby-json (click) 24261 20954 9 181 0 0% 0 0 5.098389
rubykon (click) 135230 146429 138 1500 3 0% 0 0 43.121965
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.395778
tinygql (click) 281944 223973 59 765 5 0% 0 0 22.040544
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1414.362228
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 451.299917
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.49161
fib (click) 2930 3118 4 29 0 0% 0 0 1.124163
getivar (click) 3832 4970 4 54 0 0% 0 0 1.478033
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.765611
object-new (click) 2264 2350 3 25 0 0% 0 0 0.912709
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.911109
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 1.966851
setivar (click) 2983 3646 4 34 0 0% 0 0 1.162729
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.261028
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.47995
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.114095
throw (click) 6179 4548 6 49 0 0% 0 0 1.729119

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.