YJIT Benchmarks

Details for Benchmarks at 2025-09-01 03:57:05 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 93.0% faster than CRuby 3.5.0dev
  • 8.0% faster than YJIT 3.3.6
On railsbench it is
  • 103.1% faster than CRuby 3.5.0dev
  • 8.0% 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 82 5 86 50 167 50 210
chunky-png 5 31 5 33 50 15 50 29
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 395 50 595 50 526
liquid-compile 5 408 5 472 50 551 50 718
liquid-render 5 171 5 162 50 391 50 384
lobsters 5 20 5 20 50 10 50 10
mail 5 194 5 178 50 236 50 229
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 137 5 141 50 211 50 216
ruby-lsp 5 144 5 147 50 223 50 246
sequel 5 435 5 433 50 600 50 600
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 83 50 146 50 129
blurhash 5 82 5 87 50 127 50 145
erubi 5 76 5 138 50 102 50 134
etanni 5 90 5 70 50 53 50 36
fannkuchredux 5 52 5 57 50 98 50 95
fluentd 5 62 5 62 50 24 50 30
graphql 5 344 5 457 50 479 50 921
graphql-native 5 51 5 78 50 13 50 62
lee 5 23 5 23 50 10 50 10
matmul 5 51 5 51 50 88 50 91
nbody 5 249 5 264 50 585 50 701
nqueens 5 120 5 126 50 74 50 545
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 185 50 621 50 762
protoboeuf-encode 5 177 5 203 50 328 50 829
rack 5 424 5 439 50 604 50 699
ruby-json 5 84 5 84 50 50 50 49
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 51 50 162 50 149
tinygql 5 41 5 43 50 43 50 48
30k_ifelse 5 28 5 27 50 215 50 184
30k_methods 5 38 5 38 50 473 50 475
attr_accessor 5 157 5 196 50 1721 50 1902
cfunc_itself 5 358 5 364 50 1137 50 1258
fib 5 127 5 142 50 902 50 931
getivar 5 212 5 313 50 2252 50 2405
keyword_args 5 104 5 108 50 1034 50 1243
loops-times 5 24 5 26 50 48 50 56
object-new 5 318 5 309 50 405 50 464
respond_to 5 133 5 139 50 3256 50 3898
ruby-xor 5 245 5 251 50 799 50 1278
setivar 5 361 5 381 50 3194 50 4955
setivar_object 5 353 5 319 50 671 50 568
setivar_young 5 367 5 323 50 702 50 591
str_concat 5 400 5 453 50 981 50 1191
throw 5 1272 5 1123 50 1720 50 1383

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) 1535247 1354910 203 2570 0 0% 0 0 74.213359
chunky-png (click) 315148 306412 74 1322 1 0% 0 0 39.479763
erubi-rails (click) 1941534 1678834 262 3686 22 0% 0 0 102.903191
hexapdf (click) 1515253 1394320 594 15692 43 0% 0 0 455.567332
liquid-c (click) 541325 461416 114 2228 5 0% 0 0 61.374711
liquid-compile (click) 465276 422912 146 2740 2 0% 0 0 81.448995
liquid-render (click) 646018 542981 131 2946 8 0% 0 0 81.692071
lobsters (click) 8537780 7324042 3120 63422 119 0% 0 0 2132.975035
mail (click) 857016 808003 342 7696 40 0% 0 0 217.569987
psych-load (click) 281332 232176 61 830 2 0% 0 0 25.088033
railsbench (click) 3327402 2949784 1605 19597 47 0% 0 0 560.594587
rubocop (click) 6124217 5304779 3014 63680 156 0% 6 0 1904.878193
ruby-lsp (click) 959268 763363 346 6773 43 0% 1 0 190.361798
sequel (click) 495529 428502 11 119 0 0% 0 0 4.102423
shipit (click) 7646510 6424366 3288 52615 184 0% 0 0 1710.367396
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.654127
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.189537
erubi (click) 248282 214651 5 125 0 0% 0 0 3.933408
etanni (click) 32930 35718 8 114 0 0% 0 0 3.660188
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.276132
fluentd (click) 464199 402175 7 115 0 0% 0 0 3.810274
graphql (click) 402451 359472 73 1920 19 0% 0 0 54.686032
graphql-native (click) 346130 292550 39 532 0 0% 0 0 14.215949
lee (click) 311003 246693 49 1070 0 0% 0 0 32.059521
matmul (click) 11125 4603 8 132 0 0% 0 0 4.176175
nbody (click) 13890 20235 6 238 0 0% 0 0 5.862278
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.552291
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 112.271858
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 77.051574
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.860469
rack (click) 262978 211558 35 580 0 0% 0 0 15.606022
ruby-json (click) 19776 17761 8 204 0 0% 0 0 5.721904
rubyboy (click) 687636 651575 154 6858 42 0% 0 0 175.173967
rubykon (click) 146441 162602 137 2076 3 0% 0 0 57.626866
sudoku (click) 52157 66291 7 871 0 0% 0 0 24.105231
tinygql (click) 298712 269596 59 1031 5 0% 0 0 28.225221
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1960.755451
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 485.334615
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.084647
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.469425
fib (click) 2659 2995 3 30 0 0% 0 0 1.07919
getivar (click) 3812 6802 3 78 0 0% 0 0 1.930787
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.769592
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.755577
object-new (click) 2406 2818 2 36 0 0% 0 0 1.113467
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.128484
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.785237
setivar (click) 2783 3726 3 46 0 0% 0 0 1.270809
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.409528
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.748831
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.459569
throw (click) 5953 4624 5 53 0 0% 0 0 1.834306

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.