YJIT Benchmarks

Details for Benchmarks at 2024-04-27 06:08:14 UTC

YJIT metrics from the yjit-bench suite using Ruby ef3e3e9a2f

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 69.2% faster than CRuby 3.4.0dev
On railsbench it is
  • 79.3% 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 20 30 20
hexapdf 30 15 30 15
liquid-c 30 343 30 343
liquid-compile 30 339 30 339
liquid-render 30 245 30 245
lobsters 30 22 30 22
mail 30 160 30 160
psych-load 30 15 30 15
railsbench 30 15 30 15
rubocop 30 179 30 179
ruby-lsp 30 167 30 167
sequel 30 285 30 285
binarytrees 30 86 30 86
blurhash 30 100 30 100
erubi 30 75 30 75
etanni 30 24 30 24
fannkuchredux 30 25 30 25
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 319 30 319
nqueens 30 319 30 319
optcarrot 30 15 30 15
protoboeuf 30 408 30 408
rack 30 176 30 176
ruby-json 30 15 30 15
rubykon 30 15 30 15
sudoku 30 26 30 26
tinygql 30 38 30 38
30k_ifelse 30 55 30 55
30k_methods 30 24 30 24
cfunc_itself 30 827 30 827
fib 30 418 30 418
getivar 30 1013 30 1013
keyword_args 30 646 30 646
respond_to 30 1462 30 1462
ruby-xor 30 111 30 111
setivar 30 2546 30 2546
setivar_object 30 404 30 404
setivar_young 30 424 30 424
str_concat 30 425 30 425
throw 30 765 30 765

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) 881754 760894 49 528 0 0% 0 0 16.33697
chunky-png (click) 333979 274395 87 1094 1 0% 0 0 33.052965
erubi-rails (click) 1687616 1472081 276 2972 6 0% 0 0 85.031337
hexapdf (click) 1407178 1150667 598 12720 41 0% 0 0 379.756768
liquid-c (click) 516808 453364 119 1754 5 0% 0 0 49.915421
liquid-compile (click) 441591 377210 151 2077 2 0% 0 0 64.68583
liquid-render (click) 615301 541938 136 2294 8 0% 0 0 65.613431
lobsters (click) 7807664 6530529 3211 51069 89 0% 0 0 1750.824372
mail (click) 722587 630959 346 4865 14 0% 0 0 146.998333
psych-load (click) 298270 277006 65 656 3 0% 0 0 21.028966
railsbench (click) 2961876 2474445 1634 15928 57 0% 0 0 468.87239
rubocop (click) 5320771 4597288 2901 48247 109 0% 4 0 1469.87154
ruby-lsp (click) 625605 518642 159 2803 28 0% 0 0 79.931906
sequel (click) 490542 426347 16 116 0 0% 0 0 4.238257
binarytrees (click) 9300 8262 11 75 0 0% 0 0 3.054733
blurhash (click) 50973 43758 32 460 0 0% 0 0 15.997116
erubi (click) 268015 240244 10 112 0 0% 0 0 3.912789
etanni (click) 29692 28216 11 91 0 0% 0 0 3.040579
fannkuchredux (click) 23856 29309 9 257 0 0% 0 0 8.50284
fluentd (click) 382136 331467 11 111 0 0% 0 0 3.730761
graphql (click) 433879 351607 70 685 0 0% 0 0 21.716179
graphql-native (click) 401449 340751 42 278 0 0% 0 0 9.559639
lee (click) 313294 278323 49 737 0 0% 0 0 23.853266
matmul (click) 12453 4981 12 126 0 0% 0 0 4.55448
nbody (click) 14798 17933 11 185 0 0% 0 0 5.265684
nqueens (click) 22703 29059 10 260 0 0% 0 0 8.077833
optcarrot (click) 311581 267827 192 4326 34 0% 0 0 104.538413
protoboeuf (click) 148013 144784 17 1378 0 0% 0 0 43.227539
rack (click) 269664 213977 31 323 0 0% 0 0 9.618442
ruby-json (click) 32870 30395 12 196 0 0% 0 0 6.051068
rubykon (click) 131218 132129 143 1501 3 0% 0 0 43.532116
sudoku (click) 45463 61097 11 507 0 0% 0 0 16.070146
tinygql (click) 310457 273364 63 787 5 0% 0 0 23.500401
30k_ifelse (click) 5137861 4732461 9264 50813 0 0% 0 0 1520.222685
30k_methods (click) 2019563 1594382 5782 19369 0 0% 0 0 528.089719
cfunc_itself (click) 7534 6180 9 70 0 0% 0 0 2.436382
fib (click) 4970 5003 8 49 0 0% 0 0 2.001449
getivar (click) 5963 6375 8 74 0 0% 0 0 2.631251
keyword_args (click) 8409 6912 10 72 0 0% 0 0 2.764481
respond_to (click) 8277 8274 9 85 0 0% 0 0 2.914164
ruby-xor (click) 7891 7863 9 87 0 0% 0 0 2.890732
setivar (click) 5102 5375 8 54 0 0% 0 0 2.123997
setivar_object (click) 5470 5395 8 54 0 0% 0 0 2.38547
setivar_young (click) 6182 6093 9 62 0 0% 0 0 2.575892
str_concat (click) 7774 7946 11 85 0 0% 0 0 3.052206
throw (click) 7895 6377 10 69 0 0% 0 0 2.430671

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.