YJIT Benchmarks

Details for Benchmarks at 2025-08-17 03:58:59 UTC

YJIT metrics from the yjit-bench suite using Ruby ad047459c1.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 90.0% faster than CRuby 3.5.0dev
  • 5.4% faster than YJIT 3.3.6
On railsbench it is
  • 97.6% faster than CRuby 3.5.0dev
  • 4.0% 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 83 5 83 50 156 50 165
chunky-png 5 31 5 32 50 14 50 26
erubi-rails 5 16 5 14 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 408 5 399 50 595 50 531
liquid-compile 5 413 5 469 50 539 50 715
liquid-render 5 171 5 169 50 407 50 386
lobsters 5 19 5 19 50 10 50 10
mail 5 190 5 175 50 237 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 202 50 217
ruby-lsp 5 147 5 146 50 225 50 244
sequel 5 424 5 432 50 593 50 599
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 80 50 146 50 117
blurhash 5 82 5 86 50 127 50 145
erubi 5 117 5 139 50 89 50 132
etanni 5 90 5 97 50 53 50 65
fannkuchredux 5 52 5 57 50 97 50 94
fluentd 5 62 5 63 50 24 50 23
graphql 5 331 5 445 50 462 50 920
graphql-native 5 52 5 77 50 15 50 59
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 50 50 88 50 90
nbody 5 249 5 234 50 585 50 702
nqueens 5 120 5 127 50 74 50 549
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 180 5 183 50 621 50 689
protoboeuf-encode 5 176 5 197 50 329 50 793
rack 5 425 5 433 50 636 50 692
ruby-json 5 84 5 83 50 50 50 51
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 40 5 42 50 39 50 49
30k_ifelse 5 28 5 27 50 215 50 183
30k_methods 5 39 5 38 50 482 50 476
attr_accessor 5 157 5 180 50 1718 50 1872
cfunc_itself 5 358 5 352 50 1137 50 1258
fib 5 127 5 144 50 902 50 931
getivar 5 213 5 313 50 2252 50 2408
keyword_args 5 104 5 105 50 1034 50 1242
loops-times 5 24 5 25 50 48 50 56
object-new 5 318 5 300 50 405 50 436
respond_to 5 133 5 138 50 3257 50 3898
ruby-xor 5 245 5 237 50 800 50 1281
setivar 5 361 5 345 50 3188 50 4918
setivar_object 5 354 5 307 50 672 50 598
setivar_young 5 367 5 311 50 703 50 643
str_concat 5 397 5 447 50 978 50 1195
throw 5 1273 5 1135 50 1728 50 1409

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) 1508828 1190956 206 2590 0 0% 0 0 75.434752
chunky-png (click) 314818 280066 74 1322 1 0% 0 0 38.961268
erubi-rails (click) 1889611 1538235 263 3686 22 0% 0 0 101.727984
hexapdf (click) 1498915 1342015 593 15652 43 0% 0 0 451.023419
liquid-c (click) 538601 490236 114 2221 5 0% 0 0 63.324889
liquid-compile (click) 458052 414370 146 2667 2 0% 0 0 79.015385
liquid-render (click) 644803 572983 131 2933 8 0% 0 0 80.303465
lobsters (click) 8538854 7071635 3162 63804 118 0% 0 0 2190.781491
mail (click) 829920 800911 342 7233 40 0% 0 0 207.217654
psych-load (click) 278430 203884 61 830 2 0% 0 0 24.512606
railsbench (click) 3331064 2967034 1649 20144 58 0% 0 0 574.830958
rubocop (click) 6108821 5262221 3011 63533 155 0% 6 0 1844.540526
ruby-lsp (click) 953813 846491 344 6744 43 0% 1 0 187.100649
sequel (click) 492137 375119 11 119 0 0% 0 0 4.162234
shipit (click) 7680751 6363735 3370 53828 209 0% 0 0 1725.189616
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.659647
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.080947
erubi (click) 245365 194562 5 125 0 0% 0 0 3.820065
etanni (click) 30806 32125 8 108 0 0% 0 0 3.478057
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.139646
fluentd (click) 464261 408842 7 115 0 0% 0 0 3.773832
graphql (click) 378312 323492 72 1708 19 1% 0 0 48.869553
graphql-native (click) 342100 320279 39 532 0 0% 0 0 13.9325
lee (click) 308380 259569 49 1070 0 0% 0 0 31.759673
matmul (click) 11125 4603 8 132 0 0% 0 0 4.169958
nbody (click) 13890 20235 6 238 0 0% 0 0 5.88495
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.42384
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 111.110848
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.13606
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.331483
rack (click) 272055 261428 35 580 0 0% 0 0 15.075432
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.738555
rubyboy (click) 686255 591786 154 6864 42 0% 0 0 173.101925
rubykon (click) 148508 140471 137 2101 3 0% 0 0 57.35367
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.866409
tinygql (click) 297944 242984 59 1025 5 0% 0 0 27.468039
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1947.692884
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 481.640842
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.084942
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.460285
fib (click) 2659 2995 3 30 0 0% 0 0 1.055126
getivar (click) 3812 6802 3 78 0 0% 0 0 1.86534
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.822176
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.754074
object-new (click) 2406 2818 2 36 0 0% 0 0 1.074169
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.170382
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.707585
setivar (click) 2783 3726 3 46 0 0% 0 0 1.200668
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.47322
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.667258
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.38852
throw (click) 5953 4624 5 53 0 0% 0 0 1.78072

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.