YJIT Benchmarks

Details for Benchmarks at 2025-01-08 03:44:20 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 91.0% faster than CRuby 3.5.0dev
  • 6.3% faster than YJIT 3.3.6
On railsbench it is
  • 96.5% faster than CRuby 3.5.0dev
  • 5.2% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 51 minutes
aarch64 runtime: 3 hours, 17 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 81 50 156 50 162
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 409 5 428 50 590 50 633
liquid-compile 5 409 5 407 50 541 50 565
liquid-render 5 172 5 170 50 407 50 431
lobsters 5 20 5 20 50 10 50 10
mail 5 195 5 193 50 237 50 253
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 156 50 250 50 264
ruby-lsp 5 145 5 161 50 261 50 275
sequel 5 415 5 424 50 594 50 591
binarytrees 5 84 5 82 50 144 50 140
blurhash 5 82 5 82 50 127 50 145
erubi 5 116 5 140 50 90 50 148
etanni 5 91 5 100 50 54 50 71
fannkuchredux 5 51 5 55 50 101 50 106
fluentd 5 63 5 62 50 25 50 27
graphql 5 84 5 85 50 57 50 57
graphql-native 5 40 5 52 50 10 50 14
lee 5 23 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 247 5 249 50 578 50 704
nqueens 5 120 5 119 50 75 50 560
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 180 5 169 50 619 50 725
protoboeuf-encode 5 179 5 198 50 327 50 795
rack 5 581 5 638 50 952 50 1087
ruby-json 5 83 5 84 50 50 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 22 50 28
30k_ifelse 5 28 5 28 50 215 50 207
30k_methods 5 39 5 38 50 483 50 474
cfunc_itself 5 346 5 341 50 1046 50 1145
fib 5 127 5 127 50 908 50 937
getivar 5 207 5 218 50 2258 50 2633
keyword_args 5 107 5 103 50 959 50 1134
object-new 5 321 5 310 50 404 50 377
respond_to 5 133 5 141 50 3260 50 3982
ruby-xor 5 240 5 245 50 803 50 1384
setivar 5 358 5 358 50 3125 50 5709
setivar_object 5 374 5 341 50 747 50 851
setivar_young 5 374 5 344 50 770 50 837
str_concat 5 401 5 389 50 968 50 1213
throw 5 1263 5 1223 50 1739 50 1696

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) 1415076 1180111 210 2207 0 0% 0 0 63.292464
chunky-png (click) 306888 280428 85 1127 1 0% 0 0 33.417551
erubi-rails (click) 1901915 1619453 259 2962 19 0% 0 0 80.174837
hexapdf (click) 1462310 1207837 596 13145 41 0% 0 0 372.379291
liquid-c (click) 470924 417541 115 1750 5 0% 0 0 49.329894
liquid-compile (click) 402213 352699 147 2080 2 0% 0 0 65.571644
liquid-render (click) 581974 526062 132 2315 8 0% 0 0 65.39303
lobsters (click) 8087807 6846382 3213 52392 169 0% 0 0 1803.499145
mail (click) 734833 649805 343 5330 14 0% 0 0 152.421171
psych-load (click) 263336 248201 62 620 3 0% 0 0 19.396087
railsbench (click) 3233809 2808079 1642 16266 52 0% 0 0 467.81326
rubocop (click) 5663837 4834434 2888 50571 110 0% 4 0 1569.891143
ruby-lsp (click) 843490 754149 306 4736 24 0% 0 0 134.091346
sequel (click) 444744 399066 12 97 0 0% 0 0 3.611016
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.412191
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.227822
erubi (click) 227022 215623 6 100 0 0% 0 0 3.240763
etanni (click) 31129 29637 8 87 0 0% 0 0 2.967623
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.507361
fluentd (click) 334824 301934 8 96 0 0% 0 0 3.315902
graphql (click) 401282 364942 67 679 0 0% 0 0 21.065195
graphql-native (click) 375334 331083 38 258 0 0% 0 0 8.880459
lee (click) 274920 232132 46 749 0 0% 0 0 23.362365
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.448084
matmul (click) 10988 3769 9 112 0 0% 0 0 3.62721
nbody (click) 13396 17343 7 175 0 0% 0 0 4.586657
nqueens (click) 20494 27605 6 242 0 0% 0 0 6.985768
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 99.985439
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.26427
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.423597
rack (click) 236975 217848 33 388 0 0% 0 0 10.272928
ruby-json (click) 25708 22755 9 181 0 0% 0 0 5.108707
rubykon (click) 136035 147112 138 1506 3 0% 0 0 43.242677
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.321234
tinygql (click) 263814 224391 59 765 5 0% 0 0 21.732447
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1404.744343
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 454.113946
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.464732
fib (click) 2930 3118 4 29 0 0% 0 0 1.157972
getivar (click) 3832 4970 4 54 0 0% 0 0 1.483787
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.767455
object-new (click) 2264 2350 3 25 0 0% 0 0 0.927421
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.881237
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 2.000686
setivar (click) 2983 3646 4 34 0 0% 0 0 1.11024
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.252993
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.429257
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.109098
throw (click) 6179 4548 6 49 0 0% 0 0 1.698403

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.