YJIT Benchmarks

Details for Benchmarks at 2025-01-07 03:44:59 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 90.7% faster than CRuby 3.5.0dev
  • 6.9% faster than YJIT 3.3.6
On railsbench it is
  • 94.6% 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, 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 165
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 421 5 429 50 589 50 628
liquid-compile 5 408 5 412 50 542 50 559
liquid-render 5 170 5 172 50 406 50 435
lobsters 5 20 5 20 50 10 50 10
mail 5 188 5 194 50 241 50 254
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 252 50 267
ruby-lsp 5 155 5 157 50 240 50 272
sequel 5 428 5 418 50 569 50 588
binarytrees 5 84 5 82 50 144 50 140
blurhash 5 82 5 82 50 127 50 145
erubi 5 96 5 148 50 98 50 142
etanni 5 91 5 99 50 54 50 72
fannkuchredux 5 51 5 55 50 101 50 97
fluentd 5 63 5 63 50 25 50 29
graphql 5 84 5 85 50 56 50 58
graphql-native 5 40 5 53 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 258 50 577 50 705
nqueens 5 120 5 120 50 75 50 563
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 175 50 620 50 721
protoboeuf-encode 5 180 5 197 50 326 50 808
rack 5 574 5 638 50 949 50 1092
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 161
tinygql 5 36 5 38 50 23 50 27
30k_ifelse 5 28 5 28 50 215 50 206
30k_methods 5 39 5 38 50 482 50 469
cfunc_itself 5 346 5 327 50 1046 50 1145
fib 5 127 5 127 50 909 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 311 50 404 50 380
respond_to 5 133 5 142 50 3260 50 3982
ruby-xor 5 242 5 247 50 803 50 1384
setivar 5 358 5 358 50 3124 50 5713
setivar_object 5 374 5 351 50 748 50 849
setivar_young 5 374 5 344 50 771 50 845
str_concat 5 401 5 392 50 971 50 1209
throw 5 1262 5 1255 50 1732 50 1690

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) 1416938 1205450 210 2207 0 0% 0 0 64.081991
chunky-png (click) 299994 237521 85 1127 1 0% 0 0 33.49622
erubi-rails (click) 1921761 1644549 259 2993 19 0% 0 0 81.700185
hexapdf (click) 1453794 1208867 596 13145 40 0% 0 0 375.011792
liquid-c (click) 479063 412602 115 1750 5 0% 0 0 48.501034
liquid-compile (click) 392178 337154 147 2093 2 0% 0 0 65.495625
liquid-render (click) 580727 515744 132 2315 8 0% 0 0 65.606808
lobsters (click) 8099837 6847112 3213 52470 169 0% 0 0 1787.372902
mail (click) 729838 652070 343 5321 14 0% 0 0 153.581477
psych-load (click) 252838 227733 62 620 3 0% 0 0 19.464173
railsbench (click) 3242194 2722905 1642 16186 52 0% 0 0 467.756539
rubocop (click) 5663070 4824825 2888 50567 110 0% 4 0 1468.380112
ruby-lsp (click) 811668 710846 306 4737 24 0% 0 0 134.035655
sequel (click) 451120 416028 12 97 0 0% 0 0 3.494268
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.370796
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.360998
erubi (click) 240831 195198 6 100 0 0% 0 0 3.377061
etanni (click) 31129 29637 8 87 0 0% 0 0 2.975469
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.386059
fluentd (click) 370765 332334 8 96 0 0% 0 0 3.325604
graphql (click) 392746 361504 67 679 0 0% 0 0 21.45703
graphql-native (click) 388697 349590 38 258 0 0% 0 0 8.701112
lee (click) 277338 256046 46 749 0 0% 0 0 23.541218
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.38538
matmul (click) 10988 3769 9 112 0 0% 0 0 3.651172
nbody (click) 13396 17343 7 175 0 0% 0 0 4.590645
nqueens (click) 20494 27605 6 242 0 0% 0 0 7.042958
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 100.171766
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 41.887015
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.227914
rack (click) 258043 244443 33 388 0 0% 0 0 10.243249
ruby-json (click) 20509 17904 9 181 0 0% 0 0 5.080966
rubykon (click) 135230 146429 138 1500 3 0% 0 0 42.905835
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.419678
tinygql (click) 283961 249945 59 765 5 0% 0 0 22.052633
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1406.359033
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 454.356228
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.528851
fib (click) 2930 3118 4 29 0 0% 0 0 1.101175
getivar (click) 3832 4970 4 54 0 0% 0 0 1.497746
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.797518
object-new (click) 2264 2350 3 25 0 0% 0 0 0.940639
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.891309
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 2.007272
setivar (click) 2983 3646 4 34 0 0% 0 0 1.128553
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.25665
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.466298
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.078893
throw (click) 6179 4548 6 49 0 0% 0 0 1.663689

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.