YJIT Benchmarks

Details for Benchmarks at 2024-10-31 03:46:18 UTC

YJIT metrics from the yjit-bench suite using Ruby 550ac2f2ed

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 87.9% faster than CRuby 3.4.0dev
  • 2.5% faster than YJIT 3.3.4
On railsbench it is
  • 101.6% faster than CRuby 3.4.0dev
  • 3.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 83 5 81 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 425 5 417 50 592 50 618
liquid-compile 5 410 5 405 50 540 50 555
liquid-render 5 171 5 167 50 404 50 414
lobsters 5 20 5 20 50 10 50 10
mail 5 194 5 188 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 156 5 154 50 250 50 262
ruby-lsp 5 155 5 155 50 253 50 241
sequel 5 428 5 411 50 596 50 584
binarytrees 5 84 5 83 50 145 50 148
blurhash 5 82 5 84 50 128 50 145
erubi 5 70 5 143 50 95 50 122
etanni 5 90 5 97 50 52 50 59
fannkuchredux 5 52 5 55 50 101 50 108
fluentd 5 60 5 61 50 21 50 23
graphql 5 85 5 85 50 57 50 56
graphql-native 5 40 5 53 50 10 50 13
lee 5 23 5 23 50 10 50 10
matmul 5 51 5 53 50 88 50 98
nbody 5 248 5 260 50 595 50 705
nqueens 5 119 5 121 50 74 50 563
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 172 50 615 50 677
protoboeuf-encode 5 178 5 194 50 327 50 792
rack 5 577 5 628 50 943 50 1048
ruby-json 5 85 5 82 50 50 50 48
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 163 50 161
tinygql 5 36 5 37 50 24 50 26
30k_ifelse 5 28 5 28 50 214 50 193
30k_methods 5 39 5 38 50 482 50 477
cfunc_itself 5 345 5 344 50 1046 50 1136
fib 5 127 5 127 50 900 50 962
getivar 5 206 5 214 50 2269 50 2621
keyword_args 5 108 5 103 50 959 50 1231
object-new 5 321 5 272 50 406 50 308
respond_to 5 137 5 139 50 3257 50 4036
ruby-xor 5 243 5 238 50 803 50 1375
setivar 5 360 5 356 50 3124 50 5716
setivar_object 5 372 5 348 50 762 50 788
setivar_young 5 371 5 344 50 771 50 845
str_concat 5 399 5 409 50 989 50 1167
throw 5 1271 5 1161 50 1734 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) 1455852 1262409 213 2296 0 0% 0 0 67.124193
chunky-png (click) 305945 279188 86 1133 1 0% 0 0 33.264118
erubi-rails (click) 1918866 1619183 249 2854 8 0% 0 0 76.963703
hexapdf (click) 1499745 1345070 597 13852 41 0% 0 0 394.117914
liquid-c (click) 499827 419519 122 1906 5 0% 0 0 52.363038
liquid-compile (click) 422142 380828 150 2221 2 0% 0 0 71.115564
liquid-render (click) 609502 559837 139 2520 12 0% 0 0 70.403225
lobsters (click) 8324544 6977730 3213 54354 181 0% 0 0 1879.100447
mail (click) 760960 676623 346 5481 16 0% 0 0 159.673948
psych-load (click) 260991 237372 64 654 3 0% 0 0 20.599627
railsbench (click) 3311841 2852084 1635 16742 41 0% 0 0 476.910355
rubocop (click) 5835433 4929248 2891 52116 110 0% 4 0 1524.812544
ruby-lsp (click) 864784 730995 308 4990 26 0% 0 0 139.855691
sequel (click) 467367 408584 15 110 0 0% 0 0 3.910404
binarytrees (click) 9627 8546 8 75 0 0% 0 0 3.014426
blurhash (click) 57136 49713 29 501 0 0% 0 0 16.277952
erubi (click) 233577 222203 9 108 0 0% 0 0 3.907319
etanni (click) 27632 25855 9 81 0 0% 0 0 2.720406
fannkuchredux (click) 24038 30826 5 257 0 0% 0 0 7.715048
fluentd (click) 378829 306093 10 109 0 0% 0 0 4.122693
graphql (click) 402753 352395 69 695 0 0% 0 0 20.293753
graphql-native (click) 364819 309022 40 270 0 0% 0 0 8.571587
lee (click) 287730 263111 48 803 0 0% 0 0 24.725823
matmul (click) 11838 4563 10 119 0 0% 0 0 3.912956
nbody (click) 14884 19325 8 196 0 0% 0 0 5.196285
nqueens (click) 21155 28164 7 247 0 0% 0 0 7.229275
optcarrot (click) 327944 312320 190 4549 34 0% 0 0 105.843835
protoboeuf (click) 163392 155036 14 1610 0 0% 0 0 46.534004
protoboeuf-encode (click) 234584 230620 16 1249 0 0% 0 0 32.108511
rack (click) 245243 208534 36 417 0 0% 0 0 11.106849
ruby-json (click) 27119 23942 10 187 0 0% 0 0 5.446873
rubykon (click) 140693 120664 138 1568 3 0% 0 0 44.870202
sudoku (click) 48090 43120 9 536 0 0% 0 0 15.956322
tinygql (click) 261095 223027 61 787 5 0% 0 0 22.366367
30k_ifelse (click) 6315665 5791705 9261 56473 0 0% 0 0 1589.28345
30k_methods (click) 2235566 1593704 5780 19359 0 0% 0 0 454.549327
cfunc_itself (click) 6912 5554 7 62 0 0% 0 0 1.993397
fib (click) 4041 4120 5 37 0 0% 0 0 1.446086
getivar (click) 5037 6014 6 64 0 0% 0 0 1.903127
keyword_args (click) 7637 6022 7 60 0 0% 0 0 2.071986
object-new (click) 3469 3394 5 35 0 0% 0 0 1.380573
respond_to (click) 9322 2039 6 95 0 0% 0 0 2.738042
ruby-xor (click) 6437 6880 6 72 0 0% 0 0 2.181075
setivar (click) 4188 4690 6 44 0 0% 0 0 1.582594
setivar_object (click) 4717 4838 6 46 0 0% 0 0 1.690173
setivar_young (click) 5427 5560 7 54 0 0% 0 0 1.883526
str_concat (click) 7646 7893 9 81 0 0% 0 0 2.718464
throw (click) 7384 5592 8 59 0 0% 0 0 2.155112

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.