YJIT Benchmarks

Details for Benchmarks at 2024-01-16 06:08:14 UTC

YJIT metrics from the yjit-bench suite using Ruby 924f3907c0

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 63.8% faster than CRuby 3.4.0dev
On railsbench it is
  • 66.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 478 30 478
chunky-png 30 30 30 30
erubi-rails 30 15 30 15
hexapdf 30 15 30 15
liquid-c 30 347 30 347
liquid-compile 30 339 30 339
liquid-render 30 245 30 245
lobsters 30 23 30 23
mail 30 162 30 162
psych-load 30 15 30 15
railsbench 30 15 30 15
ruby-lsp 30 388 30 388
sequel 30 303 30 303
binarytrees 30 85 30 85
erubi 30 77 30 77
etanni 30 51 30 51
fannkuchredux 30 23 30 23
fluentd 30 15 30 15
graphql 30 15 30 15
graphql-native 30 33 30 33
lee 30 19 30 19
matmul 30 16 30 16
nbody 30 275 30 275
nqueens 30 261 30 261
optcarrot 30 15 30 15
rack 30 179 30 179
ruby-json 30 15 30 15
rubykon 30 15 30 15
sudoku 30 24 30 24
tinygql 30 42 30 42
30k_ifelse 30 55 30 55
30k_methods 30 23 30 23
cfunc_itself 30 827 30 827
fib 30 416 30 416
getivar 30 944 30 944
keyword_args 30 533 30 533
respond_to 30 1438 30 1438
setivar 30 1668 30 1668
setivar_object 30 472 30 472
setivar_young 30 471 30 471
str_concat 30 447 30 447
throw 30 841 30 841

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) 734426 625772 50 508 3 0% 0 0 0 15.008508
chunky-png (click) 306116 268448 87 1098 1 0% 0 0 0 33.111151
erubi-rails (click) 1609784 1373748 287 2929 1 0% 0 0 0 82.654845
hexapdf (click) 1334652 1129554 599 12138 36 0% 0 0 0 357.745374
liquid-c (click) 485893 435820 120 1702 5 0% 0 0 0 47.068736
liquid-compile (click) 348565 308591 150 2024 2 0% 0 0 0 62.467544
liquid-render (click) 519411 469236 143 2162 5 0% 0 0 0 60.293251
lobsters (click) 7411160 6500800 3181 48285 64 0% 0 0 0 1617.45761
mail (click) 680874 626870 345 4763 12 0% 0 0 0 140.902456
psych-load (click) 261162 228260 65 603 3 0% 0 0 0 18.993093
railsbench (click) 2457616 2183384 1357 12418 16 0% 0 0 0 364.313556
ruby-lsp (click) 5303193 4637534 3394 49795 398 0% 4 0 0 1524.552278
sequel (click) 453764 405428 16 117 0 0% 0 0 0 4.159032
binarytrees (click) 9306 8120 11 75 0 0% 0 0 0 2.966449
erubi (click) 232843 229188 10 97 0 0% 0 0 0 3.298609
etanni (click) 32254 22475 12 92 0 0% 0 0 0 3.15278
fannkuchredux (click) 22749 23446 9 235 0 0% 0 0 0 7.257538
fluentd (click) 331887 315086 12 104 0 0% 0 0 0 3.460841
graphql (click) 396715 350559 70 657 0 0% 0 0 0 20.252849
graphql-native (click) 362582 319362 42 263 0 0% 0 0 0 8.654547
lee (click) 281047 266436 49 691 0 0% 0 0 0 21.902006
matmul (click) 12919 12854 12 124 0 0% 0 0 0 4.238882
nbody (click) 18474 17501 11 191 0 0% 0 0 0 5.631983
nqueens (click) 19862 5821 10 208 0 0% 0 0 0 6.523164
optcarrot (click) 314635 260135 194 4244 32 0% 0 0 0 100.963691
rack (click) 238796 214207 31 304 0 0% 0 0 0 8.86647
ruby-json (click) 27979 25354 12 205 0 0% 0 0 0 6.266846
rubykon (click) 130746 111951 144 1490 3 0% 0 0 0 42.193362
sudoku (click) 46943 31883 10 515 0 0% 0 0 0 15.504799
tinygql (click) 277062 244647 63 772 5 0% 0 0 0 22.281348
30k_ifelse (click) 4909835 4375023 9264 50819 0 0% 0 0 0 1399.177505
30k_methods (click) 1850542 1594540 5782 19373 0 0% 0 0 0 493.190749
cfunc_itself (click) 7728 6775 9 72 0 0% 0 0 0 2.368324
fib (click) 5044 5012 8 49 0 0% 0 0 0 1.791524
getivar (click) 6179 6402 8 74 0 0% 0 0 0 2.258132
keyword_args (click) 8341 6984 10 74 0 0% 0 0 0 2.572182
respond_to (click) 8471 8395 9 87 0 0% 0 0 0 2.767347
setivar (click) 5330 4983 8 54 0 0% 0 0 0 1.830421
setivar_object (click) 5668 5003 8 54 0 0% 0 0 0 1.87313
setivar_young (click) 6435 5792 9 62 0 0% 0 0 0 2.120429
str_concat (click) 8275 7972 11 89 0 0% 0 0 0 2.917741
throw (click) 7723 6444 10 69 0 0% 0 0 0 2.365791

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.