YJIT Benchmarks

Details for Benchmarks at 2025-01-06 03:46:10 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 90.1% faster than CRuby 3.5.0dev
  • 6.3% faster than YJIT 3.3.6
On railsbench it is
  • 96.2% faster than CRuby 3.5.0dev
  • 4.6% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 50 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 82 5 83 50 157 50 158
chunky-png 5 31 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 421 5 428 50 591 50 630
liquid-compile 5 427 5 423 50 541 50 590
liquid-render 5 170 5 169 50 407 50 434
lobsters 5 20 5 20 50 10 50 10
mail 5 189 5 190 50 243 50 242
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 265
ruby-lsp 5 159 5 161 50 235 50 260
sequel 5 428 5 412 50 594 50 576
binarytrees 5 84 5 82 50 144 50 141
blurhash 5 82 5 82 50 127 50 145
erubi 5 116 5 149 50 98 50 152
etanni 5 91 5 98 50 54 50 72
fannkuchredux 5 51 5 55 50 101 50 105
fluentd 5 64 5 63 50 25 50 31
graphql 5 85 5 86 50 57 50 60
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 248 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 173 5 174 50 620 50 726
protoboeuf-encode 5 179 5 198 50 328 50 788
rack 5 580 5 625 50 953 50 1057
ruby-json 5 83 5 84 50 49 50 50
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 164 50 161
tinygql 5 36 5 37 50 22 50 27
30k_ifelse 5 28 5 28 50 214 50 206
30k_methods 5 39 5 39 50 478 50 472
cfunc_itself 5 346 5 327 50 1046 50 1145
fib 5 127 5 126 50 909 50 937
getivar 5 207 5 218 50 2255 50 2628
keyword_args 5 106 5 104 50 959 50 1134
object-new 5 321 5 310 50 404 50 381
respond_to 5 133 5 142 50 3261 50 3982
ruby-xor 5 241 5 247 50 803 50 1384
setivar 5 357 5 358 50 3126 50 5712
setivar_object 5 356 5 342 50 761 50 850
setivar_young 5 373 5 344 50 769 50 842
str_concat 5 402 5 392 50 969 50 1210
throw 5 1262 5 1265 50 1731 50 1692

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) 1421935 1167271 210 2207 0 0% 0 0 64.442114
chunky-png (click) 319554 257219 85 1127 1 0% 0 0 33.038382
erubi-rails (click) 1930090 1595101 259 3032 19 0% 0 0 82.05799
hexapdf (click) 1437146 1194132 596 13145 40 0% 0 0 376.539357
liquid-c (click) 474846 419763 115 1750 5 0% 0 0 48.382899
liquid-compile (click) 403047 357848 147 2071 2 0% 0 0 63.265975
liquid-render (click) 576771 479794 132 2315 8 0% 0 0 65.000442
lobsters (click) 8124879 6854919 3212 52593 171 0% 0 0 1788.644829
mail (click) 761462 605041 343 5321 14 0% 0 0 156.379917
psych-load (click) 280015 236832 62 620 3 0% 0 0 19.049614
railsbench (click) 3250987 2803343 1642 16206 52 0% 0 0 467.592253
rubocop (click) 5691263 4915829 2888 50571 110 0% 4 0 1490.322384
ruby-lsp (click) 809822 706983 306 4738 24 0% 0 0 133.079977
sequel (click) 451120 416028 12 97 0 0% 0 0 3.496166
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.388304
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.481607
erubi (click) 223801 196636 6 100 0 0% 0 0 3.249959
etanni (click) 31129 29637 8 87 0 0% 0 0 2.960806
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.407173
fluentd (click) 337876 304594 8 96 0 0% 0 0 3.222406
graphql (click) 399654 317208 67 679 0 0% 0 0 21.204025
graphql-native (click) 393352 352985 38 258 0 0% 0 0 8.630276
lee (click) 275070 264307 46 749 0 0% 0 0 23.305059
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.340281
matmul (click) 10988 3769 9 112 0 0% 0 0 3.634142
nbody (click) 13396 17343 7 175 0 0% 0 0 4.562884
nqueens (click) 20494 27605 6 242 0 0% 0 0 7.021392
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 100.482477
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.124161
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.145594
rack (click) 237387 184726 33 388 0 0% 0 0 10.319223
ruby-json (click) 25796 22844 9 181 0 0% 0 0 5.160453
rubykon (click) 135230 146429 138 1500 3 0% 0 0 42.474102
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.293983
tinygql (click) 299441 253987 59 765 5 0% 0 0 21.566956
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1412.159621
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 452.123331
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.485677
fib (click) 2930 3118 4 29 0 0% 0 0 1.109807
getivar (click) 3832 4970 4 54 0 0% 0 0 1.43844
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.781728
object-new (click) 2264 2350 3 25 0 0% 0 0 0.900746
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.907783
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 1.976961
setivar (click) 2983 3646 4 34 0 0% 0 0 1.153785
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.243618
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.477369
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.140742
throw (click) 6179 4548 6 49 0 0% 0 0 1.696943

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.