YJIT Benchmarks

Details for Benchmarks at 2025-08-24 03:55:00 UTC

YJIT metrics from the yjit-bench suite using Ruby 8a704783f8.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 90.4% faster than CRuby 3.5.0dev
  • 6.1% faster than YJIT 3.3.6
On railsbench it is
  • 100.8% faster than CRuby 3.5.0dev
  • 6.1% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 28 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 86 50 177 50 200
chunky-png 5 31 5 33 50 14 50 26
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 408 5 399 50 568 50 527
liquid-compile 5 409 5 470 50 542 50 699
liquid-render 5 167 5 166 50 405 50 383
lobsters 5 20 5 20 50 10 50 10
mail 5 188 5 177 50 235 50 205
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 216
ruby-lsp 5 142 5 148 50 234 50 245
sequel 5 418 5 427 50 579 50 590
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 80 50 146 50 117
blurhash 5 82 5 85 50 127 50 145
erubi 5 125 5 137 50 100 50 138
etanni 5 90 5 97 50 53 50 67
fannkuchredux 5 52 5 57 50 97 50 96
fluentd 5 62 5 60 50 24 50 21
graphql 5 347 5 447 50 476 50 921
graphql-native 5 52 5 82 50 13 50 62
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 48 50 88 50 92
nbody 5 249 5 240 50 585 50 698
nqueens 5 120 5 127 50 74 50 550
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 180 5 184 50 621 50 693
protoboeuf-encode 5 176 5 203 50 326 50 784
rack 5 423 5 432 50 639 50 693
ruby-json 5 83 5 82 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 41 5 43 50 42 50 48
30k_ifelse 5 28 5 27 50 215 50 184
30k_methods 5 39 5 38 50 481 50 470
attr_accessor 5 157 5 183 50 1721 50 1879
cfunc_itself 5 357 5 352 50 1137 50 1258
fib 5 126 5 144 50 902 50 931
getivar 5 213 5 304 50 2254 50 2399
keyword_args 5 104 5 106 50 1034 50 1243
loops-times 5 24 5 24 50 48 50 55
object-new 5 320 5 300 50 404 50 413
respond_to 5 133 5 123 50 3257 50 3900
ruby-xor 5 245 5 255 50 799 50 1280
setivar 5 361 5 355 50 3186 50 4932
setivar_object 5 359 5 314 50 671 50 601
setivar_young 5 367 5 318 50 701 50 642
str_concat 5 400 5 438 50 980 50 1191
throw 5 1272 5 1123 50 1731 50 1434

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) 1520148 1296295 203 2569 0 0% 0 0 74.315667
chunky-png (click) 314007 279386 74 1322 1 0% 0 0 38.942181
erubi-rails (click) 1909713 1615637 262 3733 22 0% 0 0 105.131492
hexapdf (click) 1511100 1323912 593 15663 43 0% 0 0 453.890791
liquid-c (click) 538162 481736 114 2217 5 0% 0 0 61.956599
liquid-compile (click) 462402 402381 146 2706 2 0% 0 0 80.323339
liquid-render (click) 645115 540481 131 2933 8 0% 0 0 80.620068
lobsters (click) 8485529 7119993 3121 63243 118 0% 0 0 2145.645046
mail (click) 827835 799193 342 7227 40 0% 0 0 203.932328
psych-load (click) 278714 220481 61 830 2 0% 0 0 24.348799
railsbench (click) 3297780 2904783 1605 19585 47 0% 0 0 564.819371
rubocop (click) 6109739 5288182 3011 63533 155 0% 6 0 1862.681329
ruby-lsp (click) 949389 882778 344 6749 43 0% 1 0 188.057922
sequel (click) 489901 446833 11 119 0 0% 0 0 4.057412
shipit (click) 7554396 6281209 3288 52078 181 0% 0 0 1696.391399
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.61976
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.033857
erubi (click) 245269 202635 5 125 0 0% 0 0 3.863231
etanni (click) 30806 32125 8 108 0 0% 0 0 3.615528
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.048869
fluentd (click) 462030 382430 7 115 0 0% 0 0 3.751143
graphql (click) 400507 389149 73 1919 19 0% 0 0 55.090387
graphql-native (click) 342625 312687 39 532 0 0% 0 0 14.252493
lee (click) 307261 307725 49 1070 0 0% 0 0 31.752933
matmul (click) 11125 4603 8 132 0 0% 0 0 4.203389
nbody (click) 13890 20235 6 238 0 0% 0 0 5.786998
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.456981
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 111.887941
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.392753
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.135836
rack (click) 272060 253221 35 580 0 0% 0 0 15.579983
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.748432
rubyboy (click) 686137 591697 154 6860 42 0% 0 0 174.829406
rubykon (click) 146229 162118 137 2070 3 0% 0 0 56.83367
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.884576
tinygql (click) 297669 267356 59 1031 5 0% 0 0 28.326973
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1952.606103
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 485.007238
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.079856
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.501149
fib (click) 2659 2995 3 30 0 0% 0 0 1.060654
getivar (click) 3812 6802 3 78 0 0% 0 0 1.886169
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.795901
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.7475
object-new (click) 2406 2818 2 36 0 0% 0 0 1.149817
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.156476
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.763714
setivar (click) 2783 3726 3 46 0 0% 0 0 1.261948
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.371516
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.667969
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.464362
throw (click) 5953 4624 5 53 0 0% 0 0 1.873973

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.