YJIT Benchmarks

Details for Benchmarks at 2025-08-18 04:01:52 UTC

YJIT metrics from the yjit-bench suite using Ruby 7ddc53bc0c.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 88.1% faster than CRuby 3.5.0dev
  • 4.5% faster than YJIT 3.3.6
On railsbench it is
  • 97.7% faster than CRuby 3.5.0dev
  • 3.4% 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 81 5 82 50 156 50 167
chunky-png 5 31 5 32 50 14 50 26
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 392 50 576 50 527
liquid-compile 5 414 5 463 50 538 50 713
liquid-render 5 173 5 169 50 415 50 385
lobsters 5 19 5 20 50 10 50 10
mail 5 187 5 177 50 250 50 201
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 211 50 218
ruby-lsp 5 144 5 145 50 229 50 246
sequel 5 429 5 436 50 599 50 591
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 126 5 139 50 90 50 131
etanni 5 90 5 97 50 53 50 68
fannkuchredux 5 52 5 57 50 97 50 94
fluentd 5 62 5 59 50 24 50 23
graphql 5 335 5 448 50 463 50 921
graphql-native 5 51 5 78 50 14 50 62
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 50 50 88 50 89
nbody 5 248 5 233 50 585 50 702
nqueens 5 120 5 126 50 74 50 548
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 182 50 621 50 689
protoboeuf-encode 5 179 5 196 50 326 50 793
rack 5 426 5 442 50 596 50 697
ruby-json 5 83 5 83 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 163 50 149
tinygql 5 40 5 43 50 43 50 49
30k_ifelse 5 28 5 28 50 216 50 184
30k_methods 5 38 5 38 50 480 50 475
attr_accessor 5 157 5 180 50 1717 50 1872
cfunc_itself 5 358 5 352 50 1147 50 1258
fib 5 127 5 144 50 902 50 931
getivar 5 213 5 311 50 2253 50 2400
keyword_args 5 104 5 105 50 1042 50 1242
loops-times 5 24 5 25 50 47 50 56
object-new 5 318 5 299 50 406 50 433
respond_to 5 134 5 138 50 3256 50 3897
ruby-xor 5 245 5 238 50 799 50 1281
setivar 5 361 5 345 50 3184 50 4917
setivar_object 5 354 5 308 50 671 50 601
setivar_young 5 367 5 311 50 703 50 641
str_concat 5 401 5 445 50 980 50 1200
throw 5 1271 5 1133 50 1735 50 1406

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) 1506277 1327614 206 2590 0 0% 0 0 75.357634
chunky-png (click) 313783 295512 74 1322 1 0% 0 0 38.65961
erubi-rails (click) 1895853 1651299 262 3684 22 0% 0 0 102.054265
hexapdf (click) 1508411 1295197 593 15640 43 0% 0 0 451.039693
liquid-c (click) 538573 458006 114 2232 5 0% 0 0 63.163445
liquid-compile (click) 458828 398798 146 2684 2 0% 0 0 78.87444
liquid-render (click) 644577 572708 131 2933 8 0% 0 0 81.118713
lobsters (click) 8554059 7212561 3163 63962 118 0% 0 0 2127.338937
mail (click) 828178 823966 342 7227 40 0% 0 0 201.187547
psych-load (click) 278709 228668 61 830 2 0% 0 0 24.433996
railsbench (click) 3332982 3027813 1649 20128 58 0% 0 0 571.501203
rubocop (click) 6105870 5243952 3011 63532 156 0% 6 0 1838.357854
ruby-lsp (click) 952229 852930 344 6750 43 0% 1 0 186.810645
sequel (click) 492019 432710 11 119 0 0% 0 0 4.000659
shipit (click) 7687138 6264207 3369 53927 209 0% 0 0 1745.007325
binarytrees (click) 7273 6911 6 64 0 0% 0 0 2.58134
blurhash (click) 52295 51444 27 603 0 0% 0 0 18.035011
erubi (click) 244447 218319 5 125 0 0% 0 0 3.90131
etanni (click) 30806 32125 8 108 0 0% 0 0 3.569153
fannkuchredux (click) 24746 40953 3 399 0 0% 0 0 11.126808
fluentd (click) 461810 406892 7 115 0 0% 0 0 3.684973
graphql (click) 400422 315586 73 1919 19 0% 0 0 55.80126
graphql-native (click) 343451 321539 39 532 0 0% 0 0 14.064868
lee (click) 307558 275273 49 1070 0 0% 0 0 31.659361
matmul (click) 11125 4603 8 132 0 0% 0 0 4.135606
nbody (click) 13890 20235 6 238 0 0% 0 0 5.761655
nqueens (click) 22652 36960 5 387 0 0% 0 0 10.356563
optcarrot (click) 325946 290644 188 4740 34 0% 0 0 111.179013
protoboeuf (click) 170160 177773 12 2836 0 0% 0 0 76.314894
protoboeuf-encode (click) 243046 283791 14 1815 0 0% 0 0 46.340277
rack (click) 270940 244028 35 580 0 0% 0 0 15.220823
ruby-json (click) 19782 17637 8 204 0 0% 0 0 5.668927
rubyboy (click) 686183 616282 154 6860 42 0% 0 0 173.771195
rubykon (click) 148508 140471 137 2101 3 0% 0 0 57.372007
sudoku (click) 52157 66291 7 871 0 0% 0 0 23.723006
tinygql (click) 296850 282931 59 1025 5 0% 0 0 27.65304
30k_ifelse (click) 6219958 5057296 9259 75432 0 0% 0 0 1945.789173
30k_methods (click) 2234566 1592952 5778 19357 0 0% 0 0 485.218489
attr_accessor (click) 4372 7952 3 78 0 0% 0 0 2.057126
cfunc_itself (click) 5127 4155 4 53 0 0% 0 0 1.479617
fib (click) 2659 2995 3 30 0 0% 0 0 1.05116
getivar (click) 3812 6802 3 78 0 0% 0 0 1.887631
keyword_args (click) 6332 4965 5 56 0 0% 0 0 1.769593
loops-times (click) 6972 8013 5 93 0 0% 0 0 2.758637
object-new (click) 2406 2818 2 36 0 0% 0 0 1.110719
respond_to (click) 6451 6819 4 80 0 0% 0 0 2.13041
ruby-xor (click) 5876 8690 4 100 0 0% 0 0 2.710214
setivar (click) 2783 3726 3 46 0 0% 0 0 1.20315
setivar_object (click) 3402 3956 3 49 0 0% 0 0 1.408105
setivar_young (click) 4300 4867 4 63 0 0% 0 0 1.704345
str_concat (click) 5799 6969 6 82 0 0% 0 0 2.428791
throw (click) 5953 4624 5 53 0 0% 0 0 1.772478

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.