YJIT Benchmarks

Details for Benchmarks at 2025-08-07 04:03:16 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 86.5% faster than CRuby 3.5.0dev
  • 3.6% faster than YJIT 3.3.6
On railsbench it is
  • 98.4% faster than CRuby 3.5.0dev
  • 3.2% 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 82 50 153 50 145
chunky-png 5 31 5 32 50 15 50 24
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 411 5 377 50 573 50 525
liquid-compile 5 407 5 462 50 552 50 710
liquid-render 5 171 5 163 50 407 50 379
lobsters 5 19 5 19 50 10 50 10
mail 5 189 5 179 50 250 50 202
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 138 5 141 50 207 50 215
ruby-lsp 5 144 5 147 50 223 50 243
sequel 5 425 5 430 50 572 50 583
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 116 5 143 50 100 50 138
etanni 5 91 5 97 50 53 50 69
fannkuchredux 5 52 5 57 50 97 50 98
fluentd 5 62 5 61 50 25 50 29
graphql 5 342 5 454 50 470 50 916
graphql-native 5 52 5 78 50 14 50 58
lee 5 23 5 21 50 10 50 10
matmul 5 51 5 49 50 88 50 89
nbody 5 249 5 238 50 585 50 697
nqueens 5 120 5 128 50 74 50 557
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 179 50 621 50 730
protoboeuf-encode 5 177 5 198 50 328 50 796
rack 5 413 5 439 50 597 50 692
ruby-json 5 84 5 82 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 148
tinygql 5 41 5 42 50 42 50 49
30k_ifelse 5 28 5 27 50 216 50 184
30k_methods 5 38 5 38 50 478 50 473
attr_accessor 5 157 5 175 50 1720 50 1868
cfunc_itself 5 358 5 356 50 1137 50 1258
fib 5 127 5 137 50 902 50 929
getivar 5 213 5 286 50 2253 50 2384
keyword_args 5 104 5 105 50 1034 50 1243
loops-times 5 24 5 24 50 48 50 56
object-new 5 320 5 301 50 404 50 438
respond_to 5 134 5 139 50 3254 50 3933
ruby-xor 5 245 5 255 50 799 50 1279
setivar 5 361 5 328 50 3189 50 4891
setivar_object 5 349 5 297 50 670 50 604
setivar_young 5 367 5 300 50 702 50 614
str_concat 5 397 5 421 50 983 50 1209
throw 5 1268 5 1112 50 1735 50 1483

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) 1551660 1358280 206 2590 0 0% 0 0 74.348825
chunky-png (click) 353997 335669 74 1322 1 0% 0 0 38.027998
erubi-rails (click) 1930961 1630899 262 3676 22 0% 0 0 103.754457
hexapdf (click) 1559284 1372562 593 15635 45 0% 0 0 450.247519
liquid-c (click) 583002 494934 114 2217 5 0% 0 0 62.48569
liquid-compile (click) 497648 446168 146 2725 2 0% 0 0 79.986378
liquid-render (click) 690162 611201 131 2933 8 0% 0 0 80.084256
lobsters (click) 8570210 7267113 3162 63707 118 0% 0 0 2149.821684
mail (click) 875132 855113 342 7227 40 0% 0 0 206.555339
psych-load (click) 331142 299635 61 830 2 0% 0 0 25.511349
railsbench (click) 3370987 2983833 1649 20134 58 0% 0 0 583.173157
rubocop (click) 6155242 5369694 3013 63546 160 0% 6 0 1876.696819
ruby-lsp (click) 990765 884720 345 6749 48 0% 1 0 188.546215
sequel (click) 539449 488749 11 119 0 0% 0 0 4.227349
shipit (click) 7236796 6008259 3390 54030 214 0% 0 0 1710.990517
binarytrees (click) 154320 151361 6 64 0 0% 0 0 2.509519
blurhash (click) 199337 195889 27 603 0 0% 0 0 17.829809
erubi (click) 294458 260817 5 125 0 0% 0 0 3.817618
etanni (click) 176957 175574 7 98 0 0% 0 0 3.154685
fannkuchredux (click) 171788 169014 3 399 0 0% 0 0 10.992568
fluentd (click) 505667 436033 7 115 0 0% 0 0 3.858107
graphql (click) 444779 393479 72 1918 17 0% 0 0 54.681559
graphql-native (click) 388885 367844 39 532 0 0% 0 0 14.040517
lee (click) 357276 325891 49 1070 0 0% 0 0 31.822376
matmul (click) 158172 149053 8 132 0 0% 0 0 4.213216
nbody (click) 160937 156493 6 238 0 0% 0 0 5.781722
nqueens (click) 169699 173218 5 387 0 0% 0 0 10.269622
optcarrot (click) 472476 475516 188 4740 34 0% 0 0 111.364286
protoboeuf (click) 316633 370664 11 2828 0 0% 0 0 75.57954
protoboeuf-encode (click) 389300 386423 13 1805 0 0% 0 0 45.967173
rack (click) 323277 280788 35 580 0 0% 0 0 15.606851
ruby-json (click) 167719 163604 8 204 0 0% 0 0 5.683062
rubyboy (click) 728310 716458 154 6858 42 0% 0 0 172.99292
rubykon (click) 291698 263894 135 2052 3 0% 0 0 56.085649
sudoku (click) 198625 193641 6 863 0 0% 0 0 23.548118
tinygql (click) 346578 333653 59 1031 5 0% 0 0 27.277365
30k_ifelse (click) 6367005 5283666 9259 75432 0 0% 0 0 1943.649194
30k_methods (click) 2381613 1737482 5778 19357 0 0% 0 0 482.503193
attr_accessor (click) 151419 152402 3 78 0 0% 0 0 2.034204
cfunc_itself (click) 152174 148605 4 53 0 0% 0 0 1.434465
fib (click) 149706 139253 3 30 0 0% 0 0 1.036233
getivar (click) 150859 143060 3 78 0 0% 0 0 1.869054
keyword_args (click) 153379 149435 5 56 0 0% 0 0 1.830189
loops-times (click) 154019 144271 5 93 0 0% 0 0 2.67517
object-new (click) 149453 139076 2 36 0 0% 0 0 1.04164
respond_to (click) 153498 151269 4 80 0 0% 0 0 2.018708
ruby-xor (click) 152918 144943 4 100 0 0% 0 0 2.68393
setivar (click) 149830 139984 3 46 0 0% 0 0 1.216242
setivar_object (click) 150449 140214 3 49 0 0% 0 0 1.335032
setivar_young (click) 151347 149317 4 63 0 0% 0 0 1.647563
str_concat (click) 152894 151483 6 82 0 0% 0 0 2.443499
throw (click) 153000 149074 5 53 0 0% 0 0 1.770114

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.