YJIT Benchmarks

Details for Benchmarks at 2024-02-13 06:08:12 UTC

YJIT metrics from the yjit-bench suite using Ruby 038189b61f

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 69.9% faster than CRuby 3.4.0dev
On railsbench it is
  • 68.1% 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 495 30 495
chunky-png 30 31 30 31
erubi-rails 30 19 30 19
hexapdf 30 15 30 15
liquid-c 30 348 30 348
liquid-compile 30 341 30 341
liquid-render 30 252 30 252
lobsters 30 23 30 23
mail 30 163 30 163
psych-load 30 15 30 15
railsbench 30 15 30 15
rubocop 30 184 30 184
ruby-lsp 30 187 30 187
sequel 30 283 30 283
binarytrees 30 82 30 82
blurhash 30 99 30 99
erubi 30 76 30 76
etanni 30 52 30 52
fannkuchredux 30 24 30 24
fluentd 30 15 30 15
graphql 30 15 30 15
graphql-native 30 21 30 21
lee 30 20 30 20
matmul 30 18 30 18
nbody 30 312 30 312
nqueens 30 302 30 302
optcarrot 30 15 30 15
rack 30 179 30 179
ruby-json 30 15 30 15
rubykon 30 15 30 15
sudoku 30 26 30 26
tinygql 30 42 30 42
30k_ifelse 30 55 30 55
30k_methods 30 24 30 24
cfunc_itself 30 827 30 827
fib 30 417 30 417
getivar 30 941 30 941
keyword_args 30 532 30 532
respond_to 30 1458 30 1458
ruby-xor 30 85 30 85
setivar 30 1668 30 1668
setivar_object 30 332 30 332
setivar_young 30 335 30 335
str_concat 30 443 30 443
throw 30 854 30 854

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) 885574 777445 49 522 0 0% 0 0 0 15.626122
chunky-png (click) 326089 287843 87 1104 1 0% 0 0 0 32.56197
erubi-rails (click) 1709034 1449669 280 2878 6 0% 0 0 0 80.172811
hexapdf (click) 1415952 1172231 596 12580 37 0% 0 0 0 370.398456
liquid-c (click) 521005 456125 120 1758 5 0% 0 0 0 48.316087
liquid-compile (click) 443352 397302 151 2052 2 0% 0 0 0 62.075509
liquid-render (click) 621889 565546 144 2271 8 0% 0 0 0 63.077037
lobsters (click) 7928112 6594653 3218 50373 74 0% 0 0 0 1711.050476
mail (click) 720759 622994 346 4849 14 0% 0 0 0 143.670964
psych-load (click) 287287 255895 65 650 3 0% 0 0 0 19.84544
railsbench (click) 2999604 2585990 1643 15619 54 0% 0 0 0 451.599012
rubocop (click) 5361122 4562162 2902 47666 105 0% 4 0 0 1422.438673
ruby-lsp (click) 626712 540927 159 2816 14 0% 0 0 0 77.892215
sequel (click) 496630 414915 16 117 0 0% 0 0 0 4.162279
binarytrees (click) 9392 7588 11 75 0 0% 0 0 0 2.950479
blurhash (click) 52697 47824 32 476 0 0% 0 0 0 15.583157
erubi (click) 259087 217427 10 114 0 0% 0 0 0 3.858342
etanni (click) 31783 27950 12 98 0 0% 0 0 0 3.258485
fannkuchredux (click) 24986 25976 9 259 0 0% 0 0 0 7.775729
fluentd (click) 385937 335275 11 111 0 0% 0 0 0 3.709753
graphql (click) 430134 367608 70 670 0 0% 0 0 0 20.45837
graphql-native (click) 395681 337144 41 268 0 0% 0 0 0 8.717316
lee (click) 313620 262149 49 737 0 0% 0 0 0 23.007563
matmul (click) 12586 12175 12 126 0 0% 0 0 0 4.251654
nbody (click) 15213 7657 11 187 0 0% 0 0 0 5.032504
nqueens (click) 23683 17949 10 263 0 0% 0 0 0 7.750796
optcarrot (click) 320147 245517 192 4345 34 0% 0 0 0 103.892727
rack (click) 259958 221304 31 322 0 0% 0 0 0 9.085234
ruby-json (click) 28208 23153 12 200 0 0% 0 0 0 5.897851
rubykon (click) 133942 122908 143 1500 3 0% 0 0 0 41.732657
sudoku (click) 47007 45195 11 507 0 0% 0 0 0 15.272595
tinygql (click) 301153 244888 63 792 5 0% 0 0 0 23.093769
30k_ifelse (click) 5222688 4374316 9264 50815 0 0% 0 0 0 1454.347511
30k_methods (click) 2019699 1594292 5782 19371 0 0% 0 0 0 517.987802
cfunc_itself (click) 7663 5893 9 72 0 0% 0 0 0 2.287824
fib (click) 5017 4633 8 49 0 0% 0 0 0 1.752337
getivar (click) 6102 6023 8 74 0 0% 0 0 0 2.176527
keyword_args (click) 8526 6585 10 74 0 0% 0 0 0 2.531952
respond_to (click) 8415 7843 9 87 0 0% 0 0 0 2.693568
ruby-xor (click) 7544 6739 9 81 0 0% 0 0 0 2.597085
setivar (click) 5253 4604 8 54 0 0% 0 0 0 1.867198
setivar_object (click) 5591 4624 8 54 0 0% 0 0 0 1.844207
setivar_young (click) 6343 5271 9 62 0 0% 0 0 0 2.064131
str_concat (click) 8006 7287 11 87 0 0% 0 0 0 2.939879
throw (click) 7946 6065 10 69 0 0% 0 0 0 2.425189

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.