YJIT Benchmarks

Details for Benchmarks at 2025-06-21 03:53:02 UTC

YJIT metrics from the yjit-bench suite using Ruby 6602a08aa5.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 92.4% faster than CRuby 3.5.0dev
  • 2.9% faster than YJIT 3.3.6
On railsbench it is
  • 99.8% faster than CRuby 3.5.0dev
  • 2.2% 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 83 5 73 50 154 50 153
chunky-png 5 31 5 32 50 15 50 24
erubi-rails 5 15 5 14 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 411 5 412 50 588 50 617
liquid-compile 5 405 5 448 50 541 50 693
liquid-render 5 168 5 166 50 403 50 437
lobsters 5 20 5 19 50 10 50 10
mail 5 195 5 168 50 250 50 187
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 153 50 251 50 255
ruby-lsp 5 155 5 151 50 253 50 263
sequel 5 427 5 404 50 595 50 575
binarytrees 5 84 5 79 50 146 50 118
blurhash 5 82 5 84 50 127 50 145
erubi 5 124 5 140 50 87 50 144
etanni 5 90 5 100 50 54 50 68
fannkuchredux 5 52 5 57 50 97 50 98
fluentd 5 63 5 59 50 25 50 28
graphql 5 85 5 82 50 58 50 54
graphql-native 5 39 5 45 50 10 50 16
lee 5 23 5 21 50 10 50 10
matmul 5 51 5 48 50 88 50 91
nbody 5 249 5 226 50 585 50 701
nqueens 5 120 5 124 50 75 50 522
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 173 5 159 50 620 50 759
protoboeuf-encode 5 172 5 206 50 325 50 809
rack 5 587 5 609 50 954 50 1041
ruby-json 5 83 5 83 50 50 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 34 50 22 50 33
30k_ifelse 5 28 5 27 50 215 50 184
30k_methods 5 39 5 38 50 480 50 476
cfunc_itself 5 358 5 347 50 1147 50 1258
fib 5 127 5 145 50 902 50 931
getivar 5 207 5 291 50 2251 50 2386
keyword_args 5 104 5 98 50 1041 50 1243
loops-times 5 24 5 25 50 48 50 56
object-new 5 322 5 354 50 405 50 597
respond_to 5 134 5 134 50 3256 50 3900
ruby-xor 5 245 5 252 50 800 50 1293
setivar 5 361 5 378 50 3186 50 4953
setivar_object 5 354 5 361 50 670 50 618
setivar_young 5 367 5 362 50 704 50 646
str_concat 5 399 5 447 50 981 50 1122
throw 5 1273 5 1252 50 1718 50 1718

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) 1522666 1258724 206 2590 0 0% 0 0 79.754301
chunky-png (click) 309673 278658 74 1322 1 0% 0 0 39.449572
erubi-rails (click) 1970318 1668530 262 3659 21 0% 0 0 102.100241
hexapdf (click) 1515774 1373430 593 15607 40 0% 0 0 448.103001
liquid-c (click) 502471 492183 114 2217 5 0% 0 0 61.289145
liquid-compile (click) 456514 414428 146 2691 2 0% 0 0 80.865775
liquid-render (click) 604459 562835 131 2933 8 0% 0 0 80.820063
lobsters (click) 8535471 7227406 3169 63941 118 0% 0 0 2163.000892
mail (click) 825547 798471 342 7227 40 0% 0 0 210.60196
psych-load (click) 294592 260211 61 825 3 0% 0 0 24.465742
railsbench (click) 3404875 3153838 1653 20208 56 0% 0 0 580.962006
rubocop (click) 5886599 5230090 2885 61704 114 0% 4 0 1783.874258
ruby-lsp (click) 857939 763315 305 5956 29 0% 0 0 163.568451
sequel (click) 480178 419937 11 115 0 0% 0 0 3.883181
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.629211
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.199277
erubi (click) 245324 220640 5 125 0 0% 0 0 3.953823
etanni (click) 30806 32125 8 108 0 0% 0 0 3.519137
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.12213
fluentd (click) 421615 354155 7 115 0 0% 0 0 3.740076
graphql (click) 433950 349507 66 1035 0 0% 0 0 29.962603
graphql-native (click) 377413 348186 37 399 0 0% 0 0 11.897213
lee (click) 281700 261822 45 1012 0 0% 0 0 30.354329
matmul (click) 11125 4603 8 132 0 0% 0 0 4.219977
nbody (click) 13890 20235 6 238 0 0% 0 0 5.901017
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.417527
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 112.957169
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 75.611261
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.690606
rack (click) 281084 242354 31 496 0 0% 0 0 12.9649
ruby-json (click) 24637 22156 8 204 0 0% 0 0 5.867749
rubyboy (click) 702269 624138 177 6962 40 0% 0 0 180.113961
rubykon (click) 147914 164247 137 2092 3 0% 0 0 58.162913
sudoku (click) 52157 66291 7 871 0 0% 0 0 24.047765
tinygql (click) 315326 284433 58 977 5 0% 0 0 27.350151
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1968.005835
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 490.969728
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.472863
fib (click) 2659 2995 3 30 0 0% 0 0 1.087804
getivar (click) 3812 6802 3 78 0 0% 0 0 1.924551
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.755669
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.759461
object-new (click) 2406 2818 2 36 0 0% 0 0 1.11746
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.082438
ruby-xor (click) 5863 8622 4 100 0 0% 0 0 2.737274
setivar (click) 2783 3726 3 46 0 0% 0 0 1.252885
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.388621
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.726582
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.532125
throw (click) 5953 4624 5 53 0 0% 0 0 1.820773

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.