YJIT Benchmarks

Details for Benchmarks at 2025-08-15 03:57:44 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 88.6% faster than CRuby 3.5.0dev
  • 5.3% faster than YJIT 3.3.6
On railsbench it is
  • 98.7% faster than CRuby 3.5.0dev
  • 5.9% 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 156 50 170
chunky-png 5 31 5 32 50 14 50 25
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 412 5 398 50 598 50 600
liquid-compile 5 407 5 460 50 538 50 690
liquid-render 5 170 5 167 50 408 50 385
lobsters 5 19 5 20 50 10 50 10
mail 5 195 5 177 50 250 50 200
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 141 5 142 50 202 50 217
ruby-lsp 5 142 5 146 50 223 50 241
sequel 5 426 5 437 50 594 50 594
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 126 5 139 50 100 50 138
etanni 5 90 5 97 50 53 50 66
fannkuchredux 5 52 5 57 50 98 50 94
fluentd 5 62 5 62 50 24 50 24
graphql 5 332 5 456 50 465 50 925
graphql-native 5 52 5 77 50 13 50 61
lee 5 23 5 22 50 10 50 10
matmul 5 51 5 50 50 88 50 89
nbody 5 249 5 234 50 585 50 702
nqueens 5 120 5 126 50 74 50 545
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 180 5 182 50 621 50 690
protoboeuf-encode 5 175 5 194 50 330 50 807
rack 5 424 5 439 50 644 50 694
ruby-json 5 83 5 84 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 51 50 163 50 149
tinygql 5 40 5 43 50 42 50 49
30k_ifelse 5 28 5 27 50 216 50 184
30k_methods 5 38 5 38 50 471 50 476
attr_accessor 5 157 5 180 50 1725 50 1874
cfunc_itself 5 358 5 352 50 1137 50 1258
fib 5 127 5 145 50 902 50 931
getivar 5 211 5 313 50 2253 50 2396
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 299 50 404 50 434
respond_to 5 133 5 137 50 3256 50 3899
ruby-xor 5 243 5 237 50 800 50 1281
setivar 5 361 5 345 50 3188 50 4917
setivar_object 5 354 5 307 50 670 50 598
setivar_young 5 367 5 310 50 702 50 644
str_concat 5 396 5 445 50 983 50 1203
throw 5 1272 5 1136 50 1711 50 1419

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) 1507391 1230304 206 2590 0 0% 0 0 74.615943
chunky-png (click) 314898 263740 74 1322 1 0% 0 0 38.721141
erubi-rails (click) 1889438 1659985 262 3662 22 0% 0 0 100.835621
hexapdf (click) 1497267 1332125 594 15634 43 0% 0 0 449.215122
liquid-c (click) 536483 480217 114 2217 5 0% 0 0 62.531993
liquid-compile (click) 460085 391801 146 2690 2 0% 0 0 79.804882
liquid-render (click) 644800 556530 131 2933 8 0% 0 0 80.790833
lobsters (click) 8543549 7118572 3162 63818 118 0% 0 0 2134.679534
mail (click) 829654 825314 342 7227 40 0% 0 0 207.163428
psych-load (click) 278664 204063 61 830 2 0% 0 0 24.715216
railsbench (click) 3331961 2885538 1649 20193 58 0% 0 0 575.9258
rubocop (click) 6108314 5295031 3011 63536 155 0% 6 0 1851.213698
ruby-lsp (click) 948520 897997 345 6778 44 0% 1 0 184.654201
sequel (click) 492376 408032 11 119 0 0% 0 0 3.903256
shipit (click) 7186463 6116319 3389 53905 212 0% 0 0 1784.12135
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.58717
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.005368
erubi (click) 245676 186592 5 125 0 0% 0 0 3.854559
etanni (click) 30806 32125 8 108 0 0% 0 0 3.541842
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.085449
fluentd (click) 463942 408724 7 115 0 0% 0 0 3.720026
graphql (click) 400100 339636 73 1919 19 0% 0 0 55.589436
graphql-native (click) 343451 321539 39 532 0 0% 0 0 13.952045
lee (click) 308380 275953 49 1070 0 0% 0 0 31.945892
matmul (click) 11125 4603 8 132 0 0% 0 0 4.152785
nbody (click) 13890 20235 6 238 0 0% 0 0 5.803029
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.328315
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 111.449646
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.388143
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.303711
rack (click) 273904 222304 35 580 0 0% 0 0 15.43485
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.723956
rubyboy (click) 685963 599667 154 6858 42 0% 0 0 173.578824
rubykon (click) 148508 140471 137 2101 3 0% 0 0 57.533688
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.718388
tinygql (click) 298377 251550 59 1031 5 0% 0 0 28.000701
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1942.836609
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 483.873972
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.048638
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.473298
fib (click) 2659 2995 3 30 0 0% 0 0 1.057203
getivar (click) 3812 6802 3 78 0 0% 0 0 1.860987
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.752293
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.736992
object-new (click) 2406 2818 2 36 0 0% 0 0 1.088403
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.140159
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.684411
setivar (click) 2783 3726 3 46 0 0% 0 0 1.251749
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.393433
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.75841
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.447152
throw (click) 5953 4624 5 53 0 0% 0 0 1.792892

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.