YJIT Benchmarks

Details for Benchmarks at 2025-08-21 03:49:52 UTC

YJIT metrics from the yjit-bench suite using Ruby 60189671f5.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 91.3% faster than CRuby 3.5.0dev
  • 5.4% faster than YJIT 3.3.6
On railsbench it is
  • 103.6% faster than CRuby 3.5.0dev
  • 8.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 84 5 83 50 183 50 203
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 423 5 392 50 576 50 532
liquid-compile 5 409 5 472 50 549 50 714
liquid-render 5 170 5 167 50 413 50 385
lobsters 5 20 5 20 50 10 50 10
mail 5 194 5 177 50 249 50 198
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 139 5 140 50 212 50 216
ruby-lsp 5 144 5 146 50 222 50 249
sequel 5 426 5 430 50 599 50 597
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 80 50 146 50 117
blurhash 5 82 5 87 50 127 50 145
erubi 5 127 5 141 50 86 50 140
etanni 5 90 5 97 50 53 50 69
fannkuchredux 5 52 5 56 50 97 50 91
fluentd 5 62 5 62 50 25 50 23
graphql 5 337 5 451 50 462 50 917
graphql-native 5 53 5 77 50 14 50 63
lee 5 23 5 22 50 10 50 10
matmul 5 51 5 50 50 88 50 91
nbody 5 249 5 231 50 585 50 705
nqueens 5 120 5 124 50 74 50 549
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 182 50 621 50 688
protoboeuf-encode 5 179 5 200 50 326 50 798
rack 5 422 5 443 50 647 50 695
ruby-json 5 84 5 83 50 50 50 49
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 20 5 21 50 10 50 10
sudoku 5 48 5 51 50 163 50 148
tinygql 5 41 5 43 50 39 50 49
30k_ifelse 5 28 5 27 50 215 50 183
30k_methods 5 38 5 38 50 480 50 474
attr_accessor 5 157 5 184 50 1719 50 1878
cfunc_itself 5 359 5 370 50 1147 50 1258
fib 5 127 5 148 50 903 50 931
getivar 5 213 5 306 50 2249 50 2392
keyword_args 5 104 5 105 50 1042 50 1243
loops-times 5 24 5 25 50 48 50 56
object-new 5 318 5 301 50 404 50 439
respond_to 5 134 5 138 50 3256 50 3899
ruby-xor 5 245 5 254 50 800 50 1280
setivar 5 361 5 341 50 3184 50 4913
setivar_object 5 353 5 296 50 670 50 592
setivar_young 5 367 5 299 50 702 50 635
str_concat 5 401 5 452 50 980 50 1202
throw 5 1268 5 1140 50 1739 50 1424

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) 1520193 1263593 203 2569 0 0% 0 0 74.057893
chunky-png (click) 315799 272856 74 1330 1 0% 0 0 39.549544
erubi-rails (click) 1904702 1716836 262 3653 22 0% 0 0 101.120323
hexapdf (click) 1499489 1333181 593 15633 43 0% 0 0 456.139285
liquid-c (click) 538876 507247 114 2232 5 0% 0 0 63.299851
liquid-compile (click) 461848 393405 146 2709 2 0% 0 0 80.349745
liquid-render (click) 644284 596968 131 2933 8 0% 0 0 80.951117
lobsters (click) 8486496 7129867 3118 63264 118 0% 0 0 2125.776554
mail (click) 828475 840718 342 7227 40 0% 0 0 205.062252
psych-load (click) 278714 236865 61 830 2 0% 0 0 24.453573
railsbench (click) 3299563 2924589 1605 19542 47 0% 0 0 571.758611
rubocop (click) 6108588 5311865 3011 63541 155 0% 6 0 1855.655294
ruby-lsp (click) 953333 829310 345 6771 44 0% 1 0 187.340238
sequel (click) 492081 465184 11 119 0 0% 0 0 4.100029
shipit (click) 7671932 6410892 3354 53445 186 0% 1 0 1730.239521
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.636451
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.052766
erubi (click) 245269 202615 5 125 0 0% 0 0 3.86008
etanni (click) 30806 32125 8 108 0 0% 0 0 3.525799
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.172485
fluentd (click) 464261 392502 7 115 0 0% 0 0 3.853995
graphql (click) 399278 371764 73 1919 19 0% 0 0 56.140562
graphql-native (click) 343158 321223 39 532 0 0% 0 0 14.214187
lee (click) 308088 300213 49 1070 0 0% 0 0 31.727761
matmul (click) 11125 4603 8 132 0 0% 0 0 4.167098
nbody (click) 13890 20235 6 238 0 0% 0 0 5.861795
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.428391
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 112.125797
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.930308
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.2284
rack (click) 272060 236837 35 580 0 0% 0 0 15.560598
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.840089
rubyboy (click) 686178 575342 154 6860 42 0% 0 0 176.132685
rubykon (click) 148508 140471 137 2101 3 0% 0 0 57.662325
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.77196
tinygql (click) 299002 243965 59 1031 5 0% 0 0 27.907704
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1962.95146
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 485.099344
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.054095
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.496291
fib (click) 2659 2995 3 30 0 0% 0 0 1.101152
getivar (click) 3812 6802 3 78 0 0% 0 0 1.959198
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.771884
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.740807
object-new (click) 2406 2818 2 36 0 0% 0 0 1.09964
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.143915
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.811223
setivar (click) 2783 3726 3 46 0 0% 0 0 1.234205
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.3856
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.729692
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.482752
throw (click) 5953 4624 5 53 0 0% 0 0 1.776138

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.