YJIT Benchmarks

Details for Benchmarks at 2025-09-05 03:47:08 UTC

YJIT metrics from the yjit-bench suite using Ruby 83bc6ced92.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 92.7% faster than CRuby 3.5.0dev
  • 6.8% faster than YJIT 3.3.6
On railsbench it is
  • 101.4% faster than CRuby 3.5.0dev
  • 6.8% 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 83 50 167 50 192
chunky-png 5 31 5 33 50 14 50 29
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 423 5 396 50 598 50 538
liquid-compile 5 407 5 470 50 539 50 709
liquid-render 5 169 5 169 50 415 50 387
lobsters 5 20 5 20 50 10 50 10
mail 5 188 5 176 50 250 50 230
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 137 5 141 50 205 50 217
ruby-lsp 5 140 5 147 50 223 50 246
sequel 5 431 5 433 50 595 50 600
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 83 50 146 50 130
blurhash 5 82 5 87 50 127 50 145
erubi 5 125 5 140 50 99 50 139
etanni 5 91 5 70 50 53 50 34
fannkuchredux 5 52 5 52 50 96 50 85
fluentd 5 62 5 63 50 25 50 23
graphql 5 341 5 448 50 451 50 922
graphql-native 5 51 5 80 50 12 50 65
lee 5 22 5 23 50 10 50 10
matmul 5 51 5 50 50 88 50 81
nbody 5 249 5 263 50 585 50 702
nqueens 5 120 5 125 50 74 50 543
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 177 5 187 50 621 50 754
protoboeuf-encode 5 179 5 204 50 326 50 764
rack 5 426 5 438 50 645 50 700
ruby-json 5 83 5 83 50 50 50 52
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 163 50 139
tinygql 5 41 5 43 50 39 50 46
30k_ifelse 5 28 5 27 50 216 50 184
30k_methods 5 38 5 38 50 481 50 471
attr_accessor 5 157 5 170 50 1721 50 1854
cfunc_itself 5 357 5 365 50 1138 50 1258
fib 5 124 5 142 50 903 50 931
getivar 5 212 5 324 50 2247 50 2419
keyword_args 5 104 5 101 50 1034 50 1243
loops-times 5 24 5 26 50 48 50 56
object-new 5 318 5 308 50 405 50 464
respond_to 5 134 5 137 50 3256 50 3898
ruby-xor 5 245 5 243 50 755 50 1278
setivar 5 361 5 379 50 3192 50 4959
setivar_object 5 353 5 317 50 671 50 570
setivar_young 5 366 5 320 50 704 50 592
str_concat 5 401 5 447 50 980 50 1209
throw 5 1269 5 1112 50 1728 50 1364

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) 1535648 1306617 203 2570 0 0% 0 0 74.21945
chunky-png (click) 317627 259284 74 1322 1 0% 0 0 39.034209
erubi-rails (click) 1944131 1641342 262 3748 22 0% 0 0 104.260151
hexapdf (click) 1515341 1353568 593 15698 43 0% 0 0 454.257904
liquid-c (click) 538758 443002 114 2228 5 0% 0 0 61.622911
liquid-compile (click) 463294 404367 146 2714 2 0% 0 0 81.260696
liquid-render (click) 645821 551319 131 2946 8 0% 0 0 80.926672
lobsters (click) 8531165 7284592 3118 63414 118 0% 0 0 2137.038194
mail (click) 855153 831138 342 7696 40 0% 0 0 217.549598
psych-load (click) 283176 258606 61 830 2 0% 0 0 24.797228
railsbench (click) 3332308 2872040 1605 19639 47 0% 0 0 575.806174
rubocop (click) 6119572 5349540 3014 63655 156 0% 6 0 1985.200743
ruby-lsp (click) 959753 845503 346 6773 43 0% 1 0 188.865166
sequel (click) 494954 429246 11 119 0 0% 0 0 3.984111
shipit (click) 7646231 6457149 3287 52651 184 0% 0 0 1723.806904
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.644348
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.091025
erubi (click) 247875 230674 5 125 0 0% 0 0 3.890168
etanni (click) 32930 35718 8 114 0 0% 0 0 3.644239
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.155499
fluentd (click) 464199 402175 7 115 0 0% 0 0 3.749476
graphql (click) 402784 327029 73 1920 19 0% 0 0 55.128286
graphql-native (click) 345801 275801 39 532 0 0% 0 0 14.465895
lee (click) 311003 271269 49 1070 0 0% 0 0 32.082595
matmul (click) 11125 4603 8 132 0 0% 0 0 4.253053
nbody (click) 13890 20235 6 238 0 0% 0 0 5.832403
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.439166
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 113.352797
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.554107
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.564091
rack (click) 274344 231771 35 580 0 0% 0 0 15.747241
ruby-json (click) 19776 17761 8 204 0 0% 0 0 5.705274
rubyboy (click) 688520 619547 154 6860 42 0% 0 0 175.565771
rubykon (click) 146441 162602 137 2076 3 0% 0 0 57.09909
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.93712
tinygql (click) 300766 238373 59 1031 5 0% 0 0 27.43443
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1951.229641
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 482.115761
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.059581
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.510671
fib (click) 2659 2995 3 30 0 0% 0 0 1.091276
getivar (click) 3812 6802 3 78 0 0% 0 0 1.931383
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.779111
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.785685
object-new (click) 2406 2818 2 36 0 0% 0 0 1.118272
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.13417
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.755666
setivar (click) 2783 3726 3 46 0 0% 0 0 1.283584
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.385657
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.701811
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.470984
throw (click) 5953 4624 5 53 0 0% 0 0 1.806

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.