YJIT Benchmarks

Details for Benchmarks at 2025-08-06 04:03:18 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 87.3% faster than CRuby 3.5.0dev
  • 4.0% faster than YJIT 3.3.6
On railsbench it is
  • 105.2% faster than CRuby 3.5.0dev
  • 7.1% 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 83 5 83 50 156 50 152
chunky-png 5 31 5 31 50 15 50 23
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 407 5 379 50 566 50 520
liquid-compile 5 407 5 470 50 539 50 689
liquid-render 5 172 5 169 50 415 50 394
lobsters 5 19 5 20 50 10 50 10
mail 5 188 5 178 50 235 50 197
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 140 5 142 50 202 50 217
ruby-lsp 5 142 5 147 50 245 50 246
sequel 5 425 5 432 50 595 50 590
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 118 5 147 50 87 50 142
etanni 5 91 5 98 50 53 50 67
fannkuchredux 5 52 5 58 50 97 50 97
fluentd 5 62 5 57 50 24 50 24
graphql 5 347 5 455 50 449 50 918
graphql-native 5 51 5 80 50 14 50 57
lee 5 23 5 22 50 10 50 10
matmul 5 51 5 51 50 88 50 89
nbody 5 249 5 248 50 585 50 696
nqueens 5 120 5 127 50 74 50 558
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 186 50 621 50 737
protoboeuf-encode 5 178 5 195 50 330 50 781
rack 5 423 5 436 50 645 50 683
ruby-json 5 84 5 81 50 50 50 47
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 22 50 10 50 10
sudoku 5 48 5 51 50 163 50 147
tinygql 5 41 5 43 50 42 50 49
30k_ifelse 5 28 5 27 50 215 50 184
30k_methods 5 38 5 38 50 480 50 470
attr_accessor 5 157 5 185 50 1718 50 1891
cfunc_itself 5 358 5 368 50 1147 50 1258
fib 5 127 5 143 50 903 50 929
getivar 5 213 5 295 50 2251 50 2378
keyword_args 5 104 5 108 50 1042 50 1243
loops-times 5 24 5 24 50 48 50 56
object-new 5 318 5 300 50 405 50 439
respond_to 5 134 5 138 50 3256 50 3930
ruby-xor 5 246 5 224 50 799 50 1280
setivar 5 361 5 331 50 3182 50 4900
setivar_object 5 354 5 301 50 670 50 603
setivar_young 5 367 5 304 50 703 50 612
str_concat 5 400 5 442 50 981 50 1210
throw 5 1271 5 1095 50 1731 50 1429

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) 1550527 1373522 206 2590 0 0% 0 0 73.857672
chunky-png (click) 365542 323423 74 1322 1 0% 0 0 38.477601
erubi-rails (click) 1928451 1685954 263 3633 22 0% 0 0 100.130188
hexapdf (click) 1559730 1446604 593 15637 45 0% 0 0 450.194514
liquid-c (click) 583495 528542 114 2232 5 0% 0 0 62.703423
liquid-compile (click) 507476 424346 146 2724 2 0% 0 0 79.763307
liquid-render (click) 690203 611230 131 2933 8 0% 0 0 80.843957
lobsters (click) 8601824 7393472 3161 64046 118 0% 0 0 2138.600263
mail (click) 874058 854214 342 7227 40 0% 0 0 208.080531
psych-load (click) 330756 331856 61 830 2 0% 0 0 24.158591
railsbench (click) 3376270 2876316 1649 20182 58 0% 0 0 570.838121
rubocop (click) 6153035 5309693 3013 63531 160 0% 6 0 1872.726534
ruby-lsp (click) 993454 862947 344 6729 47 0% 1 0 185.842108
sequel (click) 539747 480682 11 119 0 0% 0 0 4.003094
shipit (click) 7302482 6131415 3385 53965 214 0% 0 0 1720.42139
binarytrees (click) 154320 151361 6 64 0 0% 0 0 2.517436
blurhash (click) 199337 195889 27 603 0 0% 0 0 17.811555
erubi (click) 292331 291751 5 125 0 0% 0 0 3.942369
etanni (click) 176957 175574 7 98 0 0% 0 0 3.128817
fannkuchredux (click) 171788 169014 3 399 0 0% 0 0 10.938238
fluentd (click) 505667 460605 7 115 0 0% 0 0 3.871212
graphql (click) 444048 409220 72 1918 17 0% 0 0 54.362401
graphql-native (click) 387404 382904 39 532 0 0% 0 0 14.139373
lee (click) 357888 334529 49 1070 0 0% 0 0 31.650085
matmul (click) 158172 149053 8 132 0 0% 0 0 4.209734
nbody (click) 160937 156493 6 238 0 0% 0 0 5.905955
nqueens (click) 169699 173218 5 387 0 0% 0 0 10.239769
optcarrot (click) 472476 475516 188 4740 34 0% 0 0 112.416646
protoboeuf (click) 316633 370664 11 2828 0 0% 0 0 75.092877
protoboeuf-encode (click) 389300 386423 13 1805 0 0% 0 0 45.592348
rack (click) 322203 288049 35 580 0 0% 0 0 15.716274
ruby-json (click) 167719 163604 8 204 0 0% 0 0 5.701816
rubyboy (click) 740578 639293 154 6864 42 0% 0 0 173.106615
rubykon (click) 291698 263894 135 2052 3 0% 0 0 55.455954
sudoku (click) 198625 193641 6 863 0 0% 0 0 23.566683
tinygql (click) 346897 333791 59 1031 5 0% 0 0 27.032203
30k_ifelse (click) 6367005 5283666 9259 75432 0 0% 0 0 1935.66603
30k_methods (click) 2381613 1737482 5778 19357 0 0% 0 0 477.97352
attr_accessor (click) 151419 152402 3 78 0 0% 0 0 2.005994
cfunc_itself (click) 152174 148605 4 53 0 0% 0 0 1.411848
fib (click) 149706 139253 3 30 0 0% 0 0 1.016233
getivar (click) 150859 143060 3 78 0 0% 0 0 1.856378
keyword_args (click) 153379 149435 5 56 0 0% 0 0 1.706114
loops-times (click) 154019 144271 5 93 0 0% 0 0 2.713455
object-new (click) 149453 139076 2 36 0 0% 0 0 1.021007
respond_to (click) 153498 151269 4 80 0 0% 0 0 2.025753
ruby-xor (click) 152918 144943 4 100 0 0% 0 0 2.656546
setivar (click) 149830 139984 3 46 0 0% 0 0 1.180179
setivar_object (click) 150449 140214 3 49 0 0% 0 0 1.35288
setivar_young (click) 151347 149317 4 63 0 0% 0 0 1.63972
str_concat (click) 152894 151483 6 82 0 0% 0 0 2.389378
throw (click) 153000 149074 5 53 0 0% 0 0 1.750313

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.