YJIT Benchmarks

Details for Benchmarks at 2025-02-22 03:43:27 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 88.0% faster than CRuby 3.5.0dev
  • 6.1% faster than YJIT 3.3.6
On railsbench it is
  • 105.5% faster than CRuby 3.5.0dev
  • 6.4% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 19 minutes
aarch64 runtime: 3 hours, 40 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 158 50 168
chunky-png 5 32 5 34 50 15 50 34
erubi-rails 5 16 5 16 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 429 50 592 50 630
liquid-compile 5 409 5 427 50 540 50 557
liquid-render 5 171 5 174 50 404 50 411
lobsters 5 20 5 20 50 10 50 10
mail 5 195 5 197 50 251 50 251
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 159 50 248 50 263
ruby-lsp 5 159 5 154 50 246 50 263
sequel 5 433 5 424 50 598 50 590
binarytrees 5 84 5 85 50 149 50 142
blurhash 5 82 5 87 50 127 50 145
erubi 5 125 5 136 50 86 50 150
etanni 5 90 5 101 50 54 50 70
fannkuchredux 5 52 5 59 50 99 50 110
fluentd 5 63 5 64 50 25 50 31
graphql 5 85 5 87 50 56 50 58
graphql-native 5 40 5 52 50 10 50 15
lee 5 22 5 23 50 10 50 10
matmul 5 51 5 53 50 85 50 95
nbody 5 248 5 286 50 578 50 707
nqueens 5 120 5 130 50 75 50 567
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 184 50 620 50 653
protoboeuf-encode 5 179 5 209 50 329 50 832
rack 5 573 5 632 50 947 50 1063
ruby-json 5 84 5 84 50 50 50 51
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 22 50 10 50 10
sudoku 5 48 5 51 50 164 50 160
tinygql 5 36 5 37 50 22 50 29
30k_ifelse 5 28 5 28 50 216 50 206
30k_methods 5 38 5 38 50 482 50 478
cfunc_itself 5 352 5 352 50 1147 50 1258
fib 5 127 5 122 50 910 50 933
getivar 5 207 5 336 50 2246 50 2781
keyword_args 5 107 5 109 50 1042 50 1243
loops-times 5 24 5 27 50 48 50 64
object-new 5 322 5 314 50 404 50 345
respond_to 5 133 5 141 50 3258 50 3982
ruby-xor 5 240 5 260 50 804 50 1380
setivar 5 360 5 653 50 3186 50 5937
setivar_object 5 354 5 481 50 701 50 816
setivar_young 5 366 5 481 50 742 50 821
str_concat 5 397 5 453 50 969 50 1220
throw 5 1262 5 1271 50 1772 50 1685

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) 1427835 1175332 209 2204 0 0% 0 0 64.467812
chunky-png (click) 303064 250627 84 1124 1 0% 0 0 33.396043
erubi-rails (click) 1916500 1645202 259 2935 19 0% 0 0 80.38131
hexapdf (click) 1445214 1225118 595 13143 42 0% 0 0 375.805907
liquid-c (click) 473552 409845 114 1743 5 0% 0 0 47.989391
liquid-compile (click) 405322 322472 146 2066 2 0% 0 0 62.675347
liquid-render (click) 585344 437390 131 2309 8 0% 0 0 64.026136
lobsters (click) 8138867 6863623 3158 52813 104 0% 0 0 1806.490763
mail (click) 731185 635661 342 5318 14 0% 0 0 152.215062
psych-load (click) 242053 204139 61 617 3 0% 0 0 19.172277
railsbench (click) 3236572 2773605 1645 16226 52 0% 0 0 475.053198
rubocop (click) 5670782 4858007 2887 50532 110 0% 4 0 1472.723237
ruby-lsp (click) 810701 726597 305 4730 24 0% 0 0 133.714553
sequel (click) 454172 373129 11 94 0 0% 0 0 3.731119
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.235042
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.213386
erubi (click) 219850 169766 5 97 0 0% 0 0 3.178672
etanni (click) 27173 26329 8 88 0 0% 0 0 2.972336
fannkuchredux (click) 23046 13626 3 249 0 0% 0 0 7.264022
fluentd (click) 361449 280406 7 93 0 0% 0 0 3.295922
graphql (click) 404465 346074 66 676 0 0% 0 0 20.959398
graphql-native (click) 365575 346630 37 255 0 0% 0 0 8.022895
lee (click) 297144 243260 45 750 0 0% 0 0 23.210217
matmul (click) 10657 3512 8 109 0 0% 0 0 3.590509
nbody (click) 13065 17086 6 172 0 0% 0 0 4.318654
nqueens (click) 20163 27348 5 239 0 0% 0 0 6.80829
optcarrot (click) 319096 242804 188 4399 34 0% 0 0 101.407436
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.213157
protoboeuf-encode (click) 221107 212146 14 1220 0 0% 0 0 30.85713
rack (click) 244215 225790 32 385 0 0% 0 0 10.014902
ruby-json (click) 20126 17605 9 184 0 0% 0 0 5.309683
rubyboy (click) 663319 605371 177 5803 40 0% 0 0 143.44428
rubykon (click) 133546 111856 137 1482 3 0% 0 0 42.457555
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.394413
tinygql (click) 274952 241567 58 762 5 0% 0 0 21.665109
30k_ifelse (click) 5658804 5284852 9259 51668 0 0% 0 0 1400.388259
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 447.769779
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.332237
fib (click) 2599 2861 3 26 0 0% 0 0 0.987126
getivar (click) 3501 4713 3 51 0 0% 0 0 1.356817
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.61983
loops-times (click) 6703 7405 5 71 0 0% 0 0 2.285447
object-new (click) 1933 2093 2 22 0 0% 0 0 0.845907
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.733912
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.94264
setivar (click) 2652 3389 3 31 0 0% 0 0 1.003786
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.139447
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.296502
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.0002
throw (click) 5848 4291 5 46 0 0% 0 0 1.597254

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.