YJIT Benchmarks

Details for Benchmarks at 2025-08-27 03:47:56 UTC

YJIT metrics from the yjit-bench suite using Ruby 5ff7b2c582.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 87.8% faster than CRuby 3.5.0dev
  • 4.1% faster than YJIT 3.3.6
On railsbench it is
  • 103.6% faster than CRuby 3.5.0dev
  • 6.1% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 28 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 84 5 86 50 168 50 200
chunky-png 5 31 5 32 50 14 50 26
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 391 50 578 50 524
liquid-compile 5 406 5 469 50 537 50 675
liquid-render 5 172 5 167 50 414 50 363
lobsters 5 20 5 20 50 10 50 10
mail 5 188 5 182 50 239 50 205
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 141 5 139 50 205 50 215
ruby-lsp 5 145 5 147 50 243 50 245
sequel 5 427 5 427 50 592 50 586
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 82 50 146 50 128
blurhash 5 82 5 85 50 127 50 145
erubi 5 126 5 139 50 100 50 139
etanni 5 90 5 69 50 53 50 35
fannkuchredux 5 52 5 57 50 97 50 96
fluentd 5 62 5 64 50 24 50 24
graphql 5 336 5 455 50 471 50 916
graphql-native 5 51 5 78 50 12 50 60
lee 5 23 5 22 50 10 50 10
matmul 5 51 5 48 50 88 50 90
nbody 5 248 5 239 50 585 50 657
nqueens 5 120 5 128 50 74 50 543
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 178 5 187 50 621 50 681
protoboeuf-encode 5 178 5 195 50 326 50 805
rack 5 423 5 436 50 648 50 680
ruby-json 5 83 5 82 50 50 50 50
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 149
tinygql 5 40 5 42 50 43 50 48
30k_ifelse 5 28 5 27 50 215 50 185
30k_methods 5 38 5 38 50 474 50 474
attr_accessor 5 157 5 208 50 1722 50 1918
cfunc_itself 5 359 5 374 50 1138 50 1258
fib 5 127 5 141 50 902 50 931
getivar 5 212 5 319 50 2253 50 2408
keyword_args 5 104 5 101 50 1034 50 1243
loops-times 5 24 5 26 50 48 50 56
object-new 5 318 5 300 50 405 50 425
respond_to 5 134 5 134 50 3256 50 3901
ruby-xor 5 245 5 253 50 800 50 1274
setivar 5 361 5 371 50 3189 50 4952
setivar_object 5 353 5 323 50 671 50 613
setivar_young 5 366 5 327 50 703 50 653
str_concat 5 400 5 442 50 980 50 1192
throw 5 1272 5 1129 50 1740 50 1419

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) 1519987 1264432 203 2569 0 0% 0 0 74.055029
chunky-png (click) 317365 266667 74 1322 1 0% 0 0 39.112481
erubi-rails (click) 1909504 1658529 262 3685 22 0% 0 0 102.025055
hexapdf (click) 1511570 1339378 593 15635 43 0% 0 0 448.504307
liquid-c (click) 540886 460442 114 2217 5 0% 0 0 61.169107
liquid-compile (click) 466538 405440 146 2709 2 0% 0 0 80.695419
liquid-render (click) 647269 559470 131 2933 8 0% 0 0 81.033732
lobsters (click) 8508208 7123589 3119 63419 118 0% 0 0 2150.60185
mail (click) 829898 793628 342 7227 40 0% 0 0 205.649688
psych-load (click) 280888 247648 61 830 2 0% 0 0 24.457668
railsbench (click) 3303073 2962021 1605 19545 47 0% 0 0 560.269498
rubocop (click) 6116945 5295677 3014 63619 157 0% 6 0 1840.779274
ruby-lsp (click) 952894 903410 346 6776 43 0% 1 0 190.286116
sequel (click) 494846 402747 11 119 0 0% 0 0 4.358304
shipit (click) 7482251 6433621 3288 52144 181 0% 0 0 1690.426852
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.649694
blurhash (click) 52295 51444 27 603 0 0% 0 0 17.933332
erubi (click) 245875 212254 5 125 0 0% 0 0 3.935978
etanni (click) 32930 35718 8 114 0 0% 0 0 3.630347
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.006927
fluentd (click) 466392 395175 7 115 0 0% 0 0 3.800961
graphql (click) 390872 338374 73 1919 18 0% 0 0 55.800758
graphql-native (click) 333930 303597 39 532 0 0% 0 0 14.07891
lee (click) 309728 269692 49 1070 0 0% 0 0 31.964699
matmul (click) 11125 4603 8 132 0 0% 0 0 4.162294
nbody (click) 13890 20235 6 238 0 0% 0 0 5.848622
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.364483
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 111.754736
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 75.666986
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.146361
rack (click) 269241 242563 35 580 0 0% 0 0 15.505224
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.622781
rubyboy (click) 688263 610660 154 6858 42 0% 0 0 173.381819
rubykon (click) 146441 162602 137 2076 3 0% 0 0 56.651356
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.707388
tinygql (click) 288973 233690 59 1031 5 0% 0 0 28.093294
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1947.354293
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 480.364229
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.074238
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.446337
fib (click) 2659 2995 3 30 0 0% 0 0 1.068774
getivar (click) 3812 6802 3 78 0 0% 0 0 1.893422
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.774814
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.721421
object-new (click) 2406 2818 2 36 0 0% 0 0 1.120532
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.112227
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.692723
setivar (click) 2783 3726 3 46 0 0% 0 0 1.243727
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.395221
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.718624
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.448944
throw (click) 5953 4624 5 53 0 0% 0 0 1.766029

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.