YJIT Benchmarks

Details for Benchmarks at 2025-02-05 03:44:08 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 91.0% faster than CRuby 3.5.0dev
  • 4.8% faster than YJIT 3.3.6
On railsbench it is
  • 100.7% faster than CRuby 3.5.0dev
  • 7.7% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 50 minutes
aarch64 runtime: 3 hours, 20 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 82 5 82 50 154 50 167
chunky-png 5 31 5 32 50 14 50 33
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 419 5 427 50 591 50 636
liquid-compile 5 411 5 407 50 578 50 558
liquid-render 5 168 5 164 50 404 50 428
lobsters 5 20 5 20 50 10 50 10
mail 5 194 5 186 50 251 50 236
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 154 50 249 50 267
ruby-lsp 5 161 5 156 50 247 50 247
sequel 5 432 5 421 50 600 50 586
binarytrees 5 84 5 80 50 149 50 127
blurhash 5 82 5 79 50 127 50 145
erubi 5 125 5 150 50 99 50 151
etanni 5 90 5 99 50 54 50 72
fannkuchredux 5 48 5 55 50 98 50 105
fluentd 5 64 5 58 50 25 50 29
graphql 5 85 5 84 50 57 50 55
graphql-native 5 40 5 52 50 10 50 14
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 53 50 85 50 99
nbody 5 247 5 250 50 577 50 701
nqueens 5 120 5 122 50 75 50 564
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 174 50 620 50 726
protoboeuf-encode 5 179 5 197 50 329 50 798
rack 5 584 5 626 50 954 50 1063
ruby-json 5 84 5 85 50 49 50 50
rubykon 5 20 5 21 50 10 50 10
sudoku 5 48 5 49 50 164 50 170
tinygql 5 35 5 38 50 23 50 28
30k_ifelse 5 28 5 28 50 215 50 206
30k_methods 5 39 5 38 50 483 50 474
cfunc_itself 5 346 5 322 50 1147 50 1255
fib 5 127 5 129 50 910 50 932
getivar 5 207 5 315 50 2242 50 2747
keyword_args 5 107 5 104 50 1042 50 1240
loops-times 5 24 5 25 50 48 50 65
object-new 5 323 5 280 50 405 50 307
respond_to 5 133 5 137 50 3244 50 3978
ruby-xor 5 220 5 231 50 802 50 1338
setivar 5 358 5 561 50 3189 50 5887
setivar_object 5 355 5 393 50 699 50 766
setivar_young 5 365 5 400 50 743 50 787
str_concat 5 397 5 418 50 967 50 1215
throw 5 1268 5 1140 50 1778 50 1459

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) 1453693 1155534 209 2204 0 0% 0 0 63.962484
chunky-png (click) 324519 252549 84 1124 1 0% 0 0 32.99341
erubi-rails (click) 1893377 1609766 260 2988 19 0% 0 0 81.78542
hexapdf (click) 1444568 1191596 595 13143 41 0% 0 0 379.328433
liquid-c (click) 477193 437438 114 1743 5 0% 0 0 48.088241
liquid-compile (click) 401235 317907 146 2083 2 0% 0 0 65.298686
liquid-render (click) 593225 486305 131 2309 8 0% 0 0 63.989375
lobsters (click) 8115234 6826540 3205 52460 169 0% 0 0 1792.705684
mail (click) 723445 655160 342 5318 14 0% 0 0 153.194883
psych-load (click) 248298 208587 61 617 3 0% 0 0 19.46269
railsbench (click) 3245920 2882522 1645 16275 52 0% 0 0 464.39687
rubocop (click) 5667031 4820839 2887 50557 110 0% 4 0 1488.357473
ruby-lsp (click) 846891 723423 305 4732 24 0% 0 0 133.603749
sequel (click) 442990 363592 11 94 0 0% 0 0 3.344531
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.242211
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.112345
erubi (click) 248679 201684 5 97 0 0% 0 0 3.265926
etanni (click) 27173 26329 8 88 0 0% 0 0 2.980571
fannkuchredux (click) 23046 13626 3 249 0 0% 0 0 7.485642
fluentd (click) 388241 334092 7 93 0 0% 0 0 3.192818
graphql (click) 411876 386690 66 676 0 0% 0 0 21.330387
graphql-native (click) 388465 332940 37 255 0 0% 0 0 8.537538
lee (click) 285712 258793 45 750 0 0% 0 0 23.323862
matmul (click) 10657 3512 8 109 0 0% 0 0 3.522505
nbody (click) 13065 17086 6 172 0 0% 0 0 4.444985
nqueens (click) 20163 27348 5 239 0 0% 0 0 7.025492
optcarrot (click) 319096 242804 188 4399 34 0% 0 0 101.349708
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.500623
protoboeuf-encode (click) 221107 212146 14 1220 0 0% 0 0 31.106999
rack (click) 241104 204437 32 385 0 0% 0 0 9.841738
ruby-json (click) 20461 17978 8 181 0 0% 0 0 5.091685
rubykon (click) 134065 128972 137 1489 3 0% 0 0 42.771099
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.31487
tinygql (click) 268028 218093 58 762 5 0% 0 0 21.797073
30k_ifelse (click) 5658804 5284852 9259 51668 0 0% 0 0 1410.589574
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 448.588487
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.352857
fib (click) 2599 2861 3 26 0 0% 0 0 1.013647
getivar (click) 3501 4713 3 51 0 0% 0 0 1.349069
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.623042
loops-times (click) 6703 7405 5 71 0 0% 0 0 2.358948
object-new (click) 1933 2093 2 22 0 0% 0 0 0.802853
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.755956
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.895138
setivar (click) 2652 3389 3 31 0 0% 0 0 1.027652
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.129653
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.340657
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.081723
throw (click) 5848 4291 5 46 0 0% 0 0 1.615545

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.