YJIT Benchmarks

Details for Benchmarks at 2025-03-28 03:47:51 UTC

YJIT metrics from the yjit-bench suite using Ruby 1e715bd27a.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 85.6% faster than CRuby 3.5.0dev
  • 6.7% faster than YJIT 3.3.6
On railsbench it is
  • 95.9% faster than CRuby 3.5.0dev
  • 7.4% 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 80 5 86 50 151 50 160
chunky-png 5 32 5 34 50 15 50 34
erubi-rails 5 16 5 16 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 406 5 426 50 584 50 634
liquid-compile 5 411 5 429 50 537 50 566
liquid-render 5 169 5 171 50 403 50 442
lobsters 5 20 5 19 50 10 50 10
mail 5 189 5 187 50 238 50 250
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 248 50 268
ruby-lsp 5 156 5 163 50 206 50 203
sequel 5 431 5 413 50 573 50 590
binarytrees 5 84 5 86 50 149 50 143
blurhash 5 82 5 88 50 127 50 145
erubi 5 117 5 145 50 90 50 48
etanni 5 90 5 102 50 54 50 73
fannkuchredux 5 52 5 58 50 99 50 106
fluentd 5 63 5 65 50 25 50 39
graphql 5 85 5 86 50 56 50 60
graphql-native 5 41 5 53 50 10 50 15
lee 5 22 5 23 50 10 50 10
matmul 5 51 5 54 50 85 50 97
nbody 5 248 5 280 50 578 50 707
nqueens 5 120 5 130 50 75 50 565
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 184 50 620 50 726
protoboeuf-encode 5 179 5 208 50 328 50 836
rack 5 565 5 633 50 943 50 1054
ruby-json 5 84 5 83 50 50 50 50
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 22 50 10 50 10
sudoku 5 48 5 51 50 164 50 159
tinygql 5 36 5 39 50 22 50 29
30k_ifelse 5 28 5 28 50 214 50 206
30k_methods 5 39 5 37 50 482 50 475
cfunc_itself 5 346 5 366 50 1147 50 1258
fib 5 127 5 148 50 909 50 933
getivar 5 207 5 345 50 2240 50 2776
keyword_args 5 107 5 111 50 1042 50 1243
loops-times 5 24 5 27 50 48 50 64
object-new 5 322 5 328 50 404 50 382
respond_to 5 134 5 141 50 3258 50 3982
ruby-xor 5 224 5 264 50 803 50 1383
setivar 5 357 5 543 50 3182 50 5881
setivar_object 5 354 5 467 50 700 50 808
setivar_young 5 365 5 465 50 743 50 813
str_concat 5 397 5 476 50 968 50 1226
throw 5 1265 5 1261 50 1773 50 1754

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) 1455211 1183878 209 2202 0 0% 0 0 68.725442
chunky-png (click) 324165 270581 84 1124 1 0% 0 0 33.939262
erubi-rails (click) 1926136 1657040 259 2994 19 0% 0 0 82.537985
hexapdf (click) 1437846 1205088 595 13135 41 0% 0 0 380.944373
liquid-c (click) 504342 438278 115 1744 5 0% 0 0 49.228471
liquid-compile (click) 396679 358971 146 2086 2 0% 0 0 65.81977
liquid-render (click) 608613 516753 132 2310 8 0% 0 0 65.390901
lobsters (click) 8127435 6774850 3160 52679 104 0% 0 0 1806.892996
mail (click) 761435 655433 342 5317 14 0% 0 0 155.587877
psych-load (click) 239280 187972 61 617 3 0% 0 0 19.603845
railsbench (click) 3232818 2742569 1645 16210 52 0% 0 0 468.755835
rubocop (click) 5667232 4922300 2887 50546 110 0% 4 0 1487.837097
ruby-lsp (click) 809628 690909 305 4732 24 0% 0 0 137.147312
sequel (click) 450701 410908 11 94 0 0% 0 0 3.33367
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.259875
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.246272
erubi (click) 229946 177579 5 97 0 0% 0 0 3.213507
etanni (click) 30101 29597 8 88 0 0% 0 0 3.012398
fannkuchredux (click) 23031 13626 3 249 0 0% 0 0 7.412904
fluentd (click) 359122 319714 7 93 0 0% 0 0 3.248582
graphql (click) 426948 350671 66 676 0 0% 0 0 21.224829
graphql-native (click) 393763 355133 37 255 0 0% 0 0 8.672502
lee (click) 301677 248319 45 749 0 0% 0 0 23.656819
matmul (click) 10657 3512 8 109 0 0% 0 0 3.552197
nbody (click) 13050 17086 6 172 0 0% 0 0 4.464934
nqueens (click) 20163 27348 5 239 0 0% 0 0 6.845427
optcarrot (click) 318856 234467 188 4395 34 0% 0 0 103.674165
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.544411
protoboeuf-encode (click) 221062 212146 14 1220 0 0% 0 0 31.86112
rack (click) 231256 199018 32 385 0 0% 0 0 10.33511
ruby-json (click) 20004 17403 8 178 0 0% 0 0 5.053105
rubyboy (click) 693383 575180 177 5803 40 0% 0 0 147.092046
rubykon (click) 133501 111856 137 1482 3 0% 0 0 43.259265
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.513709
tinygql (click) 296757 253070 58 762 5 0% 0 0 22.074609
30k_ifelse (click) 5658774 5284843 9259 51667 0 0% 0 0 1428.410365
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 460.317721
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.333777
fib (click) 2599 2861 3 26 0 0% 0 0 0.995922
getivar (click) 3501 4713 3 51 0 0% 0 0 1.330217
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.611153
loops-times (click) 6688 7405 5 70 0 0% 0 0 2.285176
object-new (click) 1918 2093 2 22 0 0% 0 0 0.844209
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.745675
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.890282
setivar (click) 2652 3389 3 31 0 0% 0 0 1.005428
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.126061
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.327208
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.097388
throw (click) 5848 4291 5 46 0 0% 0 0 1.595974

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.