YJIT Benchmarks

Details for Benchmarks at 2025-06-11 03:55:36 UTC

YJIT metrics from the yjit-bench suite using Ruby 82e3312493.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 94.0% faster than CRuby 3.5.0dev
  • 5.3% faster than YJIT 3.3.6
On railsbench it is
  • 104.5% faster than CRuby 3.5.0dev
  • 6.7% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 26 minutes
aarch64 runtime: 3 hours, 45 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 76 50 157 50 167
chunky-png 5 31 5 32 50 14 50 25
erubi-rails 5 16 5 14 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 411 5 415 50 570 50 618
liquid-compile 5 405 5 452 50 540 50 691
liquid-render 5 167 5 169 50 407 50 432
lobsters 5 20 5 19 50 10 50 10
mail 5 189 5 175 50 250 50 214
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 251 50 253
ruby-lsp 5 158 5 150 50 256 50 263
sequel 5 413 5 418 50 596 50 580
binarytrees 5 84 5 81 50 146 50 122
blurhash 5 82 5 87 50 127 50 145
erubi 5 125 5 140 50 87 50 140
etanni 5 91 5 99 50 54 50 70
fannkuchredux 5 52 5 57 50 97 50 104
fluentd 5 63 5 59 50 24 50 28
graphql 5 85 5 81 50 57 50 55
graphql-native 5 49 5 45 50 10 50 17
lee 5 22 5 24 50 10 50 10
matmul 5 51 5 51 50 88 50 90
nbody 5 249 5 240 50 584 50 697
nqueens 5 120 5 116 50 75 50 526
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 154 50 620 50 736
protoboeuf-encode 5 178 5 202 50 327 50 772
rack 5 579 5 605 50 949 50 1033
ruby-json 5 84 5 83 50 49 50 49
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 149
tinygql 5 36 5 35 50 22 50 33
30k_ifelse 5 28 5 27 50 214 50 184
30k_methods 5 38 5 38 50 481 50 475
cfunc_itself 5 359 5 364 50 1147 50 1258
fib 5 126 5 142 50 902 50 931
getivar 5 213 5 327 50 2249 50 2409
keyword_args 5 104 5 109 50 1041 50 1243
loops-times 5 24 5 25 50 48 50 56
object-new 5 322 5 363 50 405 50 584
respond_to 5 133 5 135 50 3258 50 3899
ruby-xor 5 245 5 244 50 799 50 1296
setivar 5 361 5 403 50 3191 50 4979
setivar_object 5 354 5 363 50 671 50 590
setivar_young 5 367 5 363 50 702 50 605
str_concat 5 399 5 449 50 982 50 1191
throw 5 1271 5 1282 50 1718 50 1713

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) 1522526 1341055 206 2590 0 0% 0 0 81.363182
chunky-png (click) 311007 279421 74 1322 1 0% 0 0 38.987544
erubi-rails (click) 1992095 1746823 263 3697 21 0% 0 0 104.043572
hexapdf (click) 1492945 1314071 594 15646 40 0% 0 0 457.209452
liquid-c (click) 503313 443353 114 2217 5 0% 0 0 62.941218
liquid-compile (click) 456635 398302 146 2707 2 0% 0 0 80.088288
liquid-render (click) 639995 561304 131 2933 8 0% 0 0 81.774781
lobsters (click) 8544162 7182180 3169 63858 118 0% 0 0 2268.082992
mail (click) 823700 797916 342 7227 40 0% 0 0 208.111803
psych-load (click) 294128 268521 61 825 3 0% 0 0 24.507128
railsbench (click) 3375420 3044575 1653 20182 56 0% 0 0 583.297678
rubocop (click) 5884843 5088258 2885 61702 114 0% 4 0 1797.256634
ruby-lsp (click) 858066 763358 305 5956 29 0% 0 0 164.105069
sequel (click) 507318 428539 11 115 0 0% 0 0 4.205323
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.642086
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.375069
erubi (click) 245067 204458 5 125 0 0% 0 0 3.934852
etanni (click) 30806 32125 8 108 0 0% 0 0 3.51733
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.248848
fluentd (click) 396914 350090 7 115 0 0% 0 0 4.123297
graphql (click) 459044 413223 66 1035 0 0% 0 0 28.550557
graphql-native (click) 386025 379252 37 399 0 0% 0 0 11.352254
lee (click) 321121 287420 45 1012 0 0% 0 0 30.556932
matmul (click) 11125 4603 8 132 0 0% 0 0 4.259279
nbody (click) 13890 20235 6 238 0 0% 0 0 5.885742
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.44521
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 113.364219
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.635824
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.881257
rack (click) 254015 234017 31 496 0 0% 0 0 13.247104
ruby-json (click) 24676 22156 8 204 0 0% 0 0 5.845707
rubyboy (click) 702956 657731 177 6971 40 0% 0 0 177.244
rubykon (click) 145449 177646 137 2062 3 0% 0 0 57.032332
sudoku (click) 52157 66291 7 871 0 0% 0 0 24.087223
tinygql (click) 282043 255201 58 977 5 0% 0 0 27.26661
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1988.308899
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 491.699384
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.453541
fib (click) 2659 2995 3 30 0 0% 0 0 1.122962
getivar (click) 3812 6802 3 78 0 0% 0 0 1.914179
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.77215
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.76769
object-new (click) 2406 2818 2 36 0 0% 0 0 1.131509
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.117798
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.684367
setivar (click) 2783 3726 3 46 0 0% 0 0 1.248826
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.392427
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.697618
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.498532
throw (click) 5953 4624 5 53 0 0% 0 0 1.810655

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.