YJIT Benchmarks

Details for Benchmarks at 2024-10-20 03:46:27 UTC

YJIT metrics from the yjit-bench suite using Ruby 1c653cabfc

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 91.1% faster than CRuby 3.4.0dev
  • 4.8% faster than YJIT 3.3.4
On railsbench it is
  • 108.9% faster than CRuby 3.4.0dev
  • 7.4% 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 82 50 155 50 160
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 421 50 593 50 633
liquid-compile 5 412 5 408 50 542 50 558
liquid-render 5 170 5 164 50 405 50 433
lobsters 5 20 5 19 50 10 50 10
mail 5 189 5 194 50 251 50 248
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 248 50 266
ruby-lsp 5 157 5 156 50 248 50 259
sequel 5 422 5 422 50 580 50 591
binarytrees 5 84 5 84 50 149 50 152
blurhash 5 82 5 83 50 128 50 146
erubi 5 122 5 138 50 95 50 125
etanni 5 90 5 101 50 52 50 63
fannkuchredux 5 52 5 56 50 101 50 111
fluentd 5 61 5 62 50 21 50 25
graphql 5 85 5 85 50 57 50 56
graphql-native 5 50 5 52 50 10 50 13
lee 5 23 5 23 50 10 50 10
matmul 5 51 5 52 50 88 50 99
nbody 5 248 5 252 50 595 50 726
nqueens 5 119 5 119 50 74 50 581
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 174 50 615 50 746
protoboeuf-encode 5 178 5 193 50 327 50 778
rack 5 570 5 627 50 957 50 1076
ruby-json 5 84 5 85 50 51 50 51
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 49 50 163 50 171
tinygql 5 36 5 36 50 24 50 24
30k_ifelse 5 28 5 28 50 213 50 192
30k_methods 5 38 5 38 50 483 50 477
cfunc_itself 5 347 5 338 50 1046 50 1135
fib 5 118 5 126 50 900 50 963
getivar 5 206 5 205 50 2268 50 2592
keyword_args 5 108 5 104 50 959 50 1231
object-new 5 321 5 268 50 406 50 304
respond_to 5 137 5 133 50 3257 50 3971
ruby-xor 5 228 5 250 50 803 50 1382
setivar 5 361 5 358 50 3124 50 5714
setivar_object 5 372 5 339 50 764 50 798
setivar_young 5 372 5 341 50 770 50 839
str_concat 5 399 5 399 50 987 50 1188
throw 5 1270 5 1092 50 1717 50 1417

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) 1453281 1273770 213 2296 0 0% 0 0 65.853252
chunky-png (click) 310630 275082 86 1133 1 0% 0 0 33.16012
erubi-rails (click) 1922605 1623142 248 2877 8 0% 0 0 78.633553
hexapdf (click) 1491996 1378199 598 13856 40 0% 0 0 394.832851
liquid-c (click) 499710 398695 122 1906 5 0% 0 0 53.545459
liquid-compile (click) 415657 380576 150 2208 2 0% 0 0 67.45309
liquid-render (click) 610923 508416 139 2520 12 0% 0 0 70.571238
lobsters (click) 8329832 6978749 3212 54285 182 0% 0 0 1843.544228
mail (click) 771030 734915 346 5481 16 0% 0 0 157.374533
psych-load (click) 245761 209206 64 656 3 0% 0 0 20.934921
railsbench (click) 3308849 2882223 1635 16734 41 0% 0 0 479.222074
rubocop (click) 5806446 4906321 2891 52131 110 0% 4 0 1526.058365
ruby-lsp (click) 851550 747035 308 4986 26 0% 0 0 139.476866
sequel (click) 454642 399274 15 120 0 0% 0 0 4.225181
binarytrees (click) 9627 8546 8 75 0 0% 0 0 3.040752
blurhash (click) 57136 49713 29 501 0 0% 0 0 16.235463
erubi (click) 230773 201295 9 108 0 0% 0 0 3.773004
etanni (click) 27697 25886 9 81 0 0% 0 0 2.727836
fannkuchredux (click) 24038 30826 5 257 0 0% 0 0 7.75688
fluentd (click) 355032 285894 10 109 0 0% 0 0 3.866904
graphql (click) 427167 381891 69 695 0 0% 0 0 20.398052
graphql-native (click) 374447 305353 40 270 0 0% 0 0 8.570229
lee (click) 275188 252265 48 803 0 0% 0 0 24.706314
matmul (click) 11838 4563 10 119 0 0% 0 0 3.961118
nbody (click) 14884 19325 8 196 0 0% 0 0 5.245295
nqueens (click) 21155 28164 7 247 0 0% 0 0 7.247263
optcarrot (click) 327944 312320 190 4549 34 0% 0 0 106.189819
protoboeuf (click) 163392 155036 14 1610 0 0% 0 0 46.301554
protoboeuf-encode (click) 234584 230620 16 1249 0 0% 0 0 32.002959
rack (click) 251175 223896 36 417 0 0% 0 0 10.972497
ruby-json (click) 27184 23973 10 188 0 0% 0 0 5.378587
rubykon (click) 140297 120385 138 1566 3 0% 0 0 44.966624
sudoku (click) 48090 43120 9 536 0 0% 0 0 15.997181
tinygql (click) 284032 243277 61 787 5 0% 0 0 22.090558
30k_ifelse (click) 6315665 5791705 9261 56473 0 0% 0 0 1581.257899
30k_methods (click) 2235566 1593704 5780 19359 0 0% 0 0 454.154667
cfunc_itself (click) 6912 5554 7 62 0 0% 0 0 1.997026
fib (click) 4041 4120 5 37 0 0% 0 0 1.429951
getivar (click) 5037 6014 6 64 0 0% 0 0 1.908165
keyword_args (click) 7637 6022 7 60 0 0% 0 0 2.057316
object-new (click) 3469 3394 5 35 0 0% 0 0 1.394164
respond_to (click) 9322 2039 6 95 0 0% 0 0 2.733319
ruby-xor (click) 6437 6880 6 72 0 0% 0 0 2.240715
setivar (click) 4188 4690 6 44 0 0% 0 0 1.572982
setivar_object (click) 4717 4838 6 46 0 0% 0 0 1.685903
setivar_young (click) 5427 5560 7 54 0 0% 0 0 1.91707
str_concat (click) 7646 7893 9 81 0 0% 0 0 2.644603
throw (click) 7384 5592 8 59 0 0% 0 0 2.152966

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.