YJIT Benchmarks

Details for Benchmarks at 2025-03-01 03:46:53 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 88.9% faster than CRuby 3.5.0dev
  • 5.7% faster than YJIT 3.3.6
On railsbench it is
  • 97.8% faster than CRuby 3.5.0dev
  • 4.6% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 19 minutes
aarch64 runtime: 3 hours, 42 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 83 5 84 50 157 50 166
chunky-png 5 32 5 33 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 420 5 428 50 589 50 613
liquid-compile 5 409 5 419 50 539 50 600
liquid-render 5 172 5 175 50 403 50 441
lobsters 5 19 5 19 50 10 50 10
mail 5 195 5 198 50 252 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 158 50 250 50 267
ruby-lsp 5 157 5 159 50 260 50 266
sequel 5 433 5 419 50 598 50 586
binarytrees 5 84 5 86 50 149 50 140
blurhash 5 82 5 87 50 127 50 145
erubi 5 125 5 152 50 98 50 150
etanni 5 90 5 102 50 54 50 71
fannkuchredux 5 52 5 58 50 99 50 110
fluentd 5 64 5 66 50 25 50 32
graphql 5 85 5 89 50 54 50 56
graphql-native 5 39 5 53 50 10 50 14
lee 5 22 5 23 50 10 50 10
matmul 5 51 5 53 50 85 50 96
nbody 5 248 5 289 50 577 50 707
nqueens 5 120 5 129 50 75 50 566
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 188 50 620 50 720
protoboeuf-encode 5 179 5 211 50 329 50 824
rack 5 566 5 642 50 953 50 1061
ruby-json 5 84 5 84 50 49 50 51
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 37 50 23 50 29
30k_ifelse 5 28 5 28 50 215 50 205
30k_methods 5 38 5 38 50 482 50 477
cfunc_itself 5 345 5 324 50 1147 50 1258
fib 5 125 5 147 50 908 50 933
getivar 5 207 5 336 50 2240 50 2767
keyword_args 5 107 5 110 50 1042 50 1243
loops-times 5 24 5 27 50 48 50 65
object-new 5 322 5 327 50 405 50 383
respond_to 5 134 5 141 50 3258 50 3984
ruby-xor 5 220 5 242 50 803 50 1381
setivar 5 358 5 651 50 3194 50 5935
setivar_object 5 355 5 479 50 700 50 819
setivar_young 5 365 5 480 50 743 50 815
str_concat 5 398 5 457 50 969 50 1198
throw 5 1263 5 1275 50 1770 50 1711

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) 1452073 1203126 209 2204 0 0% 0 0 64.056642
chunky-png (click) 322908 276065 84 1124 1 0% 0 0 32.531205
erubi-rails (click) 1927793 1655859 259 2968 19 0% 0 0 80.725588
hexapdf (click) 1466820 1276579 596 13153 41 0% 0 0 375.080432
liquid-c (click) 503781 412205 114 1743 5 0% 0 0 48.254544
liquid-compile (click) 397292 325544 146 2090 2 0% 0 0 64.582557
liquid-render (click) 574415 462246 131 2309 8 0% 0 0 65.079408
lobsters (click) 8141521 6797812 3157 52818 104 0% 0 0 1820.679378
mail (click) 760879 620739 342 5318 14 0% 0 0 152.899761
psych-load (click) 276847 242495 61 617 3 0% 0 0 19.177038
railsbench (click) 3259050 2809805 1645 16194 52 0% 0 0 462.357371
rubocop (click) 5686941 4779669 2887 50511 110 0% 4 0 1486.522618
ruby-lsp (click) 847686 732579 305 4735 24 0% 0 0 132.698495
sequel (click) 475650 399078 11 94 0 0% 0 0 3.297368
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.206599
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.096284
erubi (click) 251620 204231 5 97 0 0% 0 0 3.201331
etanni (click) 27173 26329 8 88 0 0% 0 0 2.955857
fannkuchredux (click) 23046 13626 3 249 0 0% 0 0 7.277547
fluentd (click) 360404 301704 7 93 0 0% 0 0 3.262817
graphql (click) 398325 365200 66 676 0 0% 0 0 20.693534
graphql-native (click) 365522 321024 37 255 0 0% 0 0 8.510688
lee (click) 299310 253400 45 750 0 0% 0 0 23.18557
matmul (click) 10657 3512 8 109 0 0% 0 0 3.532028
nbody (click) 13065 17086 6 172 0 0% 0 0 4.343971
nqueens (click) 20163 27348 5 239 0 0% 0 0 6.762931
optcarrot (click) 319096 242804 188 4399 34 0% 0 0 102.814248
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 41.798901
protoboeuf-encode (click) 221107 212146 14 1220 0 0% 0 0 31.015143
rack (click) 262322 222529 32 385 0 0% 0 0 10.086956
ruby-json (click) 23441 20329 9 184 0 0% 0 0 5.194828
rubyboy (click) 653536 572798 177 5803 40 0% 0 0 143.727323
rubykon (click) 133546 111856 137 1482 3 0% 0 0 42.218401
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.325029
tinygql (click) 265095 201594 58 762 5 0% 0 0 21.719601
30k_ifelse (click) 5658804 5284852 9259 51668 0 0% 0 0 1406.009853
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 451.093632
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.322615
fib (click) 2599 2861 3 26 0 0% 0 0 0.978223
getivar (click) 3501 4713 3 51 0 0% 0 0 1.312881
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.599773
loops-times (click) 6703 7405 5 71 0 0% 0 0 2.287324
object-new (click) 1933 2093 2 22 0 0% 0 0 0.822437
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.718563
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.904629
setivar (click) 2652 3389 3 31 0 0% 0 0 1.002857
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.128529
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.33157
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.041168
throw (click) 5848 4291 5 46 0 0% 0 0 1.590645

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.