YJIT Benchmarks

Details for Benchmarks at 2024-10-27 03:46:03 UTC

YJIT metrics from the yjit-bench suite using Ruby 484ea00d2e

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 89.7% faster than CRuby 3.4.0dev
  • 3.9% faster than YJIT 3.3.4
On railsbench it is
  • 99.6% faster than CRuby 3.4.0dev
  • 4.6% faster than YJIT 3.3.4

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.4 warmups CRuby 3.3.4 iters CRuby 3.4.0dev warmups CRuby 3.4.0dev iters YJIT 3.3.4 warmups YJIT 3.3.4 iters YJIT 3.4.0dev warmups YJIT 3.4.0dev iters
activerecord 5 84 5 81 50 155 50 158
chunky-png 5 31 5 31 50 15 50 20
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 415 5 417 50 593 50 607
liquid-compile 5 413 5 405 50 548 50 588
liquid-render 5 168 5 162 50 404 50 417
lobsters 5 20 5 20 50 10 50 10
mail 5 189 5 182 50 251 50 233
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 156 50 253 50 266
ruby-lsp 5 155 5 156 50 235 50 259
sequel 5 417 5 418 50 598 50 581
binarytrees 5 84 5 83 50 148 50 148
blurhash 5 82 5 84 50 128 50 145
erubi 5 73 5 141 50 50 50 121
etanni 5 90 5 97 50 52 50 59
fannkuchredux 5 52 5 54 50 100 50 108
fluentd 5 61 5 61 50 23 50 31
graphql 5 86 5 85 50 57 50 56
graphql-native 5 39 5 51 50 10 50 13
lee 5 23 5 23 50 10 50 10
matmul 5 52 5 52 50 88 50 99
nbody 5 248 5 260 50 595 50 706
nqueens 5 119 5 121 50 74 50 562
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 171 5 173 50 617 50 677
protoboeuf-encode 5 179 5 173 50 327 50 793
rack 5 580 5 614 50 959 50 1040
ruby-json 5 85 5 83 50 50 50 48
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 49 50 163 50 159
tinygql 5 36 5 37 50 24 50 25
30k_ifelse 5 28 5 28 50 214 50 194
30k_methods 5 39 5 38 50 482 50 478
cfunc_itself 5 347 5 345 50 1046 50 1136
fib 5 127 5 127 50 900 50 962
getivar 5 206 5 216 50 2270 50 2621
keyword_args 5 108 5 103 50 959 50 1231
object-new 5 321 5 271 50 406 50 310
respond_to 5 137 5 140 50 3258 50 4037
ruby-xor 5 242 5 237 50 803 50 1376
setivar 5 360 5 356 50 3124 50 5718
setivar_object 5 372 5 347 50 762 50 787
setivar_young 5 371 5 344 50 771 50 844
str_concat 5 398 5 409 50 989 50 1159
throw 5 1267 5 1160 50 1730 50 1421

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) 1451239 1259642 213 2296 0 0% 0 0 64.507258
chunky-png (click) 301387 274519 86 1133 1 0% 0 0 33.197917
erubi-rails (click) 1948017 1661951 248 2909 8 0% 0 0 79.059424
hexapdf (click) 1497640 1254343 598 13865 35 0% 0 0 393.446514
liquid-c (click) 492117 382289 122 1906 5 0% 0 0 52.18047
liquid-compile (click) 414627 347008 150 2206 2 0% 0 0 68.523634
liquid-render (click) 608428 550906 139 2520 12 0% 0 0 69.658441
lobsters (click) 8309880 6908447 3212 54228 181 0% 0 0 1854.698968
mail (click) 753400 661177 346 5481 16 0% 0 0 160.11086
psych-load (click) 262490 223714 64 656 3 0% 0 0 20.389428
railsbench (click) 3324139 2910491 1635 16737 41 0% 0 0 474.967963
rubocop (click) 5808486 4936202 2891 52121 110 0% 4 0 1513.708543
ruby-lsp (click) 843474 709230 308 4986 26 0% 0 0 141.922015
sequel (click) 459461 426459 15 125 0 0% 0 0 4.380811
binarytrees (click) 9627 8546 8 75 0 0% 0 0 2.999755
blurhash (click) 57136 49713 29 501 0 0% 0 0 16.124008
erubi (click) 221372 209901 9 108 0 0% 0 0 3.605239
etanni (click) 27632 25855 9 81 0 0% 0 0 2.742842
fannkuchredux (click) 24038 30826 5 257 0 0% 0 0 7.684338
fluentd (click) 353068 309570 10 109 0 0% 0 0 3.887009
graphql (click) 396123 327710 69 695 0 0% 0 0 20.651151
graphql-native (click) 357174 296881 40 270 0 0% 0 0 8.404484
lee (click) 275932 234728 48 803 0 0% 0 0 24.89182
matmul (click) 11838 4563 10 119 0 0% 0 0 3.934437
nbody (click) 14884 19325 8 196 0 0% 0 0 5.104254
nqueens (click) 21155 28164 7 247 0 0% 0 0 7.254148
optcarrot (click) 327944 312320 190 4549 34 0% 0 0 104.126384
protoboeuf (click) 163392 155036 14 1610 0 0% 0 0 45.902151
protoboeuf-encode (click) 234584 230620 16 1249 0 0% 0 0 31.887067
rack (click) 229070 194160 36 417 0 0% 0 0 10.847511
ruby-json (click) 25799 22401 10 188 0 0% 0 0 5.322362
rubykon (click) 140693 120664 138 1568 3 0% 0 0 44.772045
sudoku (click) 48090 43120 9 536 0 0% 0 0 16.000759
tinygql (click) 268310 203241 61 787 5 0% 0 0 22.11603
30k_ifelse (click) 6315665 5791705 9261 56473 0 0% 0 0 1584.359894
30k_methods (click) 2235566 1593704 5780 19359 0 0% 0 0 455.62572
cfunc_itself (click) 6912 5554 7 62 0 0% 0 0 1.968527
fib (click) 4041 4120 5 37 0 0% 0 0 1.43797
getivar (click) 5037 6014 6 64 0 0% 0 0 1.890267
keyword_args (click) 7637 6022 7 60 0 0% 0 0 2.015518
object-new (click) 3469 3394 5 35 0 0% 0 0 1.351968
respond_to (click) 9322 2039 6 95 0 0% 0 0 2.759504
ruby-xor (click) 6437 6880 6 72 0 0% 0 0 2.230222
setivar (click) 4188 4690 6 44 0 0% 0 0 1.525888
setivar_object (click) 4717 4838 6 46 0 0% 0 0 1.682068
setivar_young (click) 5427 5560 7 54 0 0% 0 0 1.875398
str_concat (click) 7646 7893 9 81 0 0% 0 0 2.752949
throw (click) 7384 5592 8 59 0 0% 0 0 2.259617

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.