YJIT Benchmarks

Details for Benchmarks at 2024-05-06 19:08:17 UTC

YJIT metrics from the yjit-bench suite using Ruby 00b1553dc6

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 69.3% faster than CRuby 3.4.0dev
On railsbench it is
  • 79.6% faster than CRuby 3.4.0dev

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.4.0dev warmups CRuby 3.4.0dev iters YJIT 3.4.0dev warmups YJIT 3.4.0dev iters
activerecord 10 347 10 737
chunky-png 10 17 10 38
erubi-rails 10 10 10 19
hexapdf 10 10 10 10
liquid-c 10 349 10 504
liquid-compile 10 339 10 506
liquid-render 10 134 10 361
lobsters 10 12 10 23
mail 10 157 10 228
psych-load 10 10 10 10
railsbench 10 10 10 10
rubocop 10 131 10 245
ruby-lsp 10 177 10 235
sequel 10 316 10 416
binarytrees 10 51 10 118
blurhash 10 60 10 141
erubi 10 84 10 106
etanni 10 25 10 27
fannkuchredux 10 10 10 17
fluentd 10 10 10 10
graphql 10 10 10 10
graphql-native 10 35 10 41
lee 10 11 10 21
matmul 10 10 10 16
nbody 10 207 10 471
nqueens 10 115 10 459
optcarrot 10 10 10 10
protoboeuf 10 187 10 730
rack 10 205 10 261
ruby-json 10 10 10 10
rubykon 10 10 10 10
sudoku 10 10 10 30
tinygql 10 23 10 51
30k_ifelse 10 10 10 70
30k_methods 10 10 10 26
cfunc_itself 10 254 10 1211
fib 10 105 10 618
getivar 10 220 10 1348
keyword_args 10 89 10 945
respond_to 10 89 10 2149
ruby-xor 10 25 10 140
setivar 10 422 10 3582
setivar_object 10 233 10 590
setivar_young 10 237 10 607
str_concat 10 334 10 635
throw 10 967 10 1166

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) 879169 716181 49 526 0 0% 0 0 16.996789
chunky-png (click) 338761 273627 82 1048 1 0% 0 0 31.632696
erubi-rails (click) 1693263 1373957 272 2903 6 0% 0 0 82.990064
hexapdf (click) 1295550 1141232 505 11522 41 0% 0 0 340.306131
liquid-c (click) 525934 465131 119 1757 5 0% 0 0 49.708799
liquid-compile (click) 450648 380676 151 2078 2 0% 0 0 65.698724
liquid-render (click) 623961 528746 136 2292 8 0% 0 0 64.896606
lobsters (click) 7560796 6318267 3111 48963 89 0% 0 0 1673.642096
mail (click) 731588 650735 346 4865 14 0% 0 0 145.755309
psych-load (click) 303929 244228 61 617 3 0% 0 0 20.021551
railsbench (click) 2955829 2514014 1633 15956 57 0% 0 0 468.574822
rubocop (click) 5332487 4562224 2901 48278 112 0% 4 0 1472.272003
ruby-lsp (click) 622665 538521 159 2808 28 0% 0 0 80.070835
sequel (click) 489410 418219 16 118 0 0% 0 0 4.27264
binarytrees (click) 8756 7777 10 70 0 0% 0 0 2.816524
blurhash (click) 50429 43273 31 455 0 0% 0 0 15.518219
erubi (click) 277116 235415 10 112 0 0% 0 0 3.906006
etanni (click) 29692 28216 11 91 0 0% 0 0 3.019928
fannkuchredux (click) 21198 26809 5 228 0 0% 0 0 7.185089
fluentd (click) 385230 328342 4 28 0 0% 0 0 1.132161
graphql (click) 438895 384034 66 644 0 0% 0 0 20.186034
graphql-native (click) 410104 360524 42 278 0 0% 0 0 9.534507
lee (click) 300573 267787 34 528 0 0% 0 0 17.182386
matmul (click) 8300 983 8 85 0 0% 0 0 2.972714
nbody (click) 14798 17933 11 185 0 0% 0 0 5.226262
nqueens (click) 22703 29059 10 260 0 0% 0 0 8.140631
optcarrot (click) 307949 264223 188 4285 34 0% 0 0 104.329679
protoboeuf (click) 146719 135165 17 1366 0 0% 0 0 42.469769
rack (click) 267837 194090 31 324 0 0% 0 0 9.647175
ruby-json (click) 30222 27890 8 167 0 0% 0 0 4.958084
rubykon (click) 127405 128474 137 1461 3 0% 0 0 42.374542
sudoku (click) 42479 58142 8 475 0 0% 0 0 15.211933
tinygql (click) 315372 264441 58 741 5 0% 0 0 22.009696
30k_ifelse (click) 5134674 4729436 9259 50778 0 0% 0 0 1524.414108
30k_methods (click) 2016920 1591842 5778 19339 0 0% 0 0 521.642923
cfunc_itself (click) 7534 6180 9 70 0 0% 0 0 2.288462
fib (click) 4970 5003 8 49 0 0% 0 0 1.803773
getivar (click) 5963 6375 8 74 0 0% 0 0 2.263353
keyword_args (click) 8409 6912 10 72 0 0% 0 0 2.567529
respond_to (click) 8277 8274 9 85 0 0% 0 0 2.697762
ruby-xor (click) 5593 5796 5 62 0 0% 0 0 1.782046
setivar (click) 5102 5375 8 54 0 0% 0 0 1.820913
setivar_object (click) 5470 5395 8 54 0 0% 0 0 1.922342
setivar_young (click) 6182 6093 9 62 0 0% 0 0 2.137623
str_concat (click) 7774 7946 11 85 0 0% 0 0 2.862855
throw (click) 7895 6377 10 69 0 0% 0 0 2.64565

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.