YJIT Benchmarks

Details for Benchmarks at 2025-07-19 03:58:16 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 91.5% faster than CRuby 3.5.0dev
  • 3.6% faster than YJIT 3.3.6
On railsbench it is
  • 113.3% faster than CRuby 3.5.0dev
  • 5.9% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 43 minutes
aarch64 runtime: 3 hours, 58 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 79 5 75 50 156 50 160
chunky-png 5 31 5 31 50 15 50 22
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 412 5 416 50 573 50 617
liquid-compile 5 411 5 443 50 543 50 696
liquid-render 5 172 5 165 50 404 50 375
lobsters 5 19 5 19 50 10 50 10
mail 5 195 5 173 50 238 50 194
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 154 50 248 50 259
ruby-lsp 5 145 5 152 50 233 50 265
sequel 5 413 5 418 50 599 50 561
attr_accessor 5 157 5 203 50 1718 50 1924
binarytrees 5 84 5 79 50 146 50 120
blurhash 5 82 5 86 50 127 50 144
erubi 5 119 5 136 50 86 50 138
etanni 5 91 5 97 50 53 50 67
fannkuchredux 5 52 5 57 50 97 50 96
fluentd 5 63 5 59 50 25 50 23
graphql 5 85 5 82 50 58 50 54
graphql-native 5 47 5 45 50 10 50 16
lee 5 23 5 22 50 10 50 10
matmul 5 51 5 53 50 88 50 75
nbody 5 249 5 246 50 584 50 687
nqueens 5 120 5 127 50 75 50 561
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 173 5 157 50 620 50 731
protoboeuf-encode 5 179 5 202 50 326 50 795
rack 5 577 5 589 50 961 50 1048
ruby-json 5 83 5 81 50 50 50 47
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 51 50 162 50 139
tinygql 5 35 5 34 50 21 50 33
30k_ifelse 5 28 5 27 50 216 50 184
30k_methods 5 39 5 38 50 478 50 471
cfunc_itself 5 349 5 352 50 1147 50 1259
fib 5 127 5 141 50 877 50 934
getivar 5 214 5 298 50 2254 50 2373
keyword_args 5 104 5 108 50 1039 50 1243
loops-times 5 24 5 25 50 48 50 56
object-new 5 322 5 309 50 404 50 447
respond_to 5 133 5 136 50 3256 50 3881
ruby-xor 5 245 5 245 50 800 50 1282
setivar 5 361 5 336 50 3188 50 4904
setivar_object 5 353 5 306 50 671 50 631
setivar_young 5 369 5 307 50 703 50 618
str_concat 5 397 5 419 50 989 50 1168
throw 5 1268 5 1120 50 1734 50 1444

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) 1546551 1319404 206 2590 0 0% 0 0 76.066782
chunky-png (click) 362921 347057 74 1322 1 0% 0 0 38.142524
erubi-rails (click) 2019189 1728351 263 3631 21 0% 0 0 99.410254
hexapdf (click) 1559686 1373349 593 15651 43 0% 0 0 451.573947
liquid-c (click) 570996 519714 114 2217 5 0% 0 0 61.953645
liquid-compile (click) 485159 429520 146 2701 2 0% 0 0 81.0709
liquid-render (click) 682545 615655 131 2933 8 0% 0 0 80.465561
lobsters (click) 8575807 7272895 3168 63926 118 0% 0 0 2154.165954
mail (click) 864382 840701 342 7232 40 0% 0 0 204.489317
psych-load (click) 334264 294806 61 825 3 0% 0 0 24.235308
railsbench (click) 3432475 3012952 1655 20196 56 0% 0 0 575.176422
rubocop (click) 5953271 5213860 2886 61700 116 0% 4 0 1794.993014
ruby-lsp (click) 926068 873734 305 5956 29 0% 0 0 166.245537
sequel (click) 548482 471981 11 115 0 0% 0 0 4.304794
attr_accessor (click) 151628 144470 3 78 0 0% 0 0 2.029982
binarytrees (click) 154529 151621 6 64 0 0% 0 0 2.509795
blurhash (click) 199546 187957 27 603 0 0% 0 0 17.911172
erubi (click) 291244 267468 5 125 0 0% 0 0 3.88498
etanni (click) 176438 158747 7 98 0 0% 0 0 3.160826
fannkuchredux (click) 171997 177466 3 399 0 0% 0 0 11.065157
fluentd (click) 447473 407013 7 115 0 0% 0 0 3.824839
graphql (click) 485987 450521 66 1035 0 0% 0 0 28.971142
graphql-native (click) 448377 400371 37 399 0 0% 0 0 11.29888
lee (click) 363523 332856 45 1012 0 0% 0 0 29.996602
matmul (click) 158381 157505 8 132 0 0% 0 0 4.1161
nbody (click) 161146 148561 6 238 0 0% 0 0 5.758468
nqueens (click) 169908 181670 5 387 0 0% 0 0 10.301896
optcarrot (click) 472685 467604 188 4740 34 0% 0 0 112.273833
protoboeuf (click) 316842 420076 11 2828 0 0% 0 0 74.816925
protoboeuf-encode (click) 389509 501371 13 1805 0 0% 0 0 46.278021
rack (click) 306405 302143 31 496 0 0% 0 0 13.038913
ruby-json (click) 167436 163492 8 204 0 0% 0 0 5.864286
rubyboy (click) 765542 729752 177 6962 40 0% 0 0 181.995076
rubykon (click) 291907 288730 135 2052 3 0% 0 0 56.665403
sudoku (click) 198834 218477 6 863 0 0% 0 0 23.551739
tinygql (click) 355921 319566 58 977 5 0% 0 0 26.652687
30k_ifelse (click) 6367214 5226662 9259 75432 0 0% 0 0 1941.470219
30k_methods (click) 2381822 1737722 5778 19357 0 0% 0 0 487.155022
cfunc_itself (click) 152383 148865 4 53 0 0% 0 0 1.422128
fib (click) 149915 139513 3 30 0 0% 0 0 1.027028
getivar (click) 151068 143320 3 78 0 0% 0 0 1.875073
keyword_args (click) 153588 149675 5 56 0 0% 0 0 1.731104
loops-times (click) 154228 144531 5 93 0 0% 0 0 2.702619
object-new (click) 149662 147528 2 36 0 0% 0 0 1.060445
respond_to (click) 153707 151529 4 80 0 0% 0 0 2.027092
ruby-xor (click) 153127 153395 4 100 0 0% 0 0 2.69309
setivar (click) 150039 148436 3 46 0 0% 0 0 1.220592
setivar_object (click) 150658 148666 3 49 0 0% 0 0 1.34469
setivar_young (click) 151556 141385 4 63 0 0% 0 0 1.651524
str_concat (click) 153103 151743 6 82 0 0% 0 0 2.401107
throw (click) 153209 149334 5 53 0 0% 0 0 1.772865

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.