YJIT Benchmarks

Details for Benchmarks at 2025-06-26 03:55:52 UTC

YJIT metrics from the yjit-bench suite using Ruby 4b1de7378d.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 91.8% faster than CRuby 3.5.0dev
  • 4.1% faster than YJIT 3.3.6
On railsbench it is
  • 110.7% faster than CRuby 3.5.0dev
  • 6.0% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 27 minutes
aarch64 runtime: 3 hours, 48 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 82 5 76 50 157 50 157
chunky-png 5 31 5 32 50 14 50 22
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 410 5 416 50 568 50 626
liquid-compile 5 407 5 446 50 541 50 692
liquid-render 5 170 5 170 50 404 50 422
lobsters 5 19 5 19 50 10 50 10
mail 5 195 5 174 50 237 50 194
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 154 50 250 50 256
ruby-lsp 5 157 5 154 50 252 50 259
sequel 5 416 5 408 50 596 50 582
binarytrees 5 84 5 79 50 146 50 117
blurhash 5 82 5 88 50 127 50 144
erubi 5 115 5 140 50 88 50 128
etanni 5 91 5 101 50 53 50 70
fannkuchredux 5 52 5 57 50 97 50 94
fluentd 5 63 5 62 50 25 50 28
graphql 5 85 5 83 50 58 50 55
graphql-native 5 48 5 48 50 11 50 17
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 51 50 88 50 86
nbody 5 248 5 241 50 585 50 690
nqueens 5 120 5 128 50 75 50 564
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 165 50 621 50 757
protoboeuf-encode 5 178 5 203 50 327 50 809
rack 5 587 5 609 50 959 50 1046
ruby-json 5 84 5 83 50 50 50 48
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 51 50 163 50 150
tinygql 5 36 5 34 50 22 50 33
30k_ifelse 5 28 5 27 50 215 50 186
30k_methods 5 38 5 38 50 479 50 469
cfunc_itself 5 357 5 349 50 1147 50 1258
fib 5 127 5 141 50 902 50 935
getivar 5 213 5 297 50 2249 50 2373
keyword_args 5 104 5 105 50 1041 50 1243
loops-times 5 24 5 24 50 48 50 55
object-new 5 322 5 358 50 405 50 583
respond_to 5 134 5 141 50 3257 50 3938
ruby-xor 5 245 5 234 50 800 50 1295
setivar 5 361 5 360 50 3189 50 4918
setivar_object 5 353 5 343 50 670 50 634
setivar_young 5 367 5 343 50 702 50 647
str_concat 5 399 5 418 50 981 50 1106
throw 5 1273 5 1281 50 1714 50 1695

Different Ruby configurations want different amounts of warmup. With no JIT, CRuby needs hardly any. YJIT warms up fairly quickly, while some JITs may start slower as they do more advanced compilation.

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) 1543501 1331584 206 2590 0 0% 0 0 75.458732
chunky-png (click) 372919 341646 74 1322 1 0% 0 0 38.413581
erubi-rails (click) 2013836 1797181 262 3620 21 0% 0 0 99.689941
hexapdf (click) 1557356 1377302 593 15634 43 0% 0 0 460.228947
liquid-c (click) 569431 501907 114 2219 5 0% 0 0 62.656754
liquid-compile (click) 494860 489035 146 2680 2 0% 0 0 79.139883
liquid-render (click) 680129 605303 131 2933 8 0% 0 0 82.612392
lobsters (click) 8547496 7305470 3170 63561 118 0% 0 0 2163.324957
mail (click) 858603 842718 342 7227 40 0% 0 0 205.080983
psych-load (click) 326583 303263 61 825 3 0% 0 0 24.839285
railsbench (click) 3437837 3020020 1655 20252 56 0% 0 0 584.794498
rubocop (click) 5947142 5223346 2886 61714 115 0% 4 0 1821.840682
ruby-lsp (click) 924615 864062 305 5956 29 0% 0 0 165.799486
sequel (click) 545088 444488 11 114 0 0% 0 0 3.84706
binarytrees (click) 152249 149612 6 64 0 0% 0 0 2.607686
blurhash (click) 197266 185948 27 603 0 0% 0 0 18.176313
erubi (click) 289271 298465 5 125 0 0% 0 0 3.870395
etanni (click) 174395 165261 7 98 0 0% 0 0 3.148065
fannkuchredux (click) 169717 175457 3 399 0 0% 0 0 11.170263
fluentd (click) 453705 422055 7 115 0 0% 0 0 3.904336
graphql (click) 493022 482541 66 1035 0 0% 0 0 28.936584
graphql-native (click) 446570 399004 37 399 0 0% 0 0 11.339438
lee (click) 362119 339739 45 1012 0 0% 0 0 30.812507
matmul (click) 156096 147299 8 132 0 0% 0 0 4.146074
nbody (click) 158861 162931 6 238 0 0% 0 0 5.956903
nqueens (click) 167623 171464 5 387 0 0% 0 0 10.328418
optcarrot (click) 470405 424615 188 4740 34 0% 0 0 113.699409
protoboeuf (click) 314557 401678 11 2828 0 0% 0 0 76.369039
protoboeuf-encode (click) 387224 458397 13 1805 0 0% 0 0 46.688591
rack (click) 312584 275884 31 496 0 0% 0 0 12.938762
ruby-json (click) 169667 158143 8 204 0 0% 0 0 5.813286
rubyboy (click) 758184 730295 177 6962 40 0% 0 0 179.327202
rubykon (click) 289622 278524 135 2052 3 0% 0 0 57.147651
sudoku (click) 196554 200084 6 863 0 0% 0 0 23.877023
tinygql (click) 348015 311418 58 977 5 0% 0 0 27.453605
30k_ifelse (click) 6364929 5068920 9259 75432 0 0% 0 0 1981.528656
30k_methods (click) 2379542 1735613 5778 19357 0 0% 0 0 495.752129
cfunc_itself (click) 150098 146851 4 53 0 0% 0 0 1.442049
fib (click) 147630 145691 3 30 0 0% 0 0 1.022963
getivar (click) 148788 149503 3 78 0 0% 0 0 1.91198
keyword_args (click) 151308 147666 5 56 0 0% 0 0 1.777498
loops-times (click) 151948 150714 5 93 0 0% 0 0 2.746702
object-new (click) 147377 145514 2 36 0 0% 0 0 1.051472
respond_to (click) 151427 149520 4 80 0 0% 0 0 2.052869
ruby-xor (click) 150834 151318 4 100 0 0% 0 0 2.657291
setivar (click) 147754 146422 3 46 0 0% 0 0 1.194337
setivar_object (click) 148373 146652 3 49 0 0% 0 0 1.346746
setivar_young (click) 149271 147563 4 63 0 0% 0 0 1.639861
str_concat (click) 150823 149734 6 82 0 0% 0 0 2.464579
throw (click) 150929 147325 5 53 0 0% 0 0 1.860545

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.