YJIT Benchmarks

Details for Benchmarks at 2024-07-30 06:08:30 UTC

YJIT metrics from the yjit-bench suite using Ruby b3baa11ee9

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 75.1% faster than CRuby 3.4.0dev
  • 1.2% faster than YJIT 3.3.3
On railsbench it is
  • 77.7% faster than CRuby 3.4.0dev
  • the same speed as YJIT 3.3.3

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.3 warmups CRuby 3.3.3 iters CRuby 3.4.0dev warmups CRuby 3.4.0dev iters YJIT 3.3.3 warmups YJIT 3.3.3 iters YJIT 3.4.0dev warmups YJIT 3.4.0dev iters
activerecord 10 51 10 47 10 116 10 120
chunky-png 10 18 10 15 10 36 10 36
erubi-rails 10 10 10 10 10 20 10 18
hexapdf 10 10 10 10 10 10 10 10
liquid-c 10 347 10 329 10 493 10 483
liquid-compile 10 335 10 325 10 477 10 483
liquid-render 10 137 10 132 10 350 10 356
lobsters 10 14 10 13 10 24 10 23
mail 10 160 10 146 10 233 10 217
psych-load 10 10 10 10 10 10 10 10
railsbench 10 10 10 10 10 10 10 10
rubocop 10 135 10 128 10 227 10 235
ruby-lsp 10 129 10 121 10 207 10 213
sequel 10 319 10 305 10 426 10 418
binarytrees 10 51 10 49 10 118 10 119
blurhash 10 61 10 56 10 119 10 144
erubi 10 83 10 83 10 103 10 103
etanni 10 58 10 56 10 68 10 66
fannkuchredux 10 10 10 10 10 17 10 16
fluentd 10 10 10 10 10 10 10 10
graphql 10 10 10 10 10 10 10 10
graphql-native 10 34 10 33 10 40 10 39
lee 10 11 10 10 10 20 10 20
matmul 10 10 10 10 10 15 10 17
nbody 10 213 10 195 10 410 10 490
nqueens 10 115 10 99 10 113 10 451
optcarrot 10 10 10 10 10 10 10 10
protoboeuf 10 183 10 171 10 603 10 684
protoboeuf-encode 10 124 10 123 10 268 10 362
rack 10 455 10 459 10 816 10 879
ruby-json 10 10 10 10 10 10 10 10
rubykon 10 10 10 10 10 10 10 10
sudoku 10 10 10 10 10 27 10 32
tinygql 10 25 10 21 10 51 10 53
30k_ifelse 10 10 10 10 10 70 10 69
30k_methods 10 10 10 10 10 26 10 26
cfunc_itself 10 256 10 231 10 1099 10 1211
fib 10 107 10 101 10 616 10 618
getivar 10 247 10 189 10 1280 10 1690
keyword_args 10 87 10 81 10 720 10 947
object-new 10 225 10 189 10 291 10 243
respond_to 10 92 10 83 10 1738 10 2092
ruby-xor 10 31 10 25 10 100 10 132
setivar 10 366 10 378 10 2329 10 4843
setivar_object 10 241 10 258 10 645 10 701
setivar_young 10 239 10 258 10 641 10 697
str_concat 10 337 10 281 10 605 10 540
throw 10 949 10 902 10 1243 10 1144

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) 1400672 1221942 214 2169 0 0% 0 0 81.975565
chunky-png (click) 324546 239048 83 1054 1 0% 0 0 37.084589
erubi-rails (click) 1677281 1451356 274 2921 6 0% 0 0 103.845777
hexapdf (click) 1293955 1075548 505 11812 41 0% 0 0 417.242985
liquid-c (click) 513399 459241 119 1768 5 0% 0 0 57.954089
liquid-compile (click) 435870 378479 151 2086 2 0% 0 0 74.05047
liquid-render (click) 608839 506220 136 2325 8 0% 0 0 78.045009
lobsters (click) 7533333 6324540 3082 49722 81 0% 0 0 2256.593299
mail (click) 763680 688347 347 5553 14 0% 0 0 193.428867
psych-load (click) 286069 237563 61 594 3 0% 0 0 21.752593
railsbench (click) 2929391 2570444 1636 15968 57 0% 0 0 602.960607
rubocop (click) 5477107 4583627 2892 50936 110 0% 4 0 1953.54044
ruby-lsp (click) 836330 723100 309 4679 24 0% 0 0 161.414517
sequel (click) 477457 451920 16 117 0 0% 0 0 5.257014
binarytrees (click) 8765 7825 10 70 0 0% 0 0 3.215929
blurhash (click) 50455 44132 31 457 0 0% 0 0 18.078757
erubi (click) 263008 215942 10 112 0 0% 0 0 4.552539
etanni (click) 30299 29012 12 96 0 0% 0 0 3.713879
fannkuchredux (click) 24067 31522 5 256 0 0% 0 0 10.208776
fluentd (click) 367855 338872 4 28 0 0% 0 0 1.401722
graphql (click) 425362 325567 66 650 0 0% 0 0 23.69153
graphql-native (click) 393952 331235 38 244 0 0% 0 0 9.394438
lee (click) 286717 249245 34 531 0 0% 0 0 19.967598
matmul (click) 8318 9199 8 86 0 0% 0 0 3.324749
nbody (click) 15375 19248 11 195 0 0% 0 0 6.514519
nqueens (click) 24183 24054 10 283 0 0% 0 0 10.762089
optcarrot (click) 309371 266843 188 4402 34 0% 0 0 120.629343
protoboeuf (click) 140353 122267 17 1368 0 0% 0 0 50.746621
protoboeuf-encode (click) 221090 228639 19 1172 0 0% 0 0 38.579031
rack (click) 268017 197606 37 409 0 0% 0 0 13.443065
ruby-json (click) 30520 28961 8 167 0 0% 0 0 5.593102
rubykon (click) 128950 131940 137 1486 3 0% 0 0 49.55585
sudoku (click) 45653 24997 8 520 0 0% 0 0 19.683565
tinygql (click) 301114 286225 58 735 5 0% 0 0 24.984408
30k_ifelse (click) 5134674 4729436 9259 50778 0 0% 0 0 1990.832477
30k_methods (click) 2016920 1591842 5778 19339 0 0% 0 0 559.919067
cfunc_itself (click) 7533 6248 9 70 0 0% 0 0 2.553383
fib (click) 4970 5023 8 49 0 0% 0 0 2.01889
getivar (click) 5936 6875 8 74 0 0% 0 0 2.588292
keyword_args (click) 8408 6980 10 72 0 0% 0 0 2.829895
object-new (click) 4400 4255 7 45 0 0% 0 0 2.171286
respond_to (click) 8276 8394 9 85 0 0% 0 0 3.073635
ruby-xor (click) 5580 6003 5 62 0 0% 0 0 2.107218
setivar (click) 5087 5551 8 54 0 0% 0 0 2.011833
setivar_object (click) 5470 5459 8 54 0 0% 0 0 2.123394
setivar_young (click) 6180 6181 9 62 0 0% 0 0 2.372972
str_concat (click) 7776 8178 11 85 0 0% 0 0 3.331075
throw (click) 7899 6453 10 69 0 0% 0 0 2.822818

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.