YJIT Benchmarks

Details for Benchmarks at 2025-01-27 03:43:27 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 89.6% faster than CRuby 3.5.0dev
  • 6.0% faster than YJIT 3.3.6
On railsbench it is
  • 96.4% faster than CRuby 3.5.0dev
  • 6.7% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 50 minutes
aarch64 runtime: 3 hours, 19 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 84 50 155 50 162
chunky-png 5 32 5 32 50 15 50 34
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 420 5 425 50 590 50 618
liquid-compile 5 412 5 423 50 540 50 561
liquid-render 5 170 5 171 50 407 50 426
lobsters 5 20 5 20 50 10 50 10
mail 5 190 5 193 50 241 50 255
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 156 50 250 50 267
ruby-lsp 5 161 5 159 50 257 50 266
sequel 5 433 5 402 50 570 50 565
binarytrees 5 84 5 79 50 149 50 128
blurhash 5 82 5 82 50 127 50 145
erubi 5 125 5 131 50 99 50 151
etanni 5 90 5 99 50 54 50 72
fannkuchredux 5 52 5 54 50 99 50 106
fluentd 5 64 5 64 50 25 50 29
graphql 5 84 5 84 50 57 50 55
graphql-native 5 49 5 53 50 10 50 14
lee 5 22 5 23 50 10 50 10
matmul 5 51 5 54 50 85 50 98
nbody 5 248 5 251 50 578 50 704
nqueens 5 120 5 123 50 75 50 564
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 172 50 620 50 713
protoboeuf-encode 5 179 5 201 50 327 50 800
rack 5 587 5 637 50 952 50 1050
ruby-json 5 83 5 83 50 50 50 51
rubykon 5 20 5 22 50 10 50 10
sudoku 5 48 5 49 50 164 50 170
tinygql 5 36 5 37 50 22 50 27
30k_ifelse 5 28 5 28 50 215 50 207
30k_methods 5 39 5 38 50 483 50 474
cfunc_itself 5 345 5 337 50 1147 50 1255
fib 5 125 5 133 50 910 50 933
getivar 5 207 5 317 50 2243 50 2764
keyword_args 5 107 5 104 50 1042 50 1240
loops-times 5 24 5 25 50 48 50 64
object-new 5 322 5 280 50 405 50 315
respond_to 5 134 5 140 50 3258 50 3976
ruby-xor 5 240 5 242 50 803 50 1376
setivar 5 358 5 581 50 3195 50 5902
setivar_object 5 354 5 400 50 700 50 720
setivar_young 5 365 5 400 50 743 50 791
str_concat 5 399 5 450 50 966 50 1209
throw 5 1267 5 1135 50 1773 50 1470

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) 1417760 1207405 209 2204 0 0% 0 0 63.789616
chunky-png (click) 305949 271371 84 1124 1 0% 0 0 33.375298
erubi-rails (click) 1908615 1687663 259 2997 19 0% 0 0 84.454176
hexapdf (click) 1447572 1155425 595 13139 39 0% 0 0 377.715867
liquid-c (click) 485708 389696 114 1740 5 0% 0 0 48.650793
liquid-compile (click) 400833 334114 146 2089 2 0% 0 0 65.512633
liquid-render (click) 589515 524761 131 2309 8 0% 0 0 65.331281
lobsters (click) 8108792 6815922 3207 52436 170 0% 0 0 1783.236101
mail (click) 754794 682185 342 5318 14 0% 0 0 153.418385
psych-load (click) 246282 208660 61 617 3 0% 0 0 19.128503
railsbench (click) 3225382 2739970 1645 16193 52 0% 0 0 463.838165
rubocop (click) 5667437 4912817 2887 50569 110 0% 4 0 1500.000341
ruby-lsp (click) 805794 695518 305 4734 24 0% 0 0 132.621644
sequel (click) 449281 383810 11 94 0 0% 0 0 3.363728
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.260788
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.169685
erubi (click) 220366 160959 5 97 0 0% 0 0 3.243929
etanni (click) 27173 26329 8 88 0 0% 0 0 3.027496
fannkuchredux (click) 23046 13626 3 249 0 0% 0 0 7.482316
fluentd (click) 353964 288870 7 93 0 0% 0 0 3.264307
graphql (click) 397199 339097 66 676 0 0% 0 0 20.963555
graphql-native (click) 394545 353697 37 255 0 0% 0 0 8.64639
lee (click) 283070 248808 45 750 0 0% 0 0 23.467815
matmul (click) 10657 3512 8 109 0 0% 0 0 3.603561
nbody (click) 13065 17086 6 172 0 0% 0 0 4.464614
nqueens (click) 20163 27348 5 239 0 0% 0 0 7.068684
optcarrot (click) 319096 242804 188 4399 34 0% 0 0 101.298356
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.64435
protoboeuf-encode (click) 221107 212146 14 1220 0 0% 0 0 31.421015
rack (click) 245331 202042 32 385 0 0% 0 0 10.13754
ruby-json (click) 20461 17978 8 181 0 0% 0 0 5.059314
rubykon (click) 133544 111856 137 1482 3 0% 0 0 42.663805
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.567202
tinygql (click) 278560 229853 58 762 5 0% 0 0 21.472154
30k_ifelse (click) 5658804 5284852 9259 51668 0 0% 0 0 1417.966387
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 451.667851
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.35064
fib (click) 2599 2861 3 26 0 0% 0 0 0.982869
getivar (click) 3501 4713 3 51 0 0% 0 0 1.339233
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.607179
loops-times (click) 6703 7405 5 71 0 0% 0 0 2.244009
object-new (click) 1933 2093 2 22 0 0% 0 0 0.843438
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.754345
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.877167
setivar (click) 2652 3389 3 31 0 0% 0 0 1.032078
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.150055
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.3098
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.058503
throw (click) 5848 4291 5 46 0 0% 0 0 1.656924

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.