YJIT Benchmarks

Details for Benchmarks at 2025-01-03 03:44:47 UTC

YJIT metrics from the yjit-bench suite using Ruby 1adf4b1007.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 91.8% faster than CRuby 3.5.0dev
  • 5.9% faster than YJIT 3.3.6
On railsbench it is
  • 94.9% faster than CRuby 3.5.0dev
  • 6.0% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 51 minutes
aarch64 runtime: 3 hours, 19 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 83 50 157 50 161
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 419 50 589 50 623
liquid-compile 5 409 5 411 50 542 50 558
liquid-render 5 172 5 168 50 404 50 435
lobsters 5 20 5 20 50 10 50 10
mail 5 195 5 185 50 238 50 252
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 156 50 249 50 263
ruby-lsp 5 158 5 156 50 255 50 273
sequel 5 430 5 406 50 589 50 592
binarytrees 5 84 5 81 50 144 50 139
blurhash 5 82 5 82 50 127 50 144
erubi 5 75 5 143 50 98 50 150
etanni 5 91 5 99 50 54 50 71
fannkuchredux 5 52 5 55 50 101 50 101
fluentd 5 64 5 63 50 25 50 29
graphql 5 84 5 85 50 57 50 56
graphql-native 5 40 5 52 50 10 50 14
lee 5 22 5 23 50 10 50 10
loops-times 5 24 5 23 50 48 50 64
matmul 5 51 5 52 50 85 50 97
nbody 5 248 5 258 50 577 50 703
nqueens 5 120 5 119 50 75 50 564
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 175 50 621 50 727
protoboeuf-encode 5 174 5 197 50 326 50 836
rack 5 582 5 634 50 954 50 1043
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 38 50 22 50 28
30k_ifelse 5 28 5 28 50 214 50 207
30k_methods 5 39 5 38 50 481 50 471
cfunc_itself 5 345 5 327 50 1046 50 1145
fib 5 127 5 127 50 909 50 937
getivar 5 207 5 220 50 2253 50 2628
keyword_args 5 107 5 104 50 959 50 1134
object-new 5 320 5 310 50 404 50 378
respond_to 5 133 5 141 50 3261 50 3983
ruby-xor 5 228 5 227 50 803 50 1383
setivar 5 357 5 358 50 3124 50 5705
setivar_object 5 374 5 341 50 746 50 850
setivar_young 5 374 5 344 50 769 50 856
str_concat 5 402 5 390 50 970 50 1206
throw 5 1262 5 1253 50 1729 50 1673

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) 1412563 1185321 210 2207 0 0% 0 0 64.642797
chunky-png (click) 292496 267712 85 1127 1 0% 0 0 32.961567
erubi-rails (click) 1903029 1560677 259 2984 19 0% 0 0 83.677508
hexapdf (click) 1438249 1242670 596 13145 41 0% 0 0 376.788295
liquid-c (click) 500663 434356 115 1747 5 0% 0 0 49.67873
liquid-compile (click) 431508 361067 147 2085 2 0% 0 0 64.48611
liquid-render (click) 601676 501153 132 2315 8 0% 0 0 65.52247
lobsters (click) 8101121 6830099 3213 52499 169 0% 0 0 1780.848093
mail (click) 763931 656315 343 5321 14 0% 0 0 157.031442
psych-load (click) 270613 237560 62 620 3 0% 0 0 19.20375
railsbench (click) 3234821 2731587 1642 16185 52 0% 0 0 468.810015
rubocop (click) 5662362 4939411 2888 50559 110 0% 4 0 1574.667234
ruby-lsp (click) 846635 805461 306 4737 24 0% 0 0 132.674096
sequel (click) 478406 417847 12 97 0 0% 0 0 3.857396
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.374048
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.309282
erubi (click) 227166 213971 6 100 0 0% 0 0 3.26936
etanni (click) 31129 29637 8 87 0 0% 0 0 2.956879
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.440744
fluentd (click) 341253 297241 8 96 0 0% 0 0 3.307101
graphql (click) 426483 373220 67 679 0 0% 0 0 21.119251
graphql-native (click) 394685 353822 38 258 0 0% 0 0 8.66831
lee (click) 293996 248519 46 749 0 0% 0 0 23.405613
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.373209
matmul (click) 10988 3769 9 112 0 0% 0 0 3.664234
nbody (click) 13396 17343 7 175 0 0% 0 0 4.613044
nqueens (click) 20494 27605 6 242 0 0% 0 0 7.056184
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 100.291436
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.221225
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.186632
rack (click) 256044 217916 33 388 0 0% 0 0 10.072548
ruby-json (click) 25911 22980 9 181 0 0% 0 0 5.163394
rubykon (click) 134396 137392 138 1492 3 0% 0 0 42.875784
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.416251
tinygql (click) 299293 262057 59 765 5 0% 0 0 21.780422
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1409.952981
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 452.620086
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.433154
fib (click) 2930 3118 4 29 0 0% 0 0 1.090902
getivar (click) 3832 4970 4 54 0 0% 0 0 1.500464
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.791823
object-new (click) 2264 2350 3 25 0 0% 0 0 0.928969
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.903346
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 1.979317
setivar (click) 2983 3646 4 34 0 0% 0 0 1.140907
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.284087
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.440968
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.126165
throw (click) 6179 4548 6 49 0 0% 0 0 1.702329

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.