YJIT Benchmarks

Details for Benchmarks at 2025-08-12 03:55:41 UTC

YJIT metrics from the yjit-bench suite using Ruby 428937a536.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 88.1% faster than CRuby 3.5.0dev
  • 4.6% faster than YJIT 3.3.6
On railsbench it is
  • 99.3% faster than CRuby 3.5.0dev
  • 5.3% 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 83 50 149 50 159
chunky-png 5 31 5 32 50 14 50 23
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 406 5 377 50 560 50 535
liquid-compile 5 413 5 457 50 550 50 709
liquid-render 5 172 5 166 50 414 50 369
lobsters 5 19 5 19 50 10 50 10
mail 5 188 5 175 50 236 50 199
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 212 50 216
ruby-lsp 5 141 5 148 50 223 50 249
sequel 5 429 5 424 50 596 50 590
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 80 50 146 50 117
blurhash 5 82 5 86 50 127 50 145
erubi 5 116 5 142 50 100 50 136
etanni 5 90 5 98 50 52 50 68
fannkuchredux 5 52 5 57 50 97 50 94
fluentd 5 62 5 62 50 24 50 30
graphql 5 336 5 448 50 446 50 902
graphql-native 5 51 5 77 50 14 50 60
lee 5 23 5 22 50 10 50 10
matmul 5 51 5 48 50 88 50 90
nbody 5 248 5 242 50 585 50 703
nqueens 5 120 5 127 50 74 50 550
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 181 50 621 50 695
protoboeuf-encode 5 179 5 202 50 327 50 777
rack 5 421 5 441 50 645 50 683
ruby-json 5 83 5 81 50 49 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 149
tinygql 5 41 5 43 50 40 50 48
30k_ifelse 5 28 5 27 50 215 50 184
30k_methods 5 38 5 38 50 482 50 473
attr_accessor 5 157 5 180 50 1721 50 1872
cfunc_itself 5 358 5 350 50 1137 50 1258
fib 5 127 5 139 50 902 50 931
getivar 5 213 5 286 50 2251 50 2390
keyword_args 5 104 5 108 50 1034 50 1243
loops-times 5 23 5 24 50 48 50 56
object-new 5 318 5 302 50 405 50 435
respond_to 5 133 5 135 50 3256 50 3899
ruby-xor 5 245 5 254 50 799 50 1280
setivar 5 361 5 350 50 3192 50 4924
setivar_object 5 353 5 311 50 683 50 599
setivar_young 5 367 5 314 50 704 50 640
str_concat 5 397 5 437 50 978 50 1203
throw 5 1272 5 1147 50 1731 50 1413

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) 1501853 1307202 206 2590 0 0% 0 0 74.773272
chunky-png (click) 314898 247356 74 1322 1 0% 0 0 38.993733
erubi-rails (click) 1891256 1556871 262 3717 22 0% 0 0 102.90358
hexapdf (click) 1510134 1296917 593 15648 43 0% 0 0 451.297993
liquid-c (click) 537278 497399 114 2217 5 0% 0 0 62.353745
liquid-compile (click) 453225 425108 146 2693 2 0% 0 0 79.190634
liquid-render (click) 644984 597685 131 2933 8 0% 0 0 80.342507
lobsters (click) 8532628 7142220 3164 63745 118 0% 0 0 2137.815972
mail (click) 829495 784158 342 7229 40 0% 0 0 205.94573
psych-load (click) 269747 243663 61 830 2 0% 0 0 25.398476
railsbench (click) 3331001 2844755 1649 20126 58 0% 0 0 567.080573
rubocop (click) 6109263 5279327 3011 63542 155 0% 6 0 1849.299617
ruby-lsp (click) 948046 864951 345 6778 44 0% 1 0 186.339123
sequel (click) 492376 432608 11 119 0 0% 0 0 3.825858
shipit (click) 7188947 6175768 3388 53912 212 0% 0 0 1717.422081
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.554348
blurhash (click) 52295 51444 27 603 0 0% 0 0 17.863405
erubi (click) 245269 194423 5 125 0 0% 0 0 3.737203
etanni (click) 30806 32125 8 108 0 0% 0 0 3.545391
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.019043
fluentd (click) 463161 383457 7 115 0 0% 0 0 3.827251
graphql (click) 400100 347828 73 1919 19 0% 0 0 55.548671
graphql-native (click) 342629 320879 39 532 0 0% 0 0 14.169087
lee (click) 307558 275273 49 1070 0 0% 0 0 31.660772
matmul (click) 11125 4603 8 132 0 0% 0 0 4.182654
nbody (click) 13890 20235 6 238 0 0% 0 0 5.7925
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.281711
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 111.339311
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 75.824341
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.340746
rack (click) 272055 261428 35 580 0 0% 0 0 14.851904
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.698007
rubyboy (click) 685963 599667 154 6858 42 0% 0 0 172.85891
rubykon (click) 148508 140471 137 2101 3 0% 0 0 56.791541
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.605948
tinygql (click) 298377 251550 59 1031 5 0% 0 0 27.855884
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1938.133082
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 479.31758
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.056303
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.475222
fib (click) 2659 2995 3 30 0 0% 0 0 1.077194
getivar (click) 3812 6802 3 78 0 0% 0 0 1.915332
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.727123
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.704197
object-new (click) 2406 2818 2 36 0 0% 0 0 1.069239
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.110643
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.737381
setivar (click) 2783 3726 3 46 0 0% 0 0 1.278578
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.40051
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.772824
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.414423
throw (click) 5953 4624 5 53 0 0% 0 0 1.833719

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.