YJIT Benchmarks

Details for Benchmarks at 2024-04-26 19:08:17 UTC

YJIT metrics from the yjit-bench suite using Ruby 9688093124

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 69.3% faster than CRuby 3.4.0dev
On railsbench it is
  • 79.5% 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 513 30 513
chunky-png 30 31 30 31
erubi-rails 30 19 30 19
hexapdf 30 15 30 15
liquid-c 30 335 30 335
liquid-compile 30 339 30 339
liquid-render 30 249 30 249
lobsters 30 23 30 23
mail 30 162 30 162
psych-load 30 15 30 15
railsbench 30 15 30 15
rubocop 30 179 30 179
ruby-lsp 30 175 30 175
sequel 30 288 30 288
binarytrees 30 84 30 84
blurhash 30 101 30 101
erubi 30 75 30 75
etanni 30 24 30 24
fannkuchredux 30 23 30 23
fluentd 30 15 30 15
graphql 30 15 30 15
graphql-native 30 32 30 32
lee 30 19 30 19
matmul 30 18 30 18
nbody 30 340 30 340
nqueens 30 310 30 310
optcarrot 30 15 30 15
protoboeuf 30 388 30 388
rack 30 178 30 178
ruby-json 30 15 30 15
rubykon 30 15 30 15
sudoku 30 25 30 25
tinygql 30 40 30 40
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 941 30 941
keyword_args 30 592 30 592
respond_to 30 1480 30 1480
ruby-xor 30 102 30 102
setivar 30 2390 30 2390
setivar_object 30 347 30 347
setivar_young 30 382 30 382
str_concat 30 426 30 426
throw 30 760 30 760

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) 881632 760775 49 526 0 0% 0 0 17.043407
chunky-png (click) 333979 274395 87 1094 1 0% 0 0 33.140301
erubi-rails (click) 1691387 1476608 277 3010 6 0% 0 0 88.628006
hexapdf (click) 1407904 1126883 598 12726 41 0% 0 0 381.19151
liquid-c (click) 516808 404212 119 1757 5 0% 0 0 50.042889
liquid-compile (click) 441772 377414 151 2079 2 0% 0 0 65.766816
liquid-render (click) 615301 541938 136 2294 8 0% 0 0 65.353142
lobsters (click) 7794650 6520232 3211 51061 89 0% 0 0 1747.787146
mail (click) 722587 630959 346 4865 14 0% 0 0 147.462583
psych-load (click) 298270 277006 65 656 3 0% 0 0 21.036414
railsbench (click) 2961613 2490327 1634 15926 57 0% 0 0 471.069644
rubocop (click) 5319655 4530851 2901 48239 109 0% 4 0 1473.388451
ruby-lsp (click) 625605 518706 159 2803 28 0% 0 0 80.191548
sequel (click) 491630 427758 16 116 0 0% 0 0 4.253709
binarytrees (click) 9300 8262 11 75 0 0% 0 0 3.109868
blurhash (click) 50973 43758 32 460 0 0% 0 0 16.080246
erubi (click) 268015 240244 10 112 0 0% 0 0 3.952576
etanni (click) 29692 28216 11 91 0 0% 0 0 3.035626
fannkuchredux (click) 23856 29309 9 257 0 0% 0 0 8.439298
fluentd (click) 382835 340161 11 111 0 0% 0 0 3.748644
graphql (click) 433879 351541 70 685 0 0% 0 0 21.330404
graphql-native (click) 401449 340751 42 278 0 0% 0 0 9.519958
lee (click) 313294 278323 49 737 0 0% 0 0 23.83674
matmul (click) 12453 4981 12 126 0 0% 0 0 4.510137
nbody (click) 14798 17933 11 185 0 0% 0 0 5.276388
nqueens (click) 22703 29059 10 260 0 0% 0 0 8.136722
optcarrot (click) 311581 267827 192 4326 34 0% 0 0 104.904839
protoboeuf (click) 148013 144784 17 1378 0 0% 0 0 42.938153
rack (click) 269664 222137 31 323 0 0% 0 0 9.605866
ruby-json (click) 32870 30395 12 196 0 0% 0 0 6.051698
rubykon (click) 131218 132129 143 1501 3 0% 0 0 43.721235
sudoku (click) 45463 61097 11 507 0 0% 0 0 16.096668
tinygql (click) 310457 273364 63 787 5 0% 0 0 23.52474
30k_ifelse (click) 5137861 4732461 9264 50813 0 0% 0 0 1527.567785
30k_methods (click) 2019563 1594382 5782 19369 0 0% 0 0 523.360195
cfunc_itself (click) 7534 6180 9 70 0 0% 0 0 2.431479
fib (click) 4970 5003 8 49 0 0% 0 0 2.023442
getivar (click) 5963 6375 8 74 0 0% 0 0 2.358312
keyword_args (click) 8409 6912 10 72 0 0% 0 0 2.781012
respond_to (click) 8277 8274 9 85 0 0% 0 0 2.861223
ruby-xor (click) 7891 7863 9 87 0 0% 0 0 2.906493
setivar (click) 5102 5375 8 54 0 0% 0 0 2.137092
setivar_object (click) 5470 5395 8 54 0 0% 0 0 2.391606
setivar_young (click) 6182 6093 9 62 0 0% 0 0 2.593235
str_concat (click) 7774 7946 11 85 0 0% 0 0 3.02958
throw (click) 7895 6377 10 69 0 0% 0 0 2.465383

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.