YJIT Benchmarks

Details for Benchmarks at 2024-11-04 03:46:30 UTC

YJIT metrics from the yjit-bench suite using Ruby 21af248f92

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 87.6% faster than CRuby 3.4.0dev
  • 2.8% faster than YJIT 3.3.4
On railsbench it is
  • 100.2% faster than CRuby 3.4.0dev
  • 3.1% 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 83 5 83 50 156 50 163
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 422 5 426 50 593 50 621
liquid-compile 5 410 5 418 50 543 50 555
liquid-render 5 168 5 167 50 402 50 410
lobsters 5 20 5 20 50 10 50 10
mail 5 194 5 181 50 251 50 236
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 250 50 265
ruby-lsp 5 156 5 151 50 238 50 238
sequel 5 429 5 416 50 599 50 576
binarytrees 5 84 5 83 50 146 50 148
blurhash 5 82 5 83 50 127 50 145
erubi 5 73 5 144 50 33 50 124
etanni 5 90 5 97 50 52 50 60
fannkuchredux 5 52 5 56 50 101 50 107
fluentd 5 61 5 65 50 22 50 22
graphql 5 85 5 86 50 57 50 58
graphql-native 5 40 5 52 50 10 50 14
lee 5 23 5 23 50 10 50 10
matmul 5 51 5 52 50 88 50 99
nbody 5 248 5 254 50 595 50 707
nqueens 5 119 5 120 50 74 50 566
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 173 5 173 50 617 50 689
protoboeuf-encode 5 179 5 196 50 328 50 781
rack 5 583 5 627 50 960 50 1071
ruby-json 5 85 5 82 50 50 50 49
rubykon 5 21 5 20 50 10 50 10
sudoku 5 48 5 49 50 163 50 160
tinygql 5 37 5 36 50 24 50 26
30k_ifelse 5 28 5 28 50 214 50 192
30k_methods 5 38 5 39 50 483 50 475
cfunc_itself 5 346 5 335 50 1046 50 1135
fib 5 127 5 114 50 899 50 962
getivar 5 206 5 213 50 2270 50 2609
keyword_args 5 108 5 103 50 959 50 1231
object-new 5 321 5 271 50 406 50 304
respond_to 5 137 5 139 50 3258 50 4038
ruby-xor 5 228 5 244 50 803 50 1374
setivar 5 360 5 356 50 3128 50 5712
setivar_object 5 372 5 350 50 762 50 787
setivar_young 5 372 5 353 50 771 50 842
str_concat 5 399 5 402 50 987 50 1156
throw 5 1269 5 1139 50 1722 50 1392

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) 1448918 1245855 213 2296 0 0% 0 0 65.72228
chunky-png (click) 298509 259887 86 1133 1 0% 0 0 34.422782
erubi-rails (click) 1925002 1599460 249 2837 8 0% 0 0 77.438671
hexapdf (click) 1519952 1305332 598 13856 40 0% 0 0 398.809495
liquid-c (click) 491547 414389 119 1852 5 0% 0 0 51.961609
liquid-compile (click) 413028 361587 150 2198 2 0% 0 0 67.994398
liquid-render (click) 604432 522480 136 2466 12 0% 0 0 68.596225
lobsters (click) 8322235 6985491 3214 54271 182 0% 0 0 1839.004876
mail (click) 778585 691363 346 5481 16 0% 0 0 158.11231
psych-load (click) 249605 218634 64 656 3 0% 0 0 20.727195
railsbench (click) 3298474 2881272 1632 16668 41 0% 0 0 478.867228
rubocop (click) 5807862 4910853 2891 52116 110 0% 4 0 1531.343626
ruby-lsp (click) 888378 717037 308 4990 26 0% 0 0 140.876689
sequel (click) 464785 400267 15 118 0 0% 0 0 4.146726
binarytrees (click) 9627 8546 8 75 0 0% 0 0 2.999053
blurhash (click) 57136 49713 29 501 0 0% 0 0 16.206866
erubi (click) 255525 231050 9 108 0 0% 0 0 3.715682
etanni (click) 27632 25826 9 85 0 0% 0 0 2.91651
fannkuchredux (click) 24038 30826 5 257 0 0% 0 0 7.791669
fluentd (click) 342453 317625 10 109 0 0% 0 0 3.857244
graphql (click) 427895 349810 69 695 0 0% 0 0 20.69843
graphql-native (click) 364293 294736 40 270 0 0% 0 0 8.756984
lee (click) 310095 280453 48 803 0 0% 0 0 24.781465
matmul (click) 11838 4563 10 119 0 0% 0 0 3.954792
nbody (click) 14884 19325 8 196 0 0% 0 0 5.115341
nqueens (click) 21155 28164 7 247 0 0% 0 0 7.271612
optcarrot (click) 327944 312320 190 4549 34 0% 0 0 104.256011
protoboeuf (click) 163392 155036 14 1610 0 0% 0 0 46.25532
protoboeuf-encode (click) 234584 230620 16 1249 0 0% 0 0 32.093398
rack (click) 232705 197343 36 417 0 0% 0 0 10.941737
ruby-json (click) 27119 23942 10 187 0 0% 0 0 5.385381
rubykon (click) 140693 120664 138 1568 3 0% 0 0 44.942661
sudoku (click) 48090 43120 9 536 0 0% 0 0 16.173867
tinygql (click) 302463 265528 61 787 5 0% 0 0 22.737773
30k_ifelse (click) 6315665 5791705 9261 56473 0 0% 0 0 1584.891447
30k_methods (click) 2235566 1593704 5780 19359 0 0% 0 0 452.478386
cfunc_itself (click) 6912 5554 7 62 0 0% 0 0 1.950627
fib (click) 4041 4120 5 37 0 0% 0 0 1.405456
getivar (click) 5037 6014 6 64 0 0% 0 0 1.9318
keyword_args (click) 7637 6022 7 60 0 0% 0 0 2.099309
object-new (click) 3469 3394 5 35 0 0% 0 0 1.354567
respond_to (click) 9322 2039 6 95 0 0% 0 0 2.752275
ruby-xor (click) 6437 6880 6 72 0 0% 0 0 2.238321
setivar (click) 4188 4690 6 44 0 0% 0 0 1.575877
setivar_object (click) 4717 4838 6 46 0 0% 0 0 1.669215
setivar_young (click) 5427 5560 7 54 0 0% 0 0 1.893321
str_concat (click) 7646 7893 9 81 0 0% 0 0 2.626733
throw (click) 7384 5592 8 59 0 0% 0 0 2.172419

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.