YJIT Benchmarks

Details for Benchmarks at 2024-12-17 03:49:02 UTC

YJIT metrics from the yjit-bench suite using Ruby 9a52902490.

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 91.5% faster than CRuby 3.4.0dev
  • 7.0% faster than YJIT 3.3.6
On railsbench it is
  • 94.7% faster than CRuby 3.4.0dev
  • 5.5% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 51 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.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 161
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 420 5 426 50 572 50 630
liquid-compile 5 409 5 411 50 540 50 590
liquid-render 5 172 5 170 50 405 50 435
lobsters 5 20 5 20 50 10 50 10
mail 5 194 5 186 50 238 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 157 50 251 50 269
ruby-lsp 5 157 5 157 50 245 50 265
sequel 5 417 5 417 50 571 50 575
binarytrees 5 84 5 82 50 144 50 142
blurhash 5 82 5 84 50 127 50 145
erubi 5 76 5 150 50 89 50 145
etanni 5 91 5 99 50 54 50 69
fannkuchredux 5 52 5 54 50 101 50 100
fluentd 5 64 5 65 50 25 50 31
graphql 5 84 5 85 50 57 50 56
graphql-native 5 48 5 52 50 10 50 14
lee 5 23 5 23 50 10 50 10
loops-times 5 24 5 23 50 48 50 64
matmul 5 51 5 51 50 85 50 96
nbody 5 248 5 248 50 577 50 705
nqueens 5 120 5 120 50 75 50 560
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 173 5 175 50 621 50 714
protoboeuf-encode 5 179 5 197 50 328 50 808
rack 5 576 5 631 50 942 50 1049
ruby-json 5 84 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 27
30k_ifelse 5 28 5 28 50 216 50 208
30k_methods 5 39 5 39 50 479 50 469
cfunc_itself 5 346 5 339 50 1046 50 1145
fib 5 126 5 127 50 909 50 937
getivar 5 207 5 215 50 2261 50 2615
keyword_args 5 107 5 106 50 959 50 1134
object-new 5 320 5 309 50 404 50 380
respond_to 5 133 5 137 50 3260 50 3982
ruby-xor 5 224 5 247 50 803 50 1332
setivar 5 358 5 357 50 3125 50 5706
setivar_object 5 372 5 341 50 748 50 832
setivar_young 5 375 5 344 50 770 50 851
str_concat 5 401 5 395 50 969 50 1206
throw 5 1260 5 1233 50 1745 50 1616

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) 1421911 1189381 210 2211 0 0% 0 0 64.404434
chunky-png (click) 292685 266621 85 1127 1 0% 0 0 33.017179
erubi-rails (click) 1930749 1601187 260 2970 19 0% 0 0 81.029385
hexapdf (click) 1469102 1303006 597 13162 41 0% 0 0 377.062971
liquid-c (click) 470173 424295 115 1764 5 0% 0 0 48.810074
liquid-compile (click) 429600 384613 147 2089 2 0% 0 0 63.442024
liquid-render (click) 606039 538471 132 2329 8 0% 0 0 66.202398
lobsters (click) 8153264 6784089 3214 52810 170 0% 0 0 1792.94112
mail (click) 757682 643411 343 5321 14 0% 0 0 156.83636
psych-load (click) 247016 190222 62 620 3 0% 0 0 19.204558
railsbench (click) 3258365 2839878 1642 16209 52 0% 0 0 468.940531
rubocop (click) 5666696 4795808 2888 50599 110 0% 4 0 1485.352911
ruby-lsp (click) 846545 755778 306 4744 24 0% 0 0 133.72323
sequel (click) 453381 379953 12 109 0 0% 0 0 4.147977
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.342762
blurhash (click) 50590 43092 28 442 0 0% 0 0 14.217987
erubi (click) 224376 170027 6 100 0 0% 0 0 3.326488
etanni (click) 27627 26630 9 91 0 0% 0 0 3.058132
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.398289
fluentd (click) 344379 317231 8 96 0 0% 0 0 3.357176
graphql (click) 399792 357314 67 679 0 0% 0 0 20.987973
graphql-native (click) 368780 304708 38 258 0 0% 0 0 8.646718
lee (click) 276046 239117 46 749 0 0% 0 0 23.352712
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.346559
matmul (click) 10988 3769 9 112 0 0% 0 0 3.607772
nbody (click) 13396 17343 7 175 0 0% 0 0 4.56117
nqueens (click) 20494 27605 6 242 0 0% 0 0 7.073809
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 103.040743
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.134276
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.22565
rack (click) 265111 257819 33 388 0 0% 0 0 10.03737
ruby-json (click) 20509 17904 9 181 0 0% 0 0 5.103132
rubykon (click) 134396 137392 138 1492 3 0% 0 0 42.614428
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.350829
tinygql (click) 268429 242690 59 765 5 0% 0 0 21.731287
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1413.801543
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 450.550586
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.505001
fib (click) 2930 3118 4 29 0 0% 0 0 1.131429
getivar (click) 3832 4970 4 54 0 0% 0 0 1.470644
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.751667
object-new (click) 2264 2350 3 25 0 0% 0 0 0.905021
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.907605
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 1.957653
setivar (click) 2983 3646 4 34 0 0% 0 0 1.130025
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.251542
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.444006
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.09609
throw (click) 6179 4548 6 49 0 0% 0 0 1.689782

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.