YJIT Benchmarks

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

YJIT metrics from the yjit-bench suite using Ruby 21297293f4

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 70.2% faster than CRuby 3.4.0dev
On railsbench it is
  • 68.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 496 30 496
chunky-png 30 31 30 31
erubi-rails 30 19 30 19
hexapdf 30 15 30 15
liquid-c 30 349 30 349
liquid-compile 30 337 30 337
liquid-render 30 249 30 249
lobsters 30 23 30 23
mail 30 161 30 161
psych-load 30 15 30 15
railsbench 30 15 30 15
rubocop 30 184 30 184
ruby-lsp 30 189 30 189
sequel 30 286 30 286
binarytrees 30 82 30 82
blurhash 30 99 30 99
erubi 30 76 30 76
etanni 30 52 30 52
fannkuchredux 30 23 30 23
fluentd 30 15 30 15
graphql 30 15 30 15
graphql-native 30 22 30 22
lee 30 20 30 20
matmul 30 17 30 17
nbody 30 312 30 312
nqueens 30 296 30 296
optcarrot 30 15 30 15
rack 30 178 30 178
ruby-json 30 15 30 15
rubykon 30 15 30 15
sudoku 30 24 30 24
tinygql 30 41 30 41
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 942 30 942
keyword_args 30 531 30 531
respond_to 30 1459 30 1459
ruby-xor 30 96 30 96
setivar 30 1668 30 1668
setivar_object 30 357 30 357
setivar_young 30 344 30 344
str_concat 30 403 30 403
throw 30 813 30 813

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) 885696 785700 49 522 0 0% 0 0 0 15.597397
chunky-png (click) 326089 287843 87 1104 1 0% 0 0 0 32.74413
erubi-rails (click) 1709583 1458202 281 2882 6 0% 0 0 0 80.758085
hexapdf (click) 1416918 1214407 596 12594 37 0% 0 0 0 371.756127
liquid-c (click) 521005 456125 120 1758 5 0% 0 0 0 48.667895
liquid-compile (click) 442437 388171 151 2044 2 0% 0 0 0 62.106872
liquid-render (click) 621889 565546 144 2271 8 0% 0 0 0 62.903478
lobsters (click) 7935071 6573241 3220 50483 72 0% 0 0 0 1731.716714
mail (click) 720759 622982 346 4849 14 0% 0 0 0 143.442268
psych-load (click) 287287 255895 65 650 3 0% 0 0 0 19.979336
railsbench (click) 2998972 2560713 1643 15617 54 0% 0 0 0 455.3751
rubocop (click) 5361452 4595100 2902 47668 105 0% 4 0 0 1430.152608
ruby-lsp (click) 626611 532783 159 2816 14 0% 0 0 0 78.536985
sequel (click) 496630 414947 16 117 0 0% 0 0 0 4.197929
binarytrees (click) 9392 7588 11 75 0 0% 0 0 0 3.02473
blurhash (click) 52697 47824 32 476 0 0% 0 0 0 15.784498
erubi (click) 259087 217427 10 114 0 0% 0 0 0 3.853237
etanni (click) 31783 27950 12 98 0 0% 0 0 0 3.274612
fannkuchredux (click) 24986 25976 9 259 0 0% 0 0 0 7.847633
fluentd (click) 385937 335271 11 111 0 0% 0 0 0 3.722768
graphql (click) 430134 367575 70 670 0 0% 0 0 0 20.360676
graphql-native (click) 395681 337177 41 268 0 0% 0 0 0 8.731304
lee (click) 313620 262149 49 737 0 0% 0 0 0 23.312288
matmul (click) 12586 12175 12 126 0 0% 0 0 0 4.2721
nbody (click) 15213 7657 11 187 0 0% 0 0 0 5.057029
nqueens (click) 23683 17949 10 263 0 0% 0 0 0 7.761796
optcarrot (click) 320147 245517 192 4345 34 0% 0 0 0 104.211948
rack (click) 259958 221272 31 322 0 0% 0 0 0 9.147345
ruby-json (click) 28208 23153 12 200 0 0% 0 0 0 5.899037
rubykon (click) 133942 122908 143 1500 3 0% 0 0 0 42.07341
sudoku (click) 47007 45195 11 507 0 0% 0 0 0 15.312348
tinygql (click) 301039 261288 63 792 5 0% 0 0 0 23.255361
30k_ifelse (click) 5222688 4374316 9264 50815 0 0% 0 0 0 1466.521528
30k_methods (click) 2019699 1594292 5782 19371 0 0% 0 0 0 523.494431
cfunc_itself (click) 7663 5893 9 72 0 0% 0 0 0 2.305114
fib (click) 5017 4633 8 49 0 0% 0 0 0 1.757627
getivar (click) 6102 6023 8 74 0 0% 0 0 0 2.266153
keyword_args (click) 8526 6585 10 74 0 0% 0 0 0 2.559206
respond_to (click) 8415 7843 9 87 0 0% 0 0 0 2.698988
ruby-xor (click) 7544 6739 9 81 0 0% 0 0 0 2.594656
setivar (click) 5253 4604 8 54 0 0% 0 0 0 1.864417
setivar_object (click) 5591 4624 8 54 0 0% 0 0 0 1.833039
setivar_young (click) 6343 5271 9 62 0 0% 0 0 0 2.072126
str_concat (click) 8006 7287 11 87 0 0% 0 0 0 2.951511
throw (click) 7946 6065 10 69 0 0% 0 0 0 2.416469

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.