YJIT Benchmarks

Details for Benchmarks at 2025-02-15 03:44:00 UTC

YJIT metrics from the yjit-bench suite using Ruby 2556a975c7.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 85.0% faster than CRuby 3.5.0dev
  • 5.7% faster than YJIT 3.3.6
On railsbench it is
  • 98.0% faster than CRuby 3.5.0dev
  • 5.1% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 19 minutes
aarch64 runtime: 3 hours, 40 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 81 5 84 50 152 50 162
chunky-png 5 31 5 34 50 15 50 35
erubi-rails 5 16 5 16 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 422 50 571 50 624
liquid-compile 5 407 5 413 50 540 50 560
liquid-render 5 171 5 175 50 404 50 438
lobsters 5 20 5 19 50 10 50 10
mail 5 195 5 197 50 237 50 253
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 159 50 252 50 269
ruby-lsp 5 157 5 163 50 242 50 208
sequel 5 433 5 423 50 574 50 580
binarytrees 5 84 5 86 50 149 50 142
blurhash 5 82 5 87 50 127 50 144
erubi 5 125 5 148 50 91 50 121
etanni 5 90 5 101 50 54 50 71
fannkuchredux 5 52 5 58 50 99 50 111
fluentd 5 63 5 64 50 24 50 29
graphql 5 84 5 86 50 57 50 58
graphql-native 5 40 5 53 50 10 50 14
lee 5 23 5 23 50 10 50 10
matmul 5 50 5 54 50 85 50 94
nbody 5 248 5 286 50 577 50 707
nqueens 5 120 5 129 50 75 50 563
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 183 50 620 50 643
protoboeuf-encode 5 180 5 211 50 327 50 831
rack 5 578 5 644 50 956 50 1038
ruby-json 5 84 5 84 50 50 50 50
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 20 5 22 50 10 50 10
sudoku 5 48 5 51 50 164 50 160
tinygql 5 36 5 38 50 22 50 25
30k_ifelse 5 28 5 28 50 215 50 207
30k_methods 5 38 5 38 50 483 50 474
cfunc_itself 5 346 5 370 50 1147 50 1258
fib 5 127 5 147 50 910 50 933
getivar 5 207 5 288 50 2242 50 2731
keyword_args 5 106 5 113 50 1042 50 1243
loops-times 5 24 5 28 50 47 50 65
object-new 5 323 5 328 50 406 50 385
respond_to 5 134 5 142 50 3257 50 3981
ruby-xor 5 224 5 243 50 803 50 1380
setivar 5 358 5 599 50 3189 50 5904
setivar_object 5 355 5 482 50 699 50 759
setivar_young 5 365 5 481 50 743 50 811
str_concat 5 401 5 482 50 969 50 1191
throw 5 1264 5 1300 50 1780 50 1737

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) 1421439 1186861 209 2204 0 0% 0 0 64.169364
chunky-png (click) 288342 264214 84 1129 1 0% 0 0 33.623926
erubi-rails (click) 1925010 1685557 259 2966 19 0% 0 0 81.403403
hexapdf (click) 1430323 1271200 595 13143 36 0% 0 0 373.32969
liquid-c (click) 471023 393484 114 1740 5 0% 0 0 48.687728
liquid-compile (click) 429374 359786 146 2079 2 0% 0 0 64.889427
liquid-render (click) 574334 459785 131 2309 8 0% 0 0 64.471638
lobsters (click) 8142102 6879763 3158 52764 105 0% 0 0 1769.932491
mail (click) 759736 620409 342 5318 14 0% 0 0 156.608311
psych-load (click) 276477 242258 61 615 3 0% 0 0 19.195318
railsbench (click) 3232511 2745426 1645 16199 52 0% 0 0 468.514945
rubocop (click) 5686252 5000775 2887 50511 110 0% 4 0 1565.828793
ruby-lsp (click) 845591 738978 305 4733 24 0% 0 0 134.490302
sequel (click) 477261 392555 11 94 0 0% 0 0 3.413463
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.228666
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.069568
erubi (click) 218967 150571 5 97 0 0% 0 0 3.119157
etanni (click) 27173 26329 8 88 0 0% 0 0 2.985841
fannkuchredux (click) 23046 13626 3 249 0 0% 0 0 7.327513
fluentd (click) 387559 317687 7 93 0 0% 0 0 3.217448
graphql (click) 391389 342639 66 676 0 0% 0 0 20.990686
graphql-native (click) 360388 275325 37 255 0 0% 0 0 8.528681
lee (click) 264610 224504 45 750 0 0% 0 0 23.296662
matmul (click) 10657 3512 8 109 0 0% 0 0 3.601266
nbody (click) 13065 17086 6 172 0 0% 0 0 4.419382
nqueens (click) 20163 27348 5 239 0 0% 0 0 6.881357
optcarrot (click) 319096 242804 188 4399 34 0% 0 0 100.886945
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.362279
protoboeuf-encode (click) 221107 212146 14 1220 0 0% 0 0 31.062648
rack (click) 239032 203563 32 385 0 0% 0 0 10.17828
ruby-json (click) 23859 20840 8 178 0 0% 0 0 5.026447
rubyboy (click) 662793 564469 177 5803 40 0% 0 0 144.378462
rubykon (click) 133546 111856 137 1482 3 0% 0 0 42.48092
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.297428
tinygql (click) 260456 238505 58 762 5 0% 0 0 21.55602
30k_ifelse (click) 5658804 5284852 9259 51668 0 0% 0 0 1412.130521
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 450.624792
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.330981
fib (click) 2599 2861 3 26 0 0% 0 0 0.977583
getivar (click) 3501 4713 3 51 0 0% 0 0 1.360968
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.598283
loops-times (click) 6703 7405 5 71 0 0% 0 0 2.294042
object-new (click) 1933 2093 2 22 0 0% 0 0 0.828097
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.722243
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.91009
setivar (click) 2652 3389 3 31 0 0% 0 0 1.013478
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.123447
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.336596
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.059489
throw (click) 5848 4291 5 46 0 0% 0 0 1.577807

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.