YJIT Benchmarks

Details for Benchmarks at 2024-10-26 03:44:06 UTC

YJIT metrics from the yjit-bench suite using Ruby 9838c443c4

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 90.1% faster than CRuby 3.4.0dev
  • 4.7% faster than YJIT 3.3.4
On railsbench it is
  • 102.9% faster than CRuby 3.4.0dev
  • 3.0% 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 82 50 159 50 158
chunky-png 5 31 5 31 50 14 50 20
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 410 5 420 50 595 50 630
liquid-compile 5 411 5 403 50 539 50 584
liquid-render 5 169 5 167 50 402 50 426
lobsters 5 20 5 20 50 10 50 10
mail 5 195 5 190 50 238 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 154 50 251 50 268
ruby-lsp 5 157 5 158 50 241 50 263
sequel 5 430 5 420 50 596 50 569
binarytrees 5 84 5 83 50 146 50 148
blurhash 5 82 5 84 50 128 50 145
erubi 5 114 5 142 50 69 50 121
etanni 5 90 5 97 50 52 50 60
fannkuchredux 5 52 5 54 50 101 50 108
fluentd 5 61 5 60 50 22 50 32
graphql 5 85 5 84 50 56 50 55
graphql-native 5 39 5 51 50 10 50 13
lee 5 23 5 23 50 10 50 10
matmul 5 51 5 52 50 88 50 99
nbody 5 249 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 174 5 172 50 616 50 678
protoboeuf-encode 5 179 5 193 50 325 50 790
rack 5 581 5 615 50 965 50 1068
ruby-json 5 84 5 83 50 51 50 49
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 163 50 159
tinygql 5 36 5 37 50 24 50 26
30k_ifelse 5 28 5 28 50 214 50 192
30k_methods 5 38 5 38 50 476 50 477
cfunc_itself 5 347 5 344 50 1046 50 1136
fib 5 127 5 126 50 900 50 962
getivar 5 206 5 215 50 2272 50 2620
keyword_args 5 108 5 103 50 959 50 1231
object-new 5 321 5 272 50 407 50 310
respond_to 5 137 5 139 50 3257 50 4035
ruby-xor 5 242 5 237 50 803 50 1375
setivar 5 360 5 356 50 3126 50 5718
setivar_object 5 372 5 350 50 764 50 844
setivar_young 5 372 5 344 50 771 50 845
str_concat 5 399 5 409 50 990 50 1157
throw 5 1263 5 1167 50 1723 50 1415

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) 1464970 1254343 213 2296 0 0% 0 0 65.349689
chunky-png (click) 298815 296092 86 1133 1 0% 0 0 33.325886
erubi-rails (click) 1947859 1636379 248 2886 8 0% 0 0 77.719163
hexapdf (click) 1507870 1369141 598 13856 39 0% 0 0 391.69086
liquid-c (click) 491324 382600 122 1906 5 0% 0 0 52.405578
liquid-compile (click) 430680 355775 150 2205 2 0% 0 0 67.133666
liquid-render (click) 624239 510599 139 2520 12 0% 0 0 69.386312
lobsters (click) 8305000 7002447 3213 54268 181 0% 0 0 1828.528685
mail (click) 775133 704705 346 5481 16 0% 0 0 156.667063
psych-load (click) 283036 239788 64 656 3 0% 0 0 20.746621
railsbench (click) 3301671 2824989 1635 16735 41 0% 0 0 474.25134
rubocop (click) 5824678 4970286 2891 52169 110 0% 4 0 1524.969059
ruby-lsp (click) 852115 727608 308 4990 26 0% 0 0 139.059254
sequel (click) 493695 430856 15 125 0 0% 0 0 4.882629
binarytrees (click) 9627 8546 8 75 0 0% 0 0 3.024944
blurhash (click) 57136 49713 29 501 0 0% 0 0 16.174715
erubi (click) 240495 210499 9 108 0 0% 0 0 3.624727
etanni (click) 27697 25886 9 81 0 0% 0 0 2.738881
fannkuchredux (click) 24038 30826 5 257 0 0% 0 0 7.724538
fluentd (click) 364499 294384 10 109 0 0% 0 0 3.839194
graphql (click) 413274 337862 69 695 0 0% 0 0 20.461025
graphql-native (click) 358474 297853 40 270 0 0% 0 0 8.440356
lee (click) 294769 251440 48 803 0 0% 0 0 24.629977
matmul (click) 11838 4563 10 119 0 0% 0 0 3.959629
nbody (click) 14884 19325 8 196 0 0% 0 0 5.062413
nqueens (click) 21155 28164 7 247 0 0% 0 0 7.229613
optcarrot (click) 327944 312320 190 4549 34 0% 0 0 104.234677
protoboeuf (click) 163392 155036 14 1610 0 0% 0 0 45.899112
protoboeuf-encode (click) 234584 230620 16 1249 0 0% 0 0 32.013765
rack (click) 237601 200170 36 417 0 0% 0 0 10.901218
ruby-json (click) 27105 23915 10 189 0 0% 0 0 5.442633
rubykon (click) 141931 138312 138 1580 3 0% 0 0 44.857215
sudoku (click) 48090 43120 9 536 0 0% 0 0 15.932799
tinygql (click) 287544 261386 61 787 5 0% 0 0 22.224803
30k_ifelse (click) 6315665 5791705 9261 56473 0 0% 0 0 1578.461369
30k_methods (click) 2235566 1593704 5780 19359 0 0% 0 0 455.288776
cfunc_itself (click) 6912 5554 7 62 0 0% 0 0 1.960572
fib (click) 4041 4120 5 37 0 0% 0 0 1.430389
getivar (click) 5037 6014 6 64 0 0% 0 0 1.8897
keyword_args (click) 7637 6022 7 60 0 0% 0 0 2.03803
object-new (click) 3469 3394 5 35 0 0% 0 0 1.368936
respond_to (click) 9322 2039 6 95 0 0% 0 0 2.73774
ruby-xor (click) 6437 6880 6 72 0 0% 0 0 2.350864
setivar (click) 4188 4690 6 44 0 0% 0 0 1.574901
setivar_object (click) 4717 4838 6 46 0 0% 0 0 1.700401
setivar_young (click) 5427 5560 7 54 0 0% 0 0 1.891697
str_concat (click) 7646 7893 9 81 0 0% 0 0 2.748296
throw (click) 7384 5592 8 59 0 0% 0 0 2.164921

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.