YJIT Benchmarks

Details for Benchmarks at 2025-02-19 03:45:56 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 87.3% faster than CRuby 3.5.0dev
  • 6.3% faster than YJIT 3.3.6
On railsbench it is
  • 93.5% faster than CRuby 3.5.0dev
  • 3.6% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 19 minutes
aarch64 runtime: 3 hours, 43 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 156 50 168
chunky-png 5 31 5 34 50 15 50 35
erubi-rails 5 16 5 16 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 422 5 428 50 569 50 630
liquid-compile 5 424 5 416 50 541 50 563
liquid-render 5 171 5 175 50 403 50 433
lobsters 5 20 5 20 50 10 50 10
mail 5 196 5 198 50 252 50 254
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 161 50 252 50 269
ruby-lsp 5 145 5 162 50 249 50 262
sequel 5 433 5 426 50 598 50 589
binarytrees 5 84 5 85 50 149 50 142
blurhash 5 82 5 86 50 127 50 145
erubi 5 124 5 144 50 97 50 147
etanni 5 90 5 100 50 54 50 72
fannkuchredux 5 52 5 59 50 93 50 111
fluentd 5 63 5 63 50 25 50 30
graphql 5 85 5 85 50 57 50 56
graphql-native 5 40 5 53 50 10 50 15
lee 5 23 5 23 50 10 50 10
matmul 5 50 5 53 50 85 50 96
nbody 5 248 5 286 50 578 50 709
nqueens 5 120 5 127 50 75 50 567
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 183 50 621 50 652
protoboeuf-encode 5 180 5 208 50 327 50 816
rack 5 588 5 636 50 953 50 1060
ruby-json 5 84 5 84 50 50 50 50
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 159
tinygql 5 36 5 37 50 23 50 26
30k_ifelse 5 28 5 28 50 216 50 207
30k_methods 5 39 5 38 50 479 50 475
cfunc_itself 5 346 5 354 50 1147 50 1258
fib 5 127 5 124 50 908 50 933
getivar 5 207 5 297 50 2243 50 2740
keyword_args 5 107 5 110 50 1042 50 1244
loops-times 5 24 5 27 50 48 50 65
object-new 5 323 5 328 50 405 50 387
respond_to 5 133 5 141 50 3258 50 3981
ruby-xor 5 241 5 251 50 803 50 1380
setivar 5 358 5 651 50 3185 50 5932
setivar_object 5 355 5 480 50 712 50 755
setivar_young 5 369 5 480 50 743 50 812
str_concat 5 397 5 497 50 969 50 1222
throw 5 1266 5 1270 50 1775 50 1708

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) 1452040 1211926 209 2204 0 0% 0 0 67.74719
chunky-png (click) 322656 259338 84 1124 1 0% 0 0 32.874307
erubi-rails (click) 1911610 1675235 259 2967 19 0% 0 0 81.288031
hexapdf (click) 1461973 1290039 595 13143 42 0% 0 0 374.400134
liquid-c (click) 479502 440042 114 1743 5 0% 0 0 48.285133
liquid-compile (click) 405377 321708 146 2065 2 0% 0 0 62.754454
liquid-render (click) 607017 513657 131 2309 8 0% 0 0 64.20332
lobsters (click) 8148104 6815679 3157 52876 104 0% 0 0 1867.582154
mail (click) 760975 645722 342 5318 14 0% 0 0 156.759683
psych-load (click) 248141 233324 61 617 3 0% 0 0 19.161367
railsbench (click) 3258320 2694754 1645 16240 52 0% 0 0 469.255991
rubocop (click) 5687933 4831411 2887 50559 110 0% 4 0 1476.357647
ruby-lsp (click) 808703 712578 305 4735 24 0% 0 0 134.024915
sequel (click) 474239 398954 11 94 0 0% 0 0 3.761914
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.23305
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.068324
erubi (click) 251068 211723 5 97 0 0% 0 0 3.206319
etanni (click) 27173 26329 8 88 0 0% 0 0 2.951567
fannkuchredux (click) 23046 13626 3 249 0 0% 0 0 7.331727
fluentd (click) 358125 293704 7 93 0 0% 0 0 3.289534
graphql (click) 395789 362444 66 676 0 0% 0 0 20.724504
graphql-native (click) 361895 316653 37 255 0 0% 0 0 8.578045
lee (click) 278588 234885 45 750 0 0% 0 0 23.422552
matmul (click) 10657 3512 8 109 0 0% 0 0 3.560529
nbody (click) 13065 17086 6 172 0 0% 0 0 4.404539
nqueens (click) 20163 27348 5 239 0 0% 0 0 6.909541
optcarrot (click) 319096 242804 188 4399 34 0% 0 0 101.325057
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.072885
protoboeuf-encode (click) 221107 212146 14 1220 0 0% 0 0 31.178358
rack (click) 262290 206610 32 385 0 0% 0 0 10.217452
ruby-json (click) 23859 20840 8 178 0 0% 0 0 5.036185
rubyboy (click) 685662 616105 177 5803 40 0% 0 0 145.055543
rubykon (click) 133546 111856 137 1482 3 0% 0 0 42.613744
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.544739
tinygql (click) 294605 250524 58 762 5 0% 0 0 21.82146
30k_ifelse (click) 5658804 5284852 9259 51668 0 0% 0 0 1406.57511
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 452.533094
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.340586
fib (click) 2599 2861 3 26 0 0% 0 0 0.985254
getivar (click) 3501 4713 3 51 0 0% 0 0 1.33638
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.626746
loops-times (click) 6703 7405 5 71 0 0% 0 0 2.287683
object-new (click) 1933 2093 2 22 0 0% 0 0 0.869912
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.75139
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.95792
setivar (click) 2652 3389 3 31 0 0% 0 0 0.987187
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.1232
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.320735
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.034408
throw (click) 5848 4291 5 46 0 0% 0 0 1.608017

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.