YJIT Benchmarks

Details for Benchmarks at 2025-06-16 03:58:06 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 93.2% faster than CRuby 3.5.0dev
  • 5.5% faster than YJIT 3.3.6
On railsbench it is
  • 104.4% faster than CRuby 3.5.0dev
  • 5.3% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 27 minutes
aarch64 runtime: 3 hours, 45 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 76 50 156 50 164
chunky-png 5 31 5 32 50 14 50 24
erubi-rails 5 16 5 14 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 420 5 413 50 587 50 592
liquid-compile 5 406 5 451 50 539 50 693
liquid-render 5 169 5 168 50 405 50 437
lobsters 5 20 5 19 50 10 50 10
mail 5 195 5 179 50 236 50 203
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 154 50 248 50 255
ruby-lsp 5 145 5 148 50 243 50 261
sequel 5 427 5 418 50 596 50 577
binarytrees 5 84 5 80 50 146 50 118
blurhash 5 82 5 88 50 127 50 145
erubi 5 124 5 144 50 97 50 154
etanni 5 91 5 100 50 53 50 70
fannkuchredux 5 52 5 57 50 97 50 101
fluentd 5 63 5 59 50 25 50 27
graphql 5 84 5 83 50 58 50 54
graphql-native 5 49 5 46 50 10 50 17
lee 5 23 5 21 50 10 50 10
matmul 5 51 5 54 50 88 50 92
nbody 5 249 5 254 50 585 50 697
nqueens 5 120 5 124 50 75 50 520
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 154 50 620 50 731
protoboeuf-encode 5 179 5 200 50 326 50 793
rack 5 578 5 613 50 955 50 1040
ruby-json 5 84 5 82 50 50 50 48
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 22 50 10 50 10
sudoku 5 48 5 51 50 163 50 150
tinygql 5 36 5 34 50 22 50 33
30k_ifelse 5 28 5 27 50 213 50 184
30k_methods 5 38 5 38 50 482 50 475
cfunc_itself 5 358 5 367 50 1137 50 1258
fib 5 127 5 144 50 902 50 931
getivar 5 213 5 312 50 2252 50 2406
keyword_args 5 104 5 110 50 1034 50 1238
loops-times 5 24 5 25 50 48 50 57
object-new 5 322 5 358 50 405 50 580
respond_to 5 133 5 135 50 3258 50 3895
ruby-xor 5 245 5 246 50 799 50 1294
setivar 5 361 5 370 50 3190 50 4939
setivar_object 5 353 5 347 50 672 50 588
setivar_young 5 368 5 346 50 702 50 604
str_concat 5 403 5 455 50 978 50 1181
throw 5 1272 5 1256 50 1719 50 1685

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) 1521578 1282607 206 2590 0 0% 0 0 75.918854
chunky-png (click) 332540 307412 74 1322 1 0% 0 0 39.843308
erubi-rails (click) 1977412 1796990 262 3623 21 0% 0 0 100.080737
hexapdf (click) 1478704 1300279 593 15628 35 0% 0 0 457.709452
liquid-c (click) 495248 471011 114 2217 5 0% 0 0 60.698167
liquid-compile (click) 421464 357754 146 2709 2 0% 0 0 81.755627
liquid-render (click) 612930 538245 131 2933 8 0% 0 0 83.623998
lobsters (click) 8524963 7135348 3170 63754 118 0% 0 0 2180.451914
mail (click) 797903 773791 342 7227 40 0% 0 0 205.595713
psych-load (click) 253504 224937 61 825 3 0% 0 0 24.616514
railsbench (click) 3377447 2914155 1653 20219 56 0% 0 0 594.550262
rubocop (click) 5891586 5068483 2887 61732 115 0% 4 0 1814.294405
ruby-lsp (click) 889256 760915 305 5949 29 0% 0 0 164.054756
sequel (click) 482226 415935 11 114 0 0% 0 0 3.682038
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.628942
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.351436
erubi (click) 270296 218882 5 125 0 0% 0 0 3.957023
etanni (click) 30806 32125 8 108 0 0% 0 0 3.541695
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.145305
fluentd (click) 402463 312945 7 115 0 0% 0 0 3.835088
graphql (click) 426659 360500 66 1035 0 0% 0 0 30.418049
graphql-native (click) 380649 327238 37 399 0 0% 0 0 12.116873
lee (click) 318693 277423 45 1012 0 0% 0 0 30.909245
matmul (click) 11125 4603 8 132 0 0% 0 0 4.230491
nbody (click) 13890 20235 6 238 0 0% 0 0 5.855469
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.372854
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 113.358094
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.531111
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.999667
rack (click) 253169 241965 31 496 0 0% 0 0 13.147962
ruby-json (click) 24676 22156 8 204 0 0% 0 0 5.925293
rubyboy (click) 707141 647129 177 6962 40 0% 0 0 182.613403
rubykon (click) 146441 162602 137 2076 3 0% 0 0 57.226186
sudoku (click) 52157 66291 7 871 0 0% 0 0 24.117817
tinygql (click) 289855 263425 58 977 5 0% 0 0 27.300013
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1975.040461
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 494.273706
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.476972
fib (click) 2659 2995 3 30 0 0% 0 0 1.080468
getivar (click) 3812 6802 3 78 0 0% 0 0 1.95624
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.805705
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.743119
object-new (click) 2406 2818 2 36 0 0% 0 0 1.102845
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.098346
ruby-xor (click) 5863 8622 4 100 0 0% 0 0 2.727952
setivar (click) 2783 3726 3 46 0 0% 0 0 1.246615
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.417342
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.710395
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.46853
throw (click) 5953 4624 5 53 0 0% 0 0 1.798316

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.