YJIT Benchmarks

Details for Benchmarks at 2025-08-05 04:03:54 UTC

YJIT metrics from the yjit-bench suite using Ruby 946165bd48.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 87.1% faster than CRuby 3.5.0dev
  • 3.1% faster than YJIT 3.3.6
On railsbench it is
  • 98.5% faster than CRuby 3.5.0dev
  • 3.8% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 29 minutes
aarch64 runtime: 3 hours, 49 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 82 50 155 50 157
chunky-png 5 31 5 32 50 15 50 23
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 411 5 393 50 568 50 521
liquid-compile 5 424 5 467 50 549 50 705
liquid-render 5 171 5 169 50 410 50 360
lobsters 5 19 5 19 50 10 50 10
mail 5 190 5 176 50 241 50 199
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 139 5 141 50 203 50 217
ruby-lsp 5 148 5 146 50 246 50 244
sequel 5 432 5 431 50 601 50 588
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 79 50 146 50 119
blurhash 5 82 5 85 50 127 50 144
erubi 5 116 5 141 50 89 50 134
etanni 5 91 5 97 50 53 50 66
fannkuchredux 5 52 5 57 50 97 50 98
fluentd 5 62 5 59 50 24 50 22
graphql 5 332 5 451 50 445 50 924
graphql-native 5 52 5 75 50 12 50 57
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 52 50 88 50 90
nbody 5 249 5 247 50 585 50 695
nqueens 5 120 5 128 50 74 50 559
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 180 5 184 50 621 50 738
protoboeuf-encode 5 175 5 201 50 328 50 795
rack 5 424 5 439 50 646 50 686
ruby-json 5 84 5 80 50 50 50 47
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 20 5 22 50 10 50 10
sudoku 5 48 5 51 50 163 50 149
tinygql 5 40 5 42 50 38 50 49
30k_ifelse 5 28 5 27 50 217 50 183
30k_methods 5 38 5 38 50 482 50 473
attr_accessor 5 157 5 174 50 1724 50 1863
cfunc_itself 5 358 5 362 50 1137 50 1258
fib 5 127 5 141 50 902 50 929
getivar 5 213 5 284 50 2251 50 2380
keyword_args 5 104 5 108 50 1034 50 1243
loops-times 5 24 5 24 50 48 50 51
object-new 5 318 5 305 50 404 50 426
respond_to 5 133 5 135 50 3238 50 3934
ruby-xor 5 243 5 252 50 799 50 1278
setivar 5 361 5 343 50 3189 50 4912
setivar_object 5 355 5 308 50 671 50 605
setivar_young 5 367 5 311 50 703 50 618
str_concat 5 401 5 419 50 977 50 1199
throw 5 1272 5 1129 50 1733 50 1405

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) 1551308 1333283 206 2590 0 0% 0 0 79.593439
chunky-png (click) 364105 362906 74 1322 1 0% 0 0 39.241664
erubi-rails (click) 1928990 1604886 262 3642 22 0% 0 0 103.738128
hexapdf (click) 1563079 1321167 593 15677 45 0% 0 0 457.180968
liquid-c (click) 583452 528028 114 2217 5 0% 0 0 62.782001
liquid-compile (click) 507819 498036 146 2717 2 0% 0 0 81.55355
liquid-render (click) 691369 636947 131 2933 8 0% 0 0 82.123139
lobsters (click) 8578447 7223881 3161 63772 118 0% 0 0 2175.506588
mail (click) 876423 848191 342 7243 40 0% 0 0 212.21859
psych-load (click) 332242 284069 61 830 2 0% 0 0 25.19703
railsbench (click) 3374020 3012613 1649 20120 58 0% 0 0 588.355876
rubocop (click) 6155826 5337559 3013 63548 161 0% 6 0 1991.557693
ruby-lsp (click) 994197 953883 345 6755 48 0% 1 0 189.29998
sequel (click) 540530 456789 11 119 0 0% 0 0 4.13674
shipit (click) 7236981 6265043 3389 54010 214 0% 0 0 1812.378472
binarytrees (click) 154320 151361 6 64 0 0% 0 0 2.640821
blurhash (click) 199337 195889 27 603 0 0% 0 0 18.095845
erubi (click) 284231 250033 5 125 0 0% 0 0 3.975329
etanni (click) 176957 175574 7 98 0 0% 0 0 3.207796
fannkuchredux (click) 171788 169014 3 399 0 0% 0 0 11.249664
fluentd (click) 507160 461903 7 115 0 0% 0 0 3.768553
graphql (click) 445127 410156 72 1918 17 0% 0 0 55.79997
graphql-native (click) 388478 367483 39 532 0 0% 0 0 14.044649
lee (click) 348149 315817 49 1070 0 0% 0 0 32.064049
matmul (click) 158172 149053 8 132 0 0% 0 0 4.147523
nbody (click) 160937 156493 6 238 0 0% 0 0 5.840883
nqueens (click) 169699 173218 5 387 0 0% 0 0 10.417959
optcarrot (click) 472476 475516 188 4740 34 0% 0 0 113.782717
protoboeuf (click) 316633 370664 11 2828 0 0% 0 0 76.431211
protoboeuf-encode (click) 389300 386423 13 1805 0 0% 0 0 46.439266
rack (click) 323277 280788 35 580 0 0% 0 0 15.817531
ruby-json (click) 167719 163604 8 204 0 0% 0 0 5.784049
rubyboy (click) 728310 708230 154 6858 42 0% 0 0 175.26411
rubykon (click) 292478 289326 135 2060 3 0% 0 0 57.022472
sudoku (click) 198625 193641 6 863 0 0% 0 0 23.813729
tinygql (click) 347779 309978 59 1031 5 0% 0 0 27.825747
30k_ifelse (click) 6367005 5283666 9259 75432 0 0% 0 0 1965.216502
30k_methods (click) 2381613 1737482 5778 19357 0 0% 0 0 486.204925
attr_accessor (click) 151419 152402 3 78 0 0% 0 0 2.05984
cfunc_itself (click) 152174 148605 4 53 0 0% 0 0 1.446987
fib (click) 149706 139253 3 30 0 0% 0 0 1.021412
getivar (click) 150859 143060 3 78 0 0% 0 0 1.905244
keyword_args (click) 153379 149435 5 56 0 0% 0 0 1.82249
loops-times (click) 154019 144271 5 93 0 0% 0 0 2.760096
object-new (click) 149453 139076 2 36 0 0% 0 0 1.030888
respond_to (click) 153498 151269 4 80 0 0% 0 0 2.163493
ruby-xor (click) 152918 144943 4 100 0 0% 0 0 2.727259
setivar (click) 149830 139984 3 46 0 0% 0 0 1.234974
setivar_object (click) 150449 140214 3 49 0 0% 0 0 1.36238
setivar_young (click) 151347 149317 4 63 0 0% 0 0 1.686622
str_concat (click) 152894 151483 6 82 0 0% 0 0 2.4633
throw (click) 153000 149074 5 53 0 0% 0 0 1.797241

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.