YJIT Benchmarks

Details for Benchmarks at 2025-07-17 20:35:42 UTC

YJIT metrics from the yjit-bench suite using Ruby 148db9c80f.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 88.5% faster than CRuby 3.5.0dev
  • 1.8% faster than YJIT 3.3.6
On railsbench it is
  • 112.3% faster than CRuby 3.5.0dev
  • 7.4% 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 82 5 76 50 154 50 153
chunky-png 5 31 5 31 50 14 50 23
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 406 5 397 50 591 50 526
liquid-compile 5 408 5 449 50 542 50 675
liquid-render 5 169 5 167 50 404 50 381
lobsters 5 19 5 19 50 10 50 10
mail 5 194 5 183 50 238 50 193
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 156 50 249 50 257
ruby-lsp 5 162 5 148 50 258 50 261
sequel 5 411 5 407 50 588 50 566
attr_accessor 5 157 5 185 50 1719 50 1893
binarytrees 5 84 5 78 50 146 50 121
blurhash 5 82 5 87 50 127 50 144
erubi 5 125 5 137 50 98 50 132
etanni 5 91 5 97 50 53 50 68
fannkuchredux 5 52 5 57 50 97 50 96
fluentd 5 63 5 56 50 25 50 26
graphql 5 85 5 82 50 58 50 55
graphql-native 5 47 5 46 50 10 50 16
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 53 50 88 50 81
nbody 5 249 5 253 50 584 50 690
nqueens 5 120 5 127 50 75 50 560
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 159 50 620 50 727
protoboeuf-encode 5 179 5 204 50 326 50 776
rack 5 585 5 614 50 946 50 1048
ruby-json 5 84 5 81 50 50 50 47
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 20 5 21 50 10 50 10
sudoku 5 48 5 51 50 160 50 140
tinygql 5 36 5 35 50 22 50 32
30k_ifelse 5 28 5 27 50 216 50 184
30k_methods 5 39 5 38 50 481 50 469
cfunc_itself 5 349 5 358 50 1147 50 1258
fib 5 119 5 140 50 902 50 934
getivar 5 215 5 297 50 2255 50 2372
keyword_args 5 104 5 112 50 1042 50 1243
loops-times 5 24 5 25 50 48 50 55
object-new 5 321 5 307 50 404 50 451
respond_to 5 134 5 134 50 3257 50 3880
ruby-xor 5 243 5 242 50 799 50 1283
setivar 5 361 5 333 50 3188 50 4897
setivar_object 5 354 5 302 50 672 50 630
setivar_young 5 368 5 299 50 702 50 618
str_concat 5 400 5 432 50 983 50 1166
throw 5 1270 5 1118 50 1724 50 1420

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) 1550209 1356231 206 2590 0 0% 0 0 75.537104
chunky-png (click) 368114 352768 74 1322 1 0% 0 0 38.450633
erubi-rails (click) 2018721 1711233 263 3671 21 0% 0 0 101.082902
hexapdf (click) 1557068 1409506 593 15613 43 0% 0 0 450.413759
liquid-c (click) 565062 480610 114 2213 5 0% 0 0 60.784653
liquid-compile (click) 492843 469984 146 2698 2 0% 0 0 80.27652
liquid-render (click) 682672 550303 131 2933 8 0% 0 0 80.775881
lobsters (click) 8583532 7295279 3171 64056 118 0% 0 0 2154.587275
mail (click) 856084 873232 342 7227 40 0% 0 0 206.2204
psych-load (click) 327994 312835 61 825 3 0% 0 0 24.099796
railsbench (click) 3429626 3060433 1655 20203 56 0% 0 0 575.622741
rubocop (click) 5955024 5215485 2886 61709 116 0% 4 0 1789.79514
ruby-lsp (click) 926418 890452 305 5956 29 0% 0 0 164.682006
sequel (click) 544447 492340 11 114 0 0% 0 0 3.959238
attr_accessor (click) 151628 144470 3 78 0 0% 0 0 2.016303
binarytrees (click) 154529 151621 6 64 0 0% 0 0 2.517696
blurhash (click) 199546 187957 27 603 0 0% 0 0 17.850765
erubi (click) 293818 286838 5 125 0 0% 0 0 3.88763
etanni (click) 176438 158747 7 98 0 0% 0 0 3.098091
fannkuchredux (click) 171997 177466 3 399 0 0% 0 0 11.00954
fluentd (click) 447180 398437 7 115 0 0% 0 0 3.791639
graphql (click) 489799 446511 66 1035 0 0% 0 0 28.927908
graphql-native (click) 439613 399758 37 399 0 0% 0 0 11.042506
lee (click) 363873 341370 45 1012 0 0% 0 0 29.829493
matmul (click) 158381 157505 8 132 0 0% 0 0 4.120905
nbody (click) 161146 148561 6 238 0 0% 0 0 5.780425
nqueens (click) 169908 181670 5 387 0 0% 0 0 10.294542
optcarrot (click) 472685 467604 188 4740 34 0% 0 0 111.247725
protoboeuf (click) 316842 420076 11 2828 0 0% 0 0 74.972363
protoboeuf-encode (click) 389509 501371 13 1805 0 0% 0 0 46.021833
rack (click) 313995 318169 31 496 0 0% 0 0 12.917841
ruby-json (click) 167199 163161 8 204 0 0% 0 0 5.809617
rubyboy (click) 756540 720690 177 6962 40 0% 0 0 179.794817
rubykon (click) 291907 288730 135 2052 3 0% 0 0 56.085072
sudoku (click) 198834 218477 6 863 0 0% 0 0 23.504852
tinygql (click) 349430 320904 58 977 5 0% 0 0 26.412662
30k_ifelse (click) 6367214 5226662 9259 75432 0 0% 0 0 1941.808486
30k_methods (click) 2381822 1737722 5778 19357 0 0% 0 0 487.521954
cfunc_itself (click) 152383 148865 4 53 0 0% 0 0 1.425202
fib (click) 149915 139513 3 30 0 0% 0 0 1.023388
getivar (click) 151068 143320 3 78 0 0% 0 0 1.878772
keyword_args (click) 153588 149675 5 56 0 0% 0 0 1.72499
loops-times (click) 154228 144531 5 93 0 0% 0 0 2.683068
object-new (click) 149662 147528 2 36 0 0% 0 0 1.053498
respond_to (click) 153707 151529 4 80 0 0% 0 0 2.030589
ruby-xor (click) 153127 153395 4 100 0 0% 0 0 2.788434
setivar (click) 150039 148436 3 46 0 0% 0 0 1.188343
setivar_object (click) 150658 148666 3 49 0 0% 0 0 1.345259
setivar_young (click) 151556 141385 4 63 0 0% 0 0 1.667582
str_concat (click) 153103 151743 6 82 0 0% 0 0 2.415727
throw (click) 153209 149334 5 53 0 0% 0 0 1.780843

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.