YJIT Benchmarks

Details for Benchmarks at 2025-07-21 04:03:02 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 88.5% faster than CRuby 3.5.0dev
  • 2.3% faster than YJIT 3.3.6
On railsbench it is
  • 102.7% faster than CRuby 3.5.0dev
  • 6.6% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 43 minutes
aarch64 runtime: 4 hours, 1 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 80 5 75 50 145 50 152
chunky-png 5 31 5 32 50 14 50 22
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 406 5 409 50 566 50 532
liquid-compile 5 407 5 447 50 578 50 696
liquid-render 5 171 5 168 50 405 50 381
lobsters 5 19 5 19 50 10 50 10
mail 5 189 5 174 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 157 5 154 50 251 50 260
ruby-lsp 5 155 5 151 50 248 50 260
sequel 5 423 5 417 50 593 50 589
attr_accessor 5 157 5 203 50 1719 50 1921
binarytrees 5 84 5 79 50 146 50 119
blurhash 5 82 5 86 50 127 50 144
erubi 5 125 5 145 50 88 50 131
etanni 5 91 5 97 50 53 50 67
fannkuchredux 5 52 5 57 50 98 50 96
fluentd 5 63 5 58 50 25 50 25
graphql 5 85 5 82 50 58 50 55
graphql-native 5 40 5 46 50 10 50 16
lee 5 23 5 22 50 10 50 10
matmul 5 51 5 53 50 88 50 74
nbody 5 249 5 246 50 584 50 687
nqueens 5 120 5 127 50 75 50 562
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 156 50 621 50 731
protoboeuf-encode 5 175 5 201 50 327 50 784
rack 5 569 5 622 50 957 50 1033
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 163 50 140
tinygql 5 36 5 34 50 22 50 32
30k_ifelse 5 28 5 27 50 216 50 184
30k_methods 5 38 5 38 50 478 50 473
cfunc_itself 5 350 5 352 50 1147 50 1259
fib 5 120 5 140 50 902 50 934
getivar 5 215 5 297 50 2253 50 2376
keyword_args 5 104 5 108 50 1041 50 1243
loops-times 5 24 5 25 50 48 50 56
object-new 5 322 5 309 50 405 50 448
respond_to 5 133 5 136 50 3256 50 3881
ruby-xor 5 245 5 245 50 800 50 1284
setivar 5 361 5 337 50 3186 50 4902
setivar_object 5 354 5 306 50 671 50 632
setivar_young 5 368 5 307 50 701 50 618
str_concat 5 397 5 419 50 976 50 1166
throw 5 1272 5 1118 50 1720 50 1445

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) 1542102 1289615 206 2590 0 0% 0 0 74.826933
chunky-png (click) 368643 369622 74 1330 1 0% 0 0 38.142185
erubi-rails (click) 2020176 1689465 262 3648 21 0% 0 0 99.883433
hexapdf (click) 1551882 1346560 593 15611 43 0% 0 0 449.581432
liquid-c (click) 565005 513231 114 2213 5 0% 0 0 60.997326
liquid-compile (click) 499564 411628 146 2732 2 0% 0 0 80.553112
liquid-render (click) 683577 584148 131 2933 8 0% 0 0 80.962676
lobsters (click) 8563770 7169692 3170 63868 119 0% 0 0 2167.529185
mail (click) 863109 880274 342 7227 40 0% 0 0 207.164451
psych-load (click) 332595 292826 61 825 3 0% 0 0 24.038488
railsbench (click) 3425287 3030264 1655 20195 56 0% 0 0 578.371486
rubocop (click) 5951170 5284947 2886 61719 116 0% 4 0 1795.45147
ruby-lsp (click) 926013 947142 305 5956 29 0% 0 0 166.39234
sequel (click) 545473 468841 11 114 0 0% 0 0 3.713828
attr_accessor (click) 151628 144470 3 78 0 0% 0 0 2.027306
binarytrees (click) 154529 151621 6 64 0 0% 0 0 2.531444
blurhash (click) 199546 187957 27 603 0 0% 0 0 17.905506
erubi (click) 302646 287970 5 125 0 0% 0 0 3.91211
etanni (click) 176675 175462 7 98 0 0% 0 0 3.106326
fannkuchredux (click) 171997 177466 3 399 0 0% 0 0 10.924545
fluentd (click) 449608 384747 7 115 0 0% 0 0 3.773457
graphql (click) 492728 441010 66 1035 0 0% 0 0 28.89404
graphql-native (click) 446263 414626 37 399 0 0% 0 0 11.161713
lee (click) 356947 301212 45 1012 0 0% 0 0 29.979118
matmul (click) 158381 157505 8 132 0 0% 0 0 4.216558
nbody (click) 161146 148561 6 238 0 0% 0 0 5.804007
nqueens (click) 169908 181670 5 387 0 0% 0 0 10.275827
optcarrot (click) 472685 467604 188 4740 34 0% 0 0 111.970169
protoboeuf (click) 316842 420076 11 2828 0 0% 0 0 74.477426
protoboeuf-encode (click) 389509 501371 13 1805 0 0% 0 0 46.306499
rack (click) 313339 301141 31 496 0 0% 0 0 12.940667
ruby-json (click) 167199 163161 8 204 0 0% 0 0 5.834129
rubyboy (click) 759010 681779 177 6962 40 0% 0 0 180.987658
rubykon (click) 291907 288730 135 2052 3 0% 0 0 56.36811
sudoku (click) 198834 218477 6 863 0 0% 0 0 23.476748
tinygql (click) 350211 329779 58 977 5 0% 0 0 26.461984
30k_ifelse (click) 6367214 5226662 9259 75432 0 0% 0 0 1947.797517
30k_methods (click) 2381822 1737722 5778 19357 0 0% 0 0 486.880149
cfunc_itself (click) 152383 148865 4 53 0 0% 0 0 1.536782
fib (click) 149915 139513 3 30 0 0% 0 0 1.022405
getivar (click) 151068 143320 3 78 0 0% 0 0 1.885635
keyword_args (click) 153588 149675 5 56 0 0% 0 0 1.821919
loops-times (click) 154228 144531 5 93 0 0% 0 0 2.670911
object-new (click) 149662 147528 2 36 0 0% 0 0 1.062079
respond_to (click) 153707 151529 4 80 0 0% 0 0 2.022332
ruby-xor (click) 153127 153395 4 100 0 0% 0 0 2.786567
setivar (click) 150039 148436 3 46 0 0% 0 0 1.214408
setivar_object (click) 150658 148666 3 49 0 0% 0 0 1.339604
setivar_young (click) 151556 141385 4 63 0 0% 0 0 1.651084
str_concat (click) 153103 151743 6 82 0 0% 0 0 2.418012
throw (click) 153209 149334 5 53 0 0% 0 0 1.840692

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.