YJIT Benchmarks

Details for Benchmarks at 2024-12-14 03:47:49 UTC

YJIT metrics from the yjit-bench suite using Ruby 77016a7b43.

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 91.8% faster than CRuby 3.4.0dev
  • 6.0% faster than YJIT 3.3.6
On railsbench it is
  • 98.4% faster than CRuby 3.4.0dev
  • 4.8% 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.4.0dev warmups CRuby 3.4.0dev iters YJIT 3.3.6 warmups YJIT 3.3.6 iters YJIT 3.4.0dev warmups YJIT 3.4.0dev iters
activerecord 5 82 5 81 50 155 50 162
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 409 5 426 50 574 50 616
liquid-compile 5 408 5 409 50 545 50 558
liquid-render 5 172 5 169 50 407 50 436
lobsters 5 20 5 20 50 10 50 10
mail 5 189 5 186 50 250 50 253
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 266
ruby-lsp 5 155 5 151 50 248 50 270
sequel 5 431 5 413 50 596 50 578
binarytrees 5 84 5 82 50 144 50 139
blurhash 5 82 5 83 50 127 50 145
erubi 5 75 5 148 50 98 50 146
etanni 5 91 5 99 50 54 50 71
fannkuchredux 5 52 5 53 50 101 50 101
fluentd 5 63 5 63 50 25 50 24
graphql 5 84 5 84 50 57 50 56
graphql-native 5 41 5 53 50 10 50 15
lee 5 23 5 23 50 10 50 10
loops-times 5 24 5 24 50 48 50 64
matmul 5 51 5 52 50 84 50 98
nbody 5 249 5 248 50 577 50 705
nqueens 5 120 5 119 50 75 50 564
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 171 50 619 50 719
protoboeuf-encode 5 179 5 196 50 324 50 802
rack 5 586 5 625 50 951 50 1032
ruby-json 5 83 5 85 50 50 50 51
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 164 50 162
tinygql 5 36 5 38 50 23 50 29
30k_ifelse 5 28 5 28 50 216 50 208
30k_methods 5 38 5 38 50 483 50 477
cfunc_itself 5 342 5 333 50 1046 50 1145
fib 5 126 5 126 50 900 50 936
getivar 5 207 5 215 50 2270 50 2623
keyword_args 5 105 5 103 50 959 50 1134
object-new 5 321 5 312 50 404 50 384
respond_to 5 133 5 138 50 3253 50 3982
ruby-xor 5 241 5 248 50 804 50 1383
setivar 5 358 5 358 50 3124 50 5704
setivar_object 5 374 5 341 50 780 50 844
setivar_young 5 373 5 344 50 768 50 844
str_concat 5 399 5 391 50 965 50 1206
throw 5 1261 5 1232 50 1733 50 1610

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) 1421581 1148151 210 2211 0 0% 0 0 64.064151
chunky-png (click) 320669 241817 85 1132 1 0% 0 0 32.874851
erubi-rails (click) 1899795 1624999 260 2956 19 0% 0 0 80.789354
hexapdf (click) 1446150 1225399 597 13163 41 0% 0 0 376.840138
liquid-c (click) 484096 444126 115 1764 5 0% 0 0 49.338678
liquid-compile (click) 404013 335072 147 2109 2 0% 0 0 67.099231
liquid-render (click) 607183 514938 132 2329 8 0% 0 0 65.317446
lobsters (click) 8131684 6886202 3213 52718 169 0% 0 0 1780.931836
mail (click) 727062 625343 343 5321 14 0% 0 0 153.009349
psych-load (click) 253942 214084 62 618 3 0% 0 0 19.384261
railsbench (click) 3248377 2784343 1642 16200 52 0% 0 0 468.62333
rubocop (click) 5694148 4844728 2888 50598 110 0% 4 0 1469.608067
ruby-lsp (click) 815140 733471 306 4740 24 0% 0 0 133.610506
sequel (click) 439432 386363 12 102 0 0% 0 0 3.62186
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.373356
blurhash (click) 50590 43092 28 442 0 0% 0 0 14.352667
erubi (click) 226505 179034 6 100 0 0% 0 0 3.237938
etanni (click) 31129 29637 8 87 0 0% 0 0 2.969259
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.41676
fluentd (click) 352281 309819 8 96 0 0% 0 0 3.288394
graphql (click) 401198 356593 67 679 0 0% 0 0 21.13327
graphql-native (click) 371753 309739 38 258 0 0% 0 0 8.582123
lee (click) 275259 246519 46 749 0 0% 0 0 23.320371
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.400588
matmul (click) 10988 3769 9 112 0 0% 0 0 3.640922
nbody (click) 13396 17343 7 175 0 0% 0 0 4.563299
nqueens (click) 20494 27605 6 242 0 0% 0 0 6.950794
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 100.406586
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.047811
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.379724
rack (click) 246770 211265 33 388 0 0% 0 0 10.236171
ruby-json (click) 25911 22980 9 181 0 0% 0 0 5.094246
rubykon (click) 134396 137392 138 1492 3 0% 0 0 42.737936
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.340437
tinygql (click) 292524 257001 59 765 5 0% 0 0 21.65137
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1409.047097
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 456.143757
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.449349
fib (click) 2930 3118 4 29 0 0% 0 0 1.080973
getivar (click) 3832 4970 4 54 0 0% 0 0 1.482837
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.771885
object-new (click) 2264 2350 3 25 0 0% 0 0 0.892812
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.896982
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 1.989541
setivar (click) 2983 3646 4 34 0 0% 0 0 1.135477
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.213033
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.438293
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.051729
throw (click) 6179 4548 6 49 0 0% 0 0 1.683211

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.