YJIT Benchmarks

Details for Benchmarks at 2025-06-12 03:55:13 UTC

YJIT metrics from the yjit-bench suite using Ruby 4585ccd90f.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 92.0% faster than CRuby 3.5.0dev
  • 4.8% faster than YJIT 3.3.6
On railsbench it is
  • 100.4% faster than CRuby 3.5.0dev
  • 2.6% 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 155 50 171
chunky-png 5 31 5 31 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 419 5 417 50 576 50 618
liquid-compile 5 407 5 454 50 540 50 692
liquid-render 5 169 5 171 50 402 50 428
lobsters 5 20 5 19 50 10 50 10
mail 5 194 5 186 50 250 50 208
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 155 50 251 50 254
ruby-lsp 5 156 5 147 50 258 50 250
sequel 5 427 5 422 50 596 50 577
binarytrees 5 83 5 81 50 146 50 121
blurhash 5 82 5 87 50 127 50 145
erubi 5 75 5 144 50 98 50 152
etanni 5 90 5 101 50 53 50 70
fannkuchredux 5 52 5 57 50 97 50 101
fluentd 5 63 5 62 50 26 50 30
graphql 5 85 5 82 50 57 50 55
graphql-native 5 49 5 46 50 10 50 16
lee 5 22 5 24 50 10 50 10
matmul 5 51 5 50 50 88 50 91
nbody 5 249 5 241 50 584 50 688
nqueens 5 120 5 125 50 75 50 526
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 150 50 620 50 730
protoboeuf-encode 5 179 5 194 50 327 50 773
rack 5 572 5 622 50 955 50 1029
ruby-json 5 83 5 83 50 50 50 49
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 149
tinygql 5 35 5 36 50 22 50 32
30k_ifelse 5 28 5 27 50 215 50 183
30k_methods 5 39 5 38 50 476 50 476
cfunc_itself 5 359 5 369 50 1147 50 1258
fib 5 127 5 139 50 902 50 931
getivar 5 213 5 284 50 2252 50 2373
keyword_args 5 104 5 111 50 1041 50 1243
loops-times 5 24 5 26 50 48 50 56
object-new 5 322 5 362 50 405 50 609
respond_to 5 133 5 132 50 3257 50 3897
ruby-xor 5 245 5 222 50 799 50 1292
setivar 5 361 5 455 50 3186 50 5022
setivar_object 5 353 5 429 50 671 50 596
setivar_young 5 367 5 428 50 701 50 613
str_concat 5 400 5 484 50 982 50 1188
throw 5 1271 5 1279 50 1737 50 1657

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) 1515005 1269322 206 2590 0 0% 0 0 75.362097
chunky-png (click) 296943 282991 74 1322 1 0% 0 0 38.841782
erubi-rails (click) 1959356 1741570 263 3651 21 0% 0 0 101.777134
hexapdf (click) 1477859 1339000 594 15611 37 0% 0 0 454.277679
liquid-c (click) 532104 503014 114 2232 5 0% 0 0 63.610218
liquid-compile (click) 419015 371286 146 2691 2 0% 0 0 80.058004
liquid-render (click) 603059 545050 131 2933 8 0% 0 0 80.652991
lobsters (click) 8524232 7131337 3169 63738 118 0% 0 0 2173.674944
mail (click) 797298 768490 342 7227 40 0% 0 0 206.141739
psych-load (click) 262855 254963 61 825 3 0% 0 0 24.645766
railsbench (click) 3371390 2860371 1653 20165 56 0% 0 0 573.419004
rubocop (click) 5919161 5167489 2885 61702 114 0% 4 0 1811.039787
ruby-lsp (click) 853010 782770 305 5956 29 0% 0 0 162.946272
sequel (click) 464764 449417 11 115 0 0% 0 0 4.411503
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.648967
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.43125
erubi (click) 271025 228170 5 125 0 0% 0 0 3.845791
etanni (click) 30806 32125 8 108 0 0% 0 0 3.566583
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.220613
fluentd (click) 413950 356275 7 115 0 0% 0 0 3.823059
graphql (click) 451381 415197 66 1035 0 0% 0 0 28.916135
graphql-native (click) 373897 353438 37 399 0 0% 0 0 11.098168
lee (click) 282394 244093 45 1012 0 0% 0 0 30.301636
matmul (click) 11125 4603 8 132 0 0% 0 0 4.25805
nbody (click) 13890 20235 6 238 0 0% 0 0 5.841134
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.459438
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 112.737803
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.689745
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 47.200611
rack (click) 251074 223018 31 496 0 0% 0 0 12.760881
ruby-json (click) 20904 19023 8 204 0 0% 0 0 5.77118
rubyboy (click) 724809 678244 177 6973 40 0% 0 0 177.756256
rubykon (click) 145449 177646 137 2062 3 0% 0 0 56.451953
sudoku (click) 52157 66291 7 871 0 0% 0 0 24.096555
tinygql (click) 279671 244789 58 977 5 0% 0 0 27.196915
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1971.515376
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 493.450082
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.48167
fib (click) 2659 2995 3 30 0 0% 0 0 1.100995
getivar (click) 3812 6802 3 78 0 0% 0 0 1.871471
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.784468
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.751274
object-new (click) 2406 2818 2 36 0 0% 0 0 1.119028
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.112733
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.720477
setivar (click) 2783 3726 3 46 0 0% 0 0 1.287401
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.404976
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.69102
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.472827
throw (click) 5953 4624 5 53 0 0% 0 0 1.784947

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.