YJIT Benchmarks

Details for Benchmarks at 2024-12-28 03:43:31 UTC

YJIT metrics from the yjit-bench suite using Ruby 0ccc7657f3.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 89.8% faster than CRuby 3.5.0dev
  • 4.6% faster than YJIT 3.3.6
On railsbench it is
  • 100.7% faster than CRuby 3.5.0dev
  • 4.4% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 51 minutes
aarch64 runtime: 3 hours, 21 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 84 5 82 50 157 50 159
chunky-png 5 31 5 32 50 15 50 33
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 422 5 425 50 593 50 626
liquid-compile 5 409 5 407 50 575 50 551
liquid-render 5 171 5 168 50 404 50 435
lobsters 5 20 5 20 50 10 50 10
mail 5 195 5 185 50 238 50 209
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 155 50 251 50 265
ruby-lsp 5 145 5 156 50 243 50 273
sequel 5 427 5 417 50 575 50 584
binarytrees 5 84 5 82 50 144 50 139
blurhash 5 82 5 81 50 127 50 145
erubi 5 90 5 141 50 88 50 150
etanni 5 91 5 97 50 54 50 72
fannkuchredux 5 52 5 55 50 101 50 103
fluentd 5 63 5 60 50 26 50 26
graphql 5 84 5 85 50 57 50 56
graphql-native 5 40 5 53 50 10 50 14
lee 5 23 5 23 50 10 50 10
loops-times 5 24 5 23 50 47 50 65
matmul 5 51 5 51 50 85 50 98
nbody 5 248 5 258 50 577 50 703
nqueens 5 120 5 120 50 74 50 565
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 172 5 173 50 620 50 719
protoboeuf-encode 5 180 5 177 50 326 50 827
rack 5 584 5 625 50 951 50 1039
ruby-json 5 83 5 85 50 49 50 51
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 164 50 160
tinygql 5 36 5 37 50 22 50 28
30k_ifelse 5 28 5 28 50 215 50 204
30k_methods 5 38 5 38 50 483 50 475
cfunc_itself 5 346 5 315 50 1046 50 1145
fib 5 127 5 127 50 909 50 937
getivar 5 207 5 218 50 2259 50 2629
keyword_args 5 107 5 104 50 959 50 1134
object-new 5 321 5 310 50 404 50 378
respond_to 5 133 5 141 50 3259 50 3982
ruby-xor 5 240 5 244 50 803 50 1382
setivar 5 358 5 358 50 3126 50 5711
setivar_object 5 374 5 341 50 746 50 852
setivar_young 5 374 5 352 50 770 50 849
str_concat 5 401 5 394 50 969 50 1199
throw 5 1261 5 1266 50 1734 50 1702

Different Ruby configurations want different amounts of warmup. With no JIT, CRuby needs hardly any. YJIT and MJIT 3.0 both warm up quite quickly, while MJIT in 3.1 often slows down for a time as it compiles, after an unpredictable delay.

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) 1410499 1168185 210 2207 0 0% 0 0 64.186172
chunky-png (click) 326001 303855 85 1132 1 0% 0 0 33.426644
erubi-rails (click) 1892333 1536439 259 2984 19 0% 0 0 81.451763
hexapdf (click) 1434211 1217134 596 13141 37 0% 0 0 379.275723
liquid-c (click) 506397 431268 115 1750 5 0% 0 0 50.088035
liquid-compile (click) 404299 375524 147 2084 2 0% 0 0 64.40973
liquid-render (click) 586206 446476 132 2315 8 0% 0 0 65.528134
lobsters (click) 8098038 6810022 3212 52376 170 0% 0 0 1788.241549
mail (click) 762857 688984 343 5321 14 0% 0 0 153.727322
psych-load (click) 244001 191022 62 618 3 0% 0 0 19.240188
railsbench (click) 3223414 2806031 1642 16192 52 0% 0 0 467.438669
rubocop (click) 5694824 4910978 2888 50565 110 0% 4 0 1563.555236
ruby-lsp (click) 835067 706567 306 4737 24 0% 0 0 134.046864
sequel (click) 480010 395519 12 97 0 0% 0 0 3.693296
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.402877
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.355685
erubi (click) 254576 223188 6 100 0 0% 0 0 3.306849
etanni (click) 31129 29637 8 87 0 0% 0 0 2.957197
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.463954
fluentd (click) 365965 337094 8 96 0 0% 0 0 3.25843
graphql (click) 428420 367582 67 679 0 0% 0 0 21.071055
graphql-native (click) 372964 328872 38 258 0 0% 0 0 8.593182
lee (click) 295513 233649 46 749 0 0% 0 0 23.497571
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.375309
matmul (click) 10988 3769 9 112 0 0% 0 0 3.68123
nbody (click) 13396 17343 7 175 0 0% 0 0 4.559467
nqueens (click) 20494 27605 6 242 0 0% 0 0 7.01518
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 102.970068
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 41.961048
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.178432
rack (click) 264929 225769 33 388 0 0% 0 0 10.208776
ruby-json (click) 25870 22931 9 181 0 0% 0 0 5.120156
rubykon (click) 134396 137392 138 1492 3 0% 0 0 43.09277
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.466091
tinygql (click) 257442 219272 59 765 5 0% 0 0 21.709837
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1416.391548
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 455.375195
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.530526
fib (click) 2930 3118 4 29 0 0% 0 0 1.109944
getivar (click) 3832 4970 4 54 0 0% 0 0 1.481906
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.787188
object-new (click) 2264 2350 3 25 0 0% 0 0 0.840267
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.867884
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 2.015778
setivar (click) 2983 3646 4 34 0 0% 0 0 1.093155
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.22461
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.476377
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.120689
throw (click) 6179 4548 6 49 0 0% 0 0 1.691154

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.