YJIT Benchmarks

Details for Benchmarks at 2025-08-11 04:03:00 UTC

YJIT metrics from the yjit-bench suite using Ruby 2a6345e957.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 86.6% faster than CRuby 3.5.0dev
  • 4.1% faster than YJIT 3.3.6
On railsbench it is
  • 105.6% faster than CRuby 3.5.0dev
  • 9.6% 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 82 5 83 50 153 50 147
chunky-png 5 31 5 31 50 14 50 24
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 420 5 399 50 599 50 555
liquid-compile 5 412 5 470 50 553 50 709
liquid-render 5 171 5 169 50 407 50 381
lobsters 5 20 5 19 50 10 50 10
mail 5 195 5 176 50 234 50 199
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 137 5 140 50 204 50 214
ruby-lsp 5 143 5 147 50 235 50 242
sequel 5 432 5 432 50 574 50 581
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 79 50 146 50 120
blurhash 5 82 5 86 50 127 50 144
erubi 5 118 5 143 50 90 50 143
etanni 5 91 5 97 50 53 50 67
fannkuchredux 5 52 5 58 50 98 50 99
fluentd 5 62 5 58 50 24 50 28
graphql 5 355 5 441 50 465 50 911
graphql-native 5 53 5 76 50 12 50 56
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 48 50 88 50 90
nbody 5 249 5 244 50 585 50 670
nqueens 5 120 5 128 50 74 50 558
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 184 50 621 50 736
protoboeuf-encode 5 178 5 203 50 330 50 790
rack 5 415 5 434 50 647 50 683
ruby-json 5 83 5 81 50 49 50 46
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 20 5 21 50 10 50 10
sudoku 5 48 5 51 50 162 50 147
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 480 50 465
attr_accessor 5 157 5 202 50 1724 50 1916
cfunc_itself 5 358 5 367 50 1137 50 1258
fib 5 127 5 140 50 903 50 929
getivar 5 211 5 284 50 2248 50 2375
keyword_args 5 104 5 107 50 1034 50 1243
loops-times 5 24 5 24 50 47 50 56
object-new 5 318 5 304 50 405 50 445
respond_to 5 134 5 134 50 3256 50 3932
ruby-xor 5 245 5 251 50 799 50 1279
setivar 5 361 5 345 50 3182 50 4917
setivar_object 5 353 5 301 50 670 50 605
setivar_young 5 367 5 313 50 703 50 613
str_concat 5 401 5 430 50 980 50 1203
throw 5 1275 5 1145 50 1707 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) 1551601 1366409 206 2590 0 0% 0 0 74.731233
chunky-png (click) 365006 339214 74 1330 1 0% 0 0 39.12635
erubi-rails (click) 1935803 1718620 263 3752 22 0% 0 0 103.356817
hexapdf (click) 1557547 1370603 594 15653 45 0% 0 0 453.542329
liquid-c (click) 584050 512598 114 2232 5 0% 0 0 63.205099
liquid-compile (click) 504218 485935 146 2673 2 0% 0 0 77.974373
liquid-render (click) 690203 627618 131 2933 8 0% 0 0 80.360633
lobsters (click) 8595565 7286659 3161 63982 118 0% 0 0 2131.230435
mail (click) 875811 855926 342 7237 40 0% 0 0 208.89677
psych-load (click) 331835 308252 61 830 2 0% 0 0 24.310771
railsbench (click) 3371621 3009241 1649 20132 58 0% 0 0 575.309994
rubocop (click) 6154067 5318515 3013 63529 161 0% 6 0 1854.386805
ruby-lsp (click) 990669 893033 345 6749 48 0% 1 0 189.771966
sequel (click) 540530 456761 11 119 0 0% 0 0 3.989532
shipit (click) 7289703 6208240 3387 53923 212 0% 0 0 1731.142051
binarytrees (click) 154320 151361 6 64 0 0% 0 0 2.501453
blurhash (click) 199337 195889 27 603 0 0% 0 0 17.896707
erubi (click) 294865 261214 5 125 0 0% 0 0 3.797227
etanni (click) 176957 175574 7 98 0 0% 0 0 3.198179
fannkuchredux (click) 171788 169014 3 399 0 0% 0 0 11.055316
fluentd (click) 507496 462102 7 115 0 0% 0 0 3.74482
graphql (click) 445127 385580 72 1918 17 0% 0 0 55.361616
graphql-native (click) 388478 367483 39 532 0 0% 0 0 14.066873
lee (click) 348442 324293 49 1070 0 0% 0 0 31.817398
matmul (click) 158172 149053 8 132 0 0% 0 0 4.12451
nbody (click) 160937 156493 6 238 0 0% 0 0 5.845249
nqueens (click) 169699 173218 5 387 0 0% 0 0 10.235417
optcarrot (click) 472476 475516 188 4740 34 0% 0 0 111.583739
protoboeuf (click) 316633 370664 11 2828 0 0% 0 0 75.894245
protoboeuf-encode (click) 389300 386423 13 1805 0 0% 0 0 45.929438
rack (click) 323277 289016 35 580 0 0% 0 0 15.051496
ruby-json (click) 166990 162901 8 204 0 0% 0 0 5.769483
rubyboy (click) 738631 678306 154 6860 42 0% 0 0 173.789779
rubykon (click) 291698 263894 135 2052 3 0% 0 0 56.155668
sudoku (click) 198625 193641 6 863 0 0% 0 0 23.556109
tinygql (click) 337163 315016 59 1031 5 0% 0 0 27.976036
30k_ifelse (click) 6367005 5283666 9259 75432 0 0% 0 0 1945.127114
30k_methods (click) 2381613 1737482 5778 19357 0 0% 0 0 479.129695
attr_accessor (click) 151419 152402 3 78 0 0% 0 0 2.038321
cfunc_itself (click) 152174 148605 4 53 0 0% 0 0 1.407457
fib (click) 149706 139253 3 30 0 0% 0 0 1.011718
getivar (click) 150859 143060 3 78 0 0% 0 0 1.883939
keyword_args (click) 153379 149435 5 56 0 0% 0 0 1.716682
loops-times (click) 154019 144271 5 93 0 0% 0 0 2.703005
object-new (click) 149453 139076 2 36 0 0% 0 0 1.033555
respond_to (click) 153498 151269 4 80 0 0% 0 0 2.043372
ruby-xor (click) 152918 144943 4 100 0 0% 0 0 2.69294
setivar (click) 149830 139984 3 46 0 0% 0 0 1.197298
setivar_object (click) 150449 140214 3 49 0 0% 0 0 1.341295
setivar_young (click) 151347 149317 4 63 0 0% 0 0 1.668413
str_concat (click) 152894 151483 6 82 0 0% 0 0 2.401196
throw (click) 153000 149074 5 53 0 0% 0 0 1.756702

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.