YJIT Benchmarks

Details for Benchmarks at 2025-02-14 03:44:11 UTC

YJIT metrics from the yjit-bench suite using Ruby 41251fdd30.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 91.1% faster than CRuby 3.5.0dev
  • 6.5% faster than YJIT 3.3.6
On railsbench it is
  • 101.7% faster than CRuby 3.5.0dev
  • 9.1% 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 81 5 83 50 154 50 161
chunky-png 5 32 5 31 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 407 5 421 50 574 50 626
liquid-compile 5 408 5 409 50 547 50 561
liquid-render 5 171 5 170 50 408 50 421
lobsters 5 20 5 19 50 10 50 10
mail 5 190 5 191 50 239 50 252
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 252 50 267
ruby-lsp 5 155 5 154 50 250 50 261
sequel 5 419 5 418 50 579 50 598
binarytrees 5 84 5 83 50 149 50 142
blurhash 5 82 5 83 50 127 50 145
erubi 5 114 5 143 50 90 50 152
etanni 5 90 5 99 50 54 50 70
fannkuchredux 5 52 5 55 50 98 50 108
fluentd 5 64 5 63 50 26 50 32
graphql 5 85 5 86 50 57 50 59
graphql-native 5 40 5 52 50 11 50 13
lee 5 22 5 22 50 10 50 10
matmul 5 50 5 53 50 85 50 98
nbody 5 248 5 253 50 577 50 710
nqueens 5 120 5 123 50 75 50 565
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 173 50 620 50 662
protoboeuf-encode 5 179 5 198 50 326 50 824
rack 5 593 5 622 50 949 50 1046
ruby-json 5 84 5 84 50 50 50 51
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 49 50 163 50 169
tinygql 5 36 5 36 50 22 50 29
30k_ifelse 5 28 5 27 50 216 50 207
30k_methods 5 38 5 38 50 472 50 470
cfunc_itself 5 345 5 326 50 1146 50 1251
fib 5 127 5 130 50 909 50 932
getivar 5 207 5 304 50 2230 50 2742
keyword_args 5 107 5 103 50 1042 50 1239
loops-times 5 24 5 24 50 48 50 65
object-new 5 322 5 315 50 403 50 382
respond_to 5 133 5 140 50 3258 50 3980
ruby-xor 5 240 5 244 50 803 50 1380
setivar 5 358 5 557 50 3184 50 5870
setivar_object 5 360 5 453 50 699 50 798
setivar_young 5 365 5 453 50 744 50 813
str_concat 5 400 5 431 50 967 50 1225
throw 5 1263 5 1282 50 1772 50 1654

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) 1452447 1220385 209 2204 0 0% 0 0 67.956668
chunky-png (click) 326829 279230 84 1124 1 0% 0 0 33.006783
erubi-rails (click) 1916303 1645180 259 2982 19 0% 0 0 80.812267
hexapdf (click) 1464479 1209676 595 13143 41 0% 0 0 374.780616
liquid-c (click) 502082 394268 114 1740 5 0% 0 0 49.199939
liquid-compile (click) 431278 336986 146 2093 2 0% 0 0 66.399572
liquid-render (click) 607424 497602 131 2309 8 0% 0 0 64.257304
lobsters (click) 8142497 6797208 3159 52758 104 0% 0 0 1784.771942
mail (click) 761382 646019 342 5318 14 0% 0 0 156.533308
psych-load (click) 250095 226958 61 617 3 0% 0 0 19.141288
railsbench (click) 3235872 2789022 1645 16203 52 0% 0 0 495.285097
rubocop (click) 5671560 4799134 2887 50564 110 0% 4 0 1496.468516
ruby-lsp (click) 805284 668736 305 4734 24 0% 0 0 134.128887
sequel (click) 448381 368314 11 94 0 0% 0 0 3.359909
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.24093
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.160331
erubi (click) 224387 195857 5 97 0 0% 0 0 3.161889
etanni (click) 27173 26329 8 88 0 0% 0 0 2.9615
fannkuchredux (click) 23046 13626 3 249 0 0% 0 0 7.293826
fluentd (click) 388436 326270 7 93 0 0% 0 0 3.106668
graphql (click) 392992 327082 66 676 0 0% 0 0 20.792621
graphql-native (click) 382339 351689 37 255 0 0% 0 0 8.585046
lee (click) 303548 256306 45 750 0 0% 0 0 23.308028
matmul (click) 10657 3512 8 109 0 0% 0 0 3.535741
nbody (click) 13065 17086 6 172 0 0% 0 0 4.421292
nqueens (click) 20163 27348 5 239 0 0% 0 0 6.851193
optcarrot (click) 319096 242804 188 4399 34 0% 0 0 100.328006
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.357271
protoboeuf-encode (click) 221107 212146 14 1220 0 0% 0 0 31.188454
rack (click) 262297 214802 32 385 0 0% 0 0 10.132395
ruby-json (click) 23859 20840 8 178 0 0% 0 0 4.959607
rubyboy (click) 685662 616105 177 5803 40 0% 0 0 145.786996
rubykon (click) 133546 111856 137 1482 3 0% 0 0 42.31084
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.377117
tinygql (click) 281015 256355 58 762 5 0% 0 0 21.78319
30k_ifelse (click) 5658804 5284852 9259 51668 0 0% 0 0 1410.553959
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 453.060982
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.355596
fib (click) 2599 2861 3 26 0 0% 0 0 0.950761
getivar (click) 3501 4713 3 51 0 0% 0 0 1.343251
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.611385
loops-times (click) 6703 7405 5 71 0 0% 0 0 2.262152
object-new (click) 1933 2093 2 22 0 0% 0 0 0.833122
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.734125
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.926642
setivar (click) 2652 3389 3 31 0 0% 0 0 1.006129
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.11757
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.331402
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.01941
throw (click) 5848 4291 5 46 0 0% 0 0 1.587095

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.