YJIT Benchmarks

Details for Benchmarks at 2025-01-02 03:45:06 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 90.2% faster than CRuby 3.5.0dev
  • 5.4% faster than YJIT 3.3.6
On railsbench it is
  • 97.7% faster than CRuby 3.5.0dev
  • 4.9% 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 83 5 84 50 156 50 161
chunky-png 5 31 5 32 50 16 50 33
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 407 5 423 50 571 50 623
liquid-compile 5 408 5 408 50 574 50 556
liquid-render 5 168 5 170 50 402 50 438
lobsters 5 20 5 20 50 10 50 10
mail 5 195 5 185 50 237 50 245
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 153 50 252 50 264
ruby-lsp 5 155 5 160 50 248 50 275
sequel 5 428 5 413 50 581 50 578
binarytrees 5 84 5 81 50 144 50 139
blurhash 5 82 5 81 50 127 50 145
erubi 5 114 5 144 50 92 50 151
etanni 5 91 5 97 50 54 50 71
fannkuchredux 5 52 5 55 50 101 50 100
fluentd 5 63 5 61 50 25 50 29
graphql 5 85 5 85 50 57 50 57
graphql-native 5 40 5 53 50 10 50 14
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 257 50 578 50 703
nqueens 5 119 5 120 50 75 50 564
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 170 5 172 50 620 50 720
protoboeuf-encode 5 178 5 194 50 325 50 819
rack 5 585 5 636 50 953 50 1040
ruby-json 5 84 5 85 50 49 50 50
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 164 50 160
tinygql 5 36 5 38 50 23 50 29
30k_ifelse 5 28 5 28 50 215 50 206
30k_methods 5 38 5 38 50 483 50 471
cfunc_itself 5 345 5 315 50 1046 50 1145
fib 5 127 5 128 50 909 50 937
getivar 5 207 5 219 50 2258 50 2629
keyword_args 5 107 5 103 50 959 50 1134
object-new 5 321 5 311 50 404 50 379
respond_to 5 133 5 141 50 3261 50 3980
ruby-xor 5 240 5 245 50 803 50 1383
setivar 5 358 5 358 50 3123 50 5712
setivar_object 5 374 5 341 50 745 50 849
setivar_young 5 374 5 344 50 769 50 851
str_concat 5 401 5 392 50 972 50 1200
throw 5 1261 5 1267 50 1731 50 1699

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) 1432617 1169551 210 2207 0 0% 0 0 63.677352
chunky-png (click) 296950 246846 85 1127 1 0% 0 0 33.528659
erubi-rails (click) 1895761 1655515 259 2958 19 0% 0 0 81.073003
hexapdf (click) 1432885 1215339 597 13146 39 0% 0 0 377.315416
liquid-c (click) 481621 416968 115 1750 5 0% 0 0 48.646962
liquid-compile (click) 402977 354274 147 2075 2 0% 0 0 65.028868
liquid-render (click) 581567 525701 132 2315 8 0% 0 0 65.0449
lobsters (click) 8110413 6824816 3213 52488 169 0% 0 0 1774.962838
mail (click) 733695 665174 343 5330 14 0% 0 0 153.914651
psych-load (click) 253796 240814 62 620 3 0% 0 0 19.373507
railsbench (click) 3233641 2756235 1642 16199 52 0% 0 0 476.705284
rubocop (click) 5660680 4848575 2888 50585 110 0% 4 0 1490.400173
ruby-lsp (click) 833212 745908 306 4738 24 0% 0 0 133.804931
sequel (click) 452777 425892 12 97 0 0% 0 0 3.492635
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.416363
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.341797
erubi (click) 226379 166942 6 100 0 0% 0 0 3.30255
etanni (click) 31129 29637 8 87 0 0% 0 0 3.032782
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.499321
fluentd (click) 340476 314579 8 96 0 0% 0 0 3.279767
graphql (click) 399252 349658 67 679 0 0% 0 0 21.071535
graphql-native (click) 389844 358611 38 258 0 0% 0 0 8.786537
lee (click) 267182 201484 46 749 0 0% 0 0 23.315864
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.338639
matmul (click) 10988 3769 9 112 0 0% 0 0 3.674462
nbody (click) 13396 17343 7 175 0 0% 0 0 4.576808
nqueens (click) 20494 27605 6 242 0 0% 0 0 7.038613
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 103.170675
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.348778
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.506216
rack (click) 239229 213343 33 388 0 0% 0 0 10.238221
ruby-json (click) 25911 22980 9 181 0 0% 0 0 5.20854
rubykon (click) 135230 146429 138 1500 3 0% 0 0 43.177615
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.469555
tinygql (click) 269918 238262 59 765 5 0% 0 0 21.56036
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1420.33196
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 454.84753
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.532763
fib (click) 2930 3118 4 29 0 0% 0 0 1.109573
getivar (click) 3832 4970 4 54 0 0% 0 0 1.50001
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.806107
object-new (click) 2264 2350 3 25 0 0% 0 0 0.916138
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.897649
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 2.031235
setivar (click) 2983 3646 4 34 0 0% 0 0 1.147401
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.267852
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.433444
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.09729
throw (click) 6179 4548 6 49 0 0% 0 0 1.698416

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.