YJIT Benchmarks

Details for Benchmarks at 2024-01-09 06:08:13 UTC

YJIT metrics from the yjit-bench suite using Ruby f82a6172a2

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 63.7% faster than CRuby 3.4.0dev
On railsbench it is
  • 65.8% 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 30 475 30 475
chunky-png 30 30 30 30
erubi-rails 30 15 30 15
hexapdf 30 15 30 15
liquid-c 30 346 30 346
liquid-compile 30 332 30 332
liquid-render 30 246 30 246
lobsters 30 23 30 23
mail 30 166 30 166
psych-load 30 15 30 15
railsbench 30 15 30 15
ruby-lsp 30 387 30 387
sequel 30 298 30 298
binarytrees 30 80 30 80
erubi 30 75 30 75
etanni 30 51 30 51
fannkuchredux 30 24 30 24
fluentd 30 15 30 15
graphql 30 15 30 15
graphql-native 30 33 30 33
lee 30 19 30 19
matmul 30 15 30 15
nbody 30 276 30 276
nqueens 30 31 30 31
optcarrot 30 15 30 15
rack 30 175 30 175
ruby-json 30 15 30 15
rubykon 30 15 30 15
sudoku 30 15 30 15
tinygql 30 40 30 40
30k_ifelse 30 55 30 55
30k_methods 30 23 30 23
cfunc_itself 30 753 30 753
fib 30 416 30 416
getivar 30 945 30 945
keyword_args 30 493 30 493
respond_to 30 1171 30 1171
setivar 30 1669 30 1669
setivar_object 30 369 30 369
setivar_young 30 390 30 390
str_concat 30 396 30 396
throw 30 849 30 849

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) 735946 659998 50 504 3 0% 0 0 0 14.792615
chunky-png (click) 307325 261267 87 1104 1 0% 0 0 0 33.34962
erubi-rails (click) 1611487 1384476 287 2915 1 0% 0 0 0 82.574179
hexapdf (click) 1333154 1127715 599 12112 36 0% 0 0 0 357.381288
liquid-c (click) 486269 444484 120 1701 5 0% 0 0 0 46.998341
liquid-compile (click) 348080 267154 150 2019 2 0% 0 0 0 62.03054
liquid-render (click) 519570 379745 143 2163 5 0% 0 0 0 60.175138
lobsters (click) 7403958 6430194 3182 48184 64 0% 0 0 0 1613.826562
mail (click) 682842 620025 345 4760 12 0% 0 0 0 140.043874
psych-load (click) 260964 220020 65 600 3 0% 0 0 0 18.836638
railsbench (click) 2464756 2182208 1357 12438 16 0% 0 0 0 365.264908
ruby-lsp (click) 5303816 4520512 3395 49689 397 0% 4 0 0 1519.737387
sequel (click) 455707 415192 16 123 0 0% 0 0 0 4.495726
binarytrees (click) 9306 8120 11 75 0 0% 0 0 0 2.933214
erubi (click) 232785 229083 10 95 0 0% 0 0 0 3.234283
etanni (click) 32063 22322 12 90 0 0% 0 0 0 3.066723
fannkuchredux (click) 22558 23293 9 233 0 0% 0 0 0 7.238175
fluentd (click) 333189 275481 12 104 0 0% 0 0 0 3.349454
graphql (click) 397052 350852 70 658 0 0% 0 0 0 20.096092
graphql-native (click) 362855 319546 42 264 0 0% 0 0 0 8.680195
lee (click) 281180 250100 49 691 0 0% 0 0 0 22.206394
matmul (click) 14070 12895 17 122 0 0% 0 0 0 4.413997
nbody (click) 18283 17348 11 189 0 0% 0 0 0 5.716049
nqueens (click) 18613 21105 12 196 0 0% 0 0 0 6.176343
optcarrot (click) 314630 260302 194 4242 32 0% 0 0 0 100.218248
rack (click) 238781 205927 31 301 0 0% 0 0 0 8.827178
ruby-json (click) 27788 25201 12 203 0 0% 0 0 0 6.215174
rubykon (click) 129011 118454 144 1473 3 0% 0 0 0 41.451916
sudoku (click) 44938 40709 26 421 0 0% 0 0 0 13.022334
tinygql (click) 277335 244871 63 773 5 0% 0 0 0 22.348821
30k_ifelse (click) 4909644 4374870 9264 50817 0 0% 0 0 0 1379.82036
30k_methods (click) 1850351 1594387 5782 19371 0 0% 0 0 0 491.259437
cfunc_itself (click) 7868 6931 9 73 0 0% 0 0 0 2.403581
fib (click) 5044 5012 8 49 0 0% 0 0 0 1.780506
getivar (click) 6179 6402 8 74 0 0% 0 0 0 2.166465
keyword_args (click) 8481 7140 10 75 0 0% 0 0 0 2.763241
respond_to (click) 8611 8551 9 88 0 0% 0 0 0 2.763937
setivar (click) 5330 4983 8 54 0 0% 0 0 0 1.802541
setivar_object (click) 5668 5003 8 54 0 0% 0 0 0 1.863692
setivar_young (click) 6435 5792 9 62 0 0% 0 0 0 2.095586
str_concat (click) 8079 7814 11 87 0 0% 0 0 0 2.847787
throw (click) 7723 6444 10 69 0 0% 0 0 0 2.33564

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.