YJIT Benchmarks

Details for Benchmarks at 2025-07-03 03:58:09 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 91.8% faster than CRuby 3.5.0dev
  • 3.0% faster than YJIT 3.3.6
On railsbench it is
  • 110.9% faster than CRuby 3.5.0dev
  • 6.9% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 27 minutes
aarch64 runtime: 3 hours, 48 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 75 50 153 50 161
chunky-png 5 31 5 32 50 15 50 22
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 405 5 396 50 594 50 591
liquid-compile 5 407 5 448 50 555 50 692
liquid-render 5 168 5 165 50 403 50 378
lobsters 5 20 5 19 50 10 50 10
mail 5 195 5 174 50 250 50 188
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 155 50 251 50 255
ruby-lsp 5 159 5 151 50 247 50 261
sequel 5 428 5 422 50 591 50 578
binarytrees 5 84 5 80 50 146 50 117
blurhash 5 82 5 85 50 127 50 144
erubi 5 76 5 145 50 34 50 139
etanni 5 91 5 97 50 53 50 67
fannkuchredux 5 52 5 57 50 97 50 96
fluentd 5 63 5 60 50 24 50 30
graphql 5 85 5 84 50 58 50 55
graphql-native 5 39 5 45 50 10 50 16
lee 5 23 5 23 50 10 50 10
matmul 5 51 5 53 50 88 50 86
nbody 5 249 5 264 50 585 50 680
nqueens 5 120 5 126 50 75 50 548
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 172 5 160 50 621 50 735
protoboeuf-encode 5 176 5 200 50 327 50 767
rack 5 578 5 621 50 958 50 1036
ruby-json 5 83 5 81 50 50 50 48
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 137
tinygql 5 36 5 34 50 22 50 33
30k_ifelse 5 28 5 27 50 215 50 184
30k_methods 5 39 5 38 50 482 50 473
cfunc_itself 5 357 5 350 50 1147 50 1258
fib 5 127 5 141 50 902 50 929
getivar 5 213 5 307 50 2255 50 2388
keyword_args 5 104 5 104 50 1041 50 1244
loops-times 5 24 5 24 50 48 50 56
object-new 5 322 5 352 50 406 50 562
respond_to 5 134 5 138 50 3257 50 3880
ruby-xor 5 244 5 254 50 799 50 1278
setivar 5 361 5 354 50 3187 50 4919
setivar_object 5 353 5 325 50 671 50 584
setivar_young 5 366 5 326 50 700 50 582
str_concat 5 399 5 445 50 979 50 1206
throw 5 1268 5 1267 50 1711 50 1633

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) 1547030 1352698 206 2590 0 0% 0 0 76.304086
chunky-png (click) 374184 351340 74 1322 1 0% 0 0 38.961609
erubi-rails (click) 2014414 1750000 262 3676 21 0% 0 0 102.731762
hexapdf (click) 1552754 1388812 594 15634 43 0% 0 0 457.36097
liquid-c (click) 560637 517757 114 2217 5 0% 0 0 61.48982
liquid-compile (click) 486822 447771 146 2725 2 0% 0 0 82.025233
liquid-render (click) 670661 612392 131 2933 8 0% 0 0 82.617904
lobsters (click) 8553876 7341291 3168 63690 119 0% 0 0 2153.465849
mail (click) 855346 847704 342 7227 40 0% 0 0 206.905423
psych-load (click) 334532 328092 61 825 3 0% 0 0 24.515147
railsbench (click) 3436715 3003023 1655 20212 56 0% 0 0 579.430346
rubocop (click) 5957704 5235276 2886 61761 116 0% 4 0 1802.194493
ruby-lsp (click) 912302 802086 305 5956 29 0% 0 0 166.048301
sequel (click) 547236 463295 11 114 0 0% 0 0 3.764973
binarytrees (click) 153864 143208 6 64 0 0% 0 0 2.588749
blurhash (click) 198881 204120 27 603 0 0% 0 0 18.121871
erubi (click) 302857 272065 5 125 0 0% 0 0 3.919647
etanni (click) 176010 167049 7 98 0 0% 0 0 3.209554
fannkuchredux (click) 171332 169053 3 399 0 0% 0 0 11.104445
fluentd (click) 455613 424267 7 115 0 0% 0 0 3.766288
graphql (click) 486556 492586 66 1035 0 0% 0 0 28.741272
graphql-native (click) 447887 384036 37 399 0 0% 0 0 11.10571
lee (click) 363734 316883 45 1012 0 0% 0 0 30.599429
matmul (click) 157716 157284 8 132 0 0% 0 0 4.221623
nbody (click) 160476 156527 6 238 0 0% 0 0 5.803796
nqueens (click) 169243 181449 5 387 0 0% 0 0 10.351168
optcarrot (click) 472020 434595 188 4740 34 0% 0 0 114.256388
protoboeuf (click) 316177 378895 11 2828 0 0% 0 0 74.647162
protoboeuf-encode (click) 388844 484766 13 1805 0 0% 0 0 45.86129
rack (click) 320126 333156 31 496 0 0% 0 0 13.052077
ruby-json (click) 166771 163271 8 204 0 0% 0 0 5.848965
rubyboy (click) 762505 718742 177 6919 40 0% 0 0 176.414904
rubykon (click) 291670 280730 135 2056 3 0% 0 0 57.275763
sudoku (click) 198169 218256 6 863 0 0% 0 0 23.970598
tinygql (click) 355028 327197 58 971 5 0% 0 0 26.587512
30k_ifelse (click) 6366549 5128037 9259 75432 0 0% 0 0 1988.625457
30k_methods (click) 2381157 1737461 5778 19357 0 0% 0 0 496.339387
cfunc_itself (click) 151718 148644 4 53 0 0% 0 0 1.458984
fib (click) 149245 147479 3 30 0 0% 0 0 1.133406
getivar (click) 150403 151291 3 78 0 0% 0 0 1.897328
keyword_args (click) 152923 149454 5 56 0 0% 0 0 1.755348
loops-times (click) 153563 144310 5 93 0 0% 0 0 2.840029
object-new (click) 148992 147302 2 36 0 0% 0 0 1.055662
respond_to (click) 153042 151308 4 80 0 0% 0 0 2.175275
ruby-xor (click) 152449 153106 4 100 0 0% 0 0 2.68477
setivar (click) 149369 148210 3 46 0 0% 0 0 1.215502
setivar_object (click) 149993 148445 3 49 0 0% 0 0 1.374772
setivar_young (click) 150891 149356 4 63 0 0% 0 0 1.65321
str_concat (click) 152438 151522 6 82 0 0% 0 0 2.432374
throw (click) 152544 149113 5 53 0 0% 0 0 1.754414

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.