YJIT Benchmarks

Details for Benchmarks at 2024-10-29 03:45:47 UTC

YJIT metrics from the yjit-bench suite using Ruby 3c9be02af1

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 89.9% faster than CRuby 3.4.0dev
  • 3.7% faster than YJIT 3.3.4
On railsbench it is
  • 101.9% faster than CRuby 3.4.0dev
  • 8.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 81 5 80 50 157 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 424 5 420 50 578 50 622
liquid-compile 5 411 5 406 50 542 50 559
liquid-render 5 170 5 167 50 404 50 429
lobsters 5 20 5 20 50 10 50 10
mail 5 189 5 177 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 156 5 155 50 250 50 265
ruby-lsp 5 158 5 151 50 248 50 248
sequel 5 429 5 417 50 579 50 582
binarytrees 5 84 5 83 50 146 50 148
blurhash 5 82 5 83 50 128 50 145
erubi 5 113 5 77 50 28 50 123
etanni 5 90 5 97 50 52 50 60
fannkuchredux 5 52 5 55 50 101 50 108
fluentd 5 61 5 67 50 22 50 23
graphql 5 85 5 85 50 57 50 58
graphql-native 5 39 5 53 50 10 50 14
lee 5 23 5 23 50 10 50 10
matmul 5 51 5 53 50 88 50 99
nbody 5 248 5 259 50 595 50 705
nqueens 5 119 5 121 50 74 50 563
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 173 5 172 50 616 50 677
protoboeuf-encode 5 179 5 194 50 329 50 791
rack 5 589 5 625 50 960 50 1067
ruby-json 5 84 5 82 50 50 50 48
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 49 50 163 50 161
tinygql 5 37 5 37 50 24 50 26
30k_ifelse 5 28 5 28 50 214 50 194
30k_methods 5 38 5 38 50 482 50 476
cfunc_itself 5 346 5 344 50 1046 50 1136
fib 5 125 5 127 50 900 50 962
getivar 5 206 5 216 50 2269 50 2621
keyword_args 5 108 5 103 50 959 50 1231
object-new 5 320 5 271 50 407 50 309
respond_to 5 135 5 139 50 3257 50 4038
ruby-xor 5 243 5 238 50 803 50 1376
setivar 5 361 5 356 50 3123 50 5716
setivar_object 5 372 5 348 50 762 50 788
setivar_young 5 371 5 344 50 771 50 844
str_concat 5 406 5 408 50 989 50 1160
throw 5 1265 5 1161 50 1733 50 1420

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) 1457871 1248942 213 2296 0 0% 0 0 65.319875
chunky-png (click) 296866 284928 86 1133 1 0% 0 0 33.761311
erubi-rails (click) 1950342 1663281 249 2868 8 0% 0 0 78.144004
hexapdf (click) 1505822 1269933 598 13856 37 0% 0 0 395.115992
liquid-c (click) 513715 458870 122 1906 5 0% 0 0 52.930955
liquid-compile (click) 427930 362898 150 2211 2 0% 0 0 67.260421
liquid-render (click) 639999 515544 139 2520 12 0% 0 0 69.766488
lobsters (click) 8319961 7047795 3212 54394 182 0% 0 0 1870.819184
mail (click) 746976 705082 346 5481 16 0% 0 0 159.224724
psych-load (click) 282678 239529 64 654 3 0% 0 0 20.578419
railsbench (click) 3311071 2859341 1635 16753 41 0% 0 0 476.083912
rubocop (click) 5805620 4960887 2891 52116 110 0% 4 0 1529.656482
ruby-lsp (click) 849829 739949 308 4991 26 0% 0 0 139.987181
sequel (click) 493596 456092 15 125 0 0% 0 0 4.947795
binarytrees (click) 9627 8546 8 75 0 0% 0 0 2.994496
blurhash (click) 57136 49713 29 501 0 0% 0 0 16.369712
erubi (click) 240460 202276 9 108 0 0% 0 0 3.63886
etanni (click) 24125 22834 9 82 0 0% 0 0 2.771843
fannkuchredux (click) 24038 30826 5 257 0 0% 0 0 7.744851
fluentd (click) 348280 294857 10 109 0 0% 0 0 3.943262
graphql (click) 401387 343122 69 695 0 0% 0 0 20.775687
graphql-native (click) 358799 298558 40 270 0 0% 0 0 8.486389
lee (click) 294769 251440 48 803 0 0% 0 0 24.694222
matmul (click) 11838 4563 10 119 0 0% 0 0 3.948494
nbody (click) 14884 19325 8 196 0 0% 0 0 5.081678
nqueens (click) 21155 28164 7 247 0 0% 0 0 7.29992
optcarrot (click) 327944 312320 190 4549 34 0% 0 0 106.483516
protoboeuf (click) 163392 155036 14 1610 0 0% 0 0 46.178343
protoboeuf-encode (click) 234584 230620 16 1249 0 0% 0 0 32.051605
rack (click) 244375 199519 36 417 0 0% 0 0 10.877483
ruby-json (click) 27040 23884 10 189 0 0% 0 0 5.439475
rubykon (click) 140693 120664 138 1568 3 0% 0 0 44.674197
sudoku (click) 48090 43120 9 536 0 0% 0 0 15.985317
tinygql (click) 278447 252985 61 787 5 0% 0 0 21.921242
30k_ifelse (click) 6315665 5791705 9261 56473 0 0% 0 0 1573.612428
30k_methods (click) 2235566 1593704 5780 19359 0 0% 0 0 456.457292
cfunc_itself (click) 6912 5554 7 62 0 0% 0 0 1.986036
fib (click) 4041 4120 5 37 0 0% 0 0 1.384922
getivar (click) 5037 6014 6 64 0 0% 0 0 1.888863
keyword_args (click) 7637 6022 7 60 0 0% 0 0 2.065445
object-new (click) 3469 3394 5 35 0 0% 0 0 1.349739
respond_to (click) 9322 2039 6 95 0 0% 0 0 2.76235
ruby-xor (click) 6437 6880 6 72 0 0% 0 0 2.192683
setivar (click) 4188 4690 6 44 0 0% 0 0 1.558832
setivar_object (click) 4717 4838 6 46 0 0% 0 0 1.689657
setivar_young (click) 5427 5560 7 54 0 0% 0 0 1.914409
str_concat (click) 7646 7893 9 81 0 0% 0 0 2.719245
throw (click) 7384 5592 8 59 0 0% 0 0 2.125001

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.