YJIT Benchmarks

Details for Benchmarks at 2025-08-28 03:48:22 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 90.6% faster than CRuby 3.5.0dev
  • 5.3% faster than YJIT 3.3.6
On railsbench it is
  • 100.6% faster than CRuby 3.5.0dev
  • 5.5% 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 179 50 197
chunky-png 5 31 5 32 50 15 50 26
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 411 5 388 50 598 50 534
liquid-compile 5 415 5 467 50 538 50 708
liquid-render 5 172 5 167 50 413 50 389
lobsters 5 20 5 20 50 10 50 10
mail 5 195 5 177 50 249 50 204
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 137 5 140 50 201 50 218
ruby-lsp 5 141 5 147 50 228 50 244
sequel 5 426 5 435 50 591 50 586
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 82 50 146 50 128
blurhash 5 82 5 88 50 127 50 145
erubi 5 125 5 142 50 101 50 140
etanni 5 90 5 70 50 53 50 35
fannkuchredux 5 52 5 57 50 98 50 96
fluentd 5 62 5 62 50 25 50 23
graphql 5 337 5 441 50 479 50 915
graphql-native 5 51 5 78 50 11 50 65
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 53 50 88 50 92
nbody 5 249 5 265 50 585 50 705
nqueens 5 120 5 128 50 74 50 541
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 186 50 621 50 690
protoboeuf-encode 5 168 5 202 50 325 50 807
rack 5 425 5 443 50 646 50 688
ruby-json 5 83 5 82 50 49 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 163 50 150
tinygql 5 41 5 42 50 42 50 47
30k_ifelse 5 28 5 27 50 215 50 184
30k_methods 5 39 5 38 50 481 50 474
attr_accessor 5 157 5 224 50 1720 50 1938
cfunc_itself 5 358 5 366 50 1138 50 1258
fib 5 127 5 134 50 902 50 931
getivar 5 212 5 304 50 2249 50 2393
keyword_args 5 104 5 109 50 1034 50 1243
loops-times 5 24 5 25 50 48 50 56
object-new 5 319 5 300 50 404 50 431
respond_to 5 134 5 133 50 3255 50 3898
ruby-xor 5 245 5 253 50 799 50 1278
setivar 5 361 5 360 50 3188 50 4936
setivar_object 5 352 5 306 50 670 50 567
setivar_young 5 367 5 310 50 703 50 591
str_concat 5 400 5 432 50 980 50 1193
throw 5 1269 5 1126 50 1718 50 1416

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) 1517530 1294546 203 2569 0 0% 0 0 74.021021
chunky-png (click) 317072 282715 74 1322 1 0% 0 0 38.928196
erubi-rails (click) 1913520 1662909 263 3678 22 0% 0 0 103.171601
hexapdf (click) 1514416 1338487 593 15692 43 0% 0 0 451.890863
liquid-c (click) 541343 452843 114 2232 5 0% 0 0 61.359017
liquid-compile (click) 467102 407872 146 2746 2 0% 0 0 83.42864
liquid-render (click) 647044 592032 131 2933 8 0% 0 0 80.566793
lobsters (click) 8448416 7037467 3118 62823 119 0% 0 0 2094.092322
mail (click) 831485 721222 342 7227 40 0% 0 0 206.430209
psych-load (click) 281181 247984 61 830 2 0% 0 0 24.719218
railsbench (click) 3302128 2885587 1605 19540 47 0% 0 0 553.403755
rubocop (click) 6116685 5123404 3014 63616 156 0% 6 0 1849.984884
ruby-lsp (click) 957356 842121 347 6807 44 0% 1 0 186.776101
sequel (click) 497082 437203 11 119 0 0% 0 0 4.296691
shipit (click) 7694353 6536732 3357 53719 187 0% 1 0 1729.212247
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.651501
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.046329
erubi (click) 247855 197413 5 125 0 0% 0 0 3.867962
etanni (click) 32930 35718 8 114 0 0% 0 0 3.638875
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.071836
fluentd (click) 466351 403313 7 115 0 0% 0 0 3.805177
graphql (click) 402567 342576 73 1919 19 0% 0 0 54.114693
graphql-native (click) 345918 324479 39 532 0 0% 0 0 14.297237
lee (click) 310275 270124 49 1070 0 0% 0 0 31.782253
matmul (click) 11125 4603 8 132 0 0% 0 0 4.156518
nbody (click) 13890 20235 6 238 0 0% 0 0 5.78306
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.360884
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 111.677636
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 75.927448
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.247066
rack (click) 274527 272512 35 580 0 0% 0 0 15.326999
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.688787
rubyboy (click) 688073 651413 154 6860 42 0% 0 0 173.517489
rubykon (click) 146441 162602 137 2076 3 0% 0 0 56.870857
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.909874
tinygql (click) 301080 262801 59 1031 5 0% 0 0 27.542157
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1948.037443
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 483.402734
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.090661
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.503903
fib (click) 2659 2995 3 30 0 0% 0 0 1.06297
getivar (click) 3812 6802 3 78 0 0% 0 0 1.90846
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.788796
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.794917
object-new (click) 2406 2818 2 36 0 0% 0 0 1.101916
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.1335
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.74171
setivar (click) 2783 3726 3 46 0 0% 0 0 1.250247
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.421541
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.704764
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.434728
throw (click) 5953 4624 5 53 0 0% 0 0 1.794126

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.