YJIT Benchmarks

Details for Benchmarks at 2024-02-15 19:08:13 UTC

YJIT metrics from the yjit-bench suite using Ruby 4d1b3a2bf3

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 70.0% faster than CRuby 3.4.0dev
On railsbench it is
  • 70.7% 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 506 30 506
chunky-png 30 31 30 31
erubi-rails 30 19 30 19
hexapdf 30 15 30 15
liquid-c 30 352 30 352
liquid-compile 30 334 30 334
liquid-render 30 253 30 253
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 181 30 181
sequel 30 288 30 288
binarytrees 30 86 30 86
blurhash 30 100 30 100
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 22 30 22
lee 30 20 30 20
matmul 30 18 30 18
nbody 30 313 30 313
nqueens 30 305 30 305
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 39 30 39
30k_ifelse 30 55 30 55
30k_methods 30 23 30 23
cfunc_itself 30 827 30 827
fib 30 417 30 417
getivar 30 942 30 942
keyword_args 30 531 30 531
respond_to 30 1458 30 1458
ruby-xor 30 104 30 104
setivar 30 1668 30 1668
setivar_object 30 355 30 355
setivar_young 30 361 30 361
str_concat 30 410 30 410
throw 30 803 30 803

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) 885374 777144 49 524 0 0% 0 0 0 15.686381
chunky-png (click) 324485 293859 87 1095 1 0% 0 0 0 32.519795
erubi-rails (click) 1708077 1448097 280 2875 6 0% 0 0 0 81.276371
hexapdf (click) 1415433 1195974 596 12580 37 0% 0 0 0 374.205489
liquid-c (click) 520901 456000 120 1755 5 0% 0 0 0 48.66667
liquid-compile (click) 443591 388939 151 2052 2 0% 0 0 0 63.328263
liquid-render (click) 621857 557103 144 2273 8 0% 0 0 0 63.67603
lobsters (click) 7896577 6598558 3220 50293 72 0% 0 0 0 1731.496443
mail (click) 720759 622994 346 4849 14 0% 0 0 0 144.722657
psych-load (click) 287262 247666 65 650 3 0% 0 0 0 20.241271
railsbench (click) 2997182 2559455 1643 15616 54 0% 0 0 0 457.343795
rubocop (click) 5358959 4568354 2902 47664 105 0% 4 0 0 1436.242131
ruby-lsp (click) 626530 532639 159 2783 14 0% 0 0 0 79.478057
sequel (click) 494090 412826 16 118 0 0% 0 0 0 4.367259
binarytrees (click) 9392 7588 11 75 0 0% 0 0 0 3.107408
blurhash (click) 52697 47824 32 476 0 0% 0 0 0 15.89689
erubi (click) 259087 217427 10 114 0 0% 0 0 0 3.923898
etanni (click) 31783 27950 12 98 0 0% 0 0 0 3.299067
fannkuchredux (click) 24986 25976 9 259 0 0% 0 0 0 7.900531
fluentd (click) 385769 335081 11 111 0 0% 0 0 0 3.801017
graphql (click) 430040 367463 70 670 0 0% 0 0 0 20.842022
graphql-native (click) 395587 337096 41 268 0 0% 0 0 0 8.914966
lee (click) 313620 262149 49 737 0 0% 0 0 0 23.335137
matmul (click) 12586 12175 12 126 0 0% 0 0 0 4.301008
nbody (click) 15213 7657 11 187 0 0% 0 0 0 5.073803
nqueens (click) 23683 17949 10 263 0 0% 0 0 0 7.94018
optcarrot (click) 319946 286129 192 4345 34 0% 0 0 0 105.532119
rack (click) 259958 213048 31 322 0 0% 0 0 0 9.241705
ruby-json (click) 28208 23153 12 200 0 0% 0 0 0 6.033008
rubykon (click) 133942 122908 143 1500 3 0% 0 0 0 42.534553
sudoku (click) 47007 45195 11 507 0 0% 0 0 0 15.531811
tinygql (click) 300966 244786 63 791 5 0% 0 0 0 23.447074
30k_ifelse (click) 5222688 4374316 9264 50815 0 0% 0 0 0 1490.039328
30k_methods (click) 2019699 1594292 5782 19371 0 0% 0 0 0 529.235117
cfunc_itself (click) 7663 5893 9 72 0 0% 0 0 0 2.31858
fib (click) 5017 4633 8 49 0 0% 0 0 0 1.783557
getivar (click) 6102 6023 8 74 0 0% 0 0 0 2.28833
keyword_args (click) 8526 6585 10 74 0 0% 0 0 0 2.65034
respond_to (click) 8415 7843 9 87 0 0% 0 0 0 2.731104
ruby-xor (click) 8142 7087 9 87 0 0% 0 0 0 2.807964
setivar (click) 5253 4604 8 54 0 0% 0 0 0 1.898596
setivar_object (click) 5591 4624 8 54 0 0% 0 0 0 1.835595
setivar_young (click) 6343 5271 9 62 0 0% 0 0 0 2.061819
str_concat (click) 8006 7287 11 87 0 0% 0 0 0 2.966449
throw (click) 7946 6065 10 69 0 0% 0 0 0 2.445513

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.