YJIT Benchmarks

Details for Benchmarks at 2024-12-06 03:48:40 UTC

YJIT metrics from the yjit-bench suite using Ruby 6ccaa37eb3.

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 90.1% faster than CRuby 3.4.0dev
  • 5.7% faster than YJIT 3.3.6
On railsbench it is
  • 91.3% faster than CRuby 3.4.0dev
  • 4.3% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 51 minutes
aarch64 runtime: 3 hours, 18 minutes

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.3.6 warmups CRuby 3.3.6 iters CRuby 3.4.0dev warmups CRuby 3.4.0dev iters YJIT 3.3.6 warmups YJIT 3.3.6 iters YJIT 3.4.0dev warmups YJIT 3.4.0dev iters
activerecord 5 82 5 83 50 156 50 165
chunky-png 5 31 5 32 50 15 50 34
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 411 5 422 50 590 50 627
liquid-compile 5 409 5 423 50 541 50 557
liquid-render 5 171 5 169 50 406 50 439
lobsters 5 20 5 20 50 10 50 10
mail 5 190 5 193 50 238 50 238
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 155 50 249 50 265
ruby-lsp 5 156 5 155 50 258 50 264
sequel 5 417 5 407 50 595 50 592
binarytrees 5 83 5 82 50 144 50 144
blurhash 5 82 5 83 50 127 50 145
erubi 5 75 5 148 50 89 50 144
etanni 5 91 5 100 50 54 50 69
fannkuchredux 5 52 5 55 50 101 50 106
fluentd 5 64 5 62 50 26 50 31
graphql 5 85 5 85 50 57 50 56
graphql-native 5 40 5 52 50 10 50 15
lee 5 22 5 23 50 10 50 10
loops-times 5 24 5 23 50 48 50 64
matmul 5 51 5 54 50 84 50 95
nbody 5 248 5 252 50 577 50 716
nqueens 5 120 5 120 50 75 50 563
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 173 5 176 50 621 50 747
protoboeuf-encode 5 179 5 194 50 329 50 788
rack 5 588 5 629 50 950 50 1070
ruby-json 5 84 5 85 50 49 50 51
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 164 50 162
tinygql 5 36 5 37 50 22 50 29
30k_ifelse 5 28 5 28 50 215 50 194
30k_methods 5 38 5 38 50 480 50 478
cfunc_itself 5 342 5 334 50 1046 50 1135
fib 5 126 5 127 50 901 50 963
getivar 5 207 5 214 50 2263 50 2625
keyword_args 5 105 5 105 50 959 50 1231
object-new 5 321 5 311 50 404 50 386
respond_to 5 133 5 136 50 3254 50 4036
ruby-xor 5 241 5 244 50 803 50 1380
setivar 5 358 5 357 50 3125 50 5702
setivar_object 5 354 5 340 50 783 50 839
setivar_young 5 374 5 344 50 767 50 844
str_concat 5 402 5 390 50 952 50 1216
throw 5 1262 5 1250 50 1747 50 1672

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) 1459402 1168289 213 2351 0 0% 0 0 68.226072
chunky-png (click) 342332 287949 88 1224 17 1% 0 0 36.032602
erubi-rails (click) 1951843 1683066 262 3043 19 0% 0 0 89.084918
hexapdf (click) 1511913 1190757 599 13981 174 1% 0 0 400.982039
liquid-c (click) 500729 448712 118 1846 5 0% 0 0 52.700556
liquid-compile (click) 424534 393576 150 2214 2 0% 0 0 67.666374
liquid-render (click) 609813 520764 135 2468 12 0% 0 0 70.070061
lobsters (click) 8405102 7119394 3214 54856 188 0% 0 0 1866.63174
mail (click) 776182 688657 347 5588 57 1% 0 0 162.121424
psych-load (click) 287905 245362 65 663 17 2% 0 0 20.583885
railsbench (click) 3371630 2836935 1645 17045 52 0% 0 0 497.242589
rubocop (click) 5869342 5044833 2891 52447 110 0% 4 0 1632.480123
ruby-lsp (click) 892772 779468 309 5004 26 0% 0 0 141.868872
sequel (click) 470799 403836 16 126 54 42% 0 0 4.581402
binarytrees (click) 14303 12795 14 125 0 0% 1 0 4.508771
blurhash (click) 58305 50994 31 515 1 0% 0 0 16.608456
erubi (click) 235658 213468 8 113 0 0% 0 0 3.754287
etanni (click) 32243 30528 9 94 0 0% 0 0 3.222828
fannkuchredux (click) 28719 35080 11 307 0 0% 1 0 9.14216
fluentd (click) 378733 315248 10 109 0 0% 0 0 3.823501
graphql (click) 405097 359447 69 695 0 0% 0 0 21.592377
graphql-native (click) 379476 341124 40 270 0 0% 0 0 9.12846
lee (click) 295248 261696 49 846 17 2% 0 0 26.336489
loops-times (click) 9398 9897 9 97 1 1% 0 0 3.332999
matmul (click) 13007 5881 12 133 4 3% 0 0 4.468218
nbody (click) 19555 23574 14 246 0 0% 1 0 6.615391
nqueens (click) 22324 29548 9 261 4 1% 0 0 7.706206
optcarrot (click) 328350 312990 191 4555 38 0% 0 0 106.666042
protoboeuf (click) 167305 158566 19 1652 0 0% 1 0 47.519902
protoboeuf-encode (click) 234990 231148 17 1255 0 0% 0 0 32.424135
rack (click) 244395 230787 37 424 15 3% 0 0 11.589057
ruby-json (click) 27119 23942 10 187 0 0% 0 0 5.370922
rubykon (click) 146625 126486 144 1630 7 0% 1 0 46.8832
sudoku (click) 48458 36262 10 544 7 1% 0 0 16.29104
tinygql (click) 265004 211313 62 795 20 2% 0 0 22.821274
30k_ifelse (click) 6316839 5792957 9263 56487 0 0% 1 0 1547.828629
30k_methods (click) 2236735 1594956 5782 19373 0 0% 0 0 452.452153
cfunc_itself (click) 11593 9808 13 112 0 0% 1 0 3.480177
fib (click) 8722 8374 11 87 0 0% 1 0 2.954818
getivar (click) 9718 10268 12 114 0 0% 1 0 3.461161
keyword_args (click) 12318 10276 13 110 0 0% 1 0 3.606816
object-new (click) 8145 7709 11 85 1 1% 1 0 2.888916
respond_to (click) 13998 6288 12 145 0 0% 1 0 4.242789
ruby-xor (click) 7492 8149 8 86 2 2% 0 0 2.659878
setivar (click) 5357 5942 8 58 0 0% 0 0 2.032594
setivar_object (click) 9398 9092 12 96 0 0% 1 0 3.222779
setivar_young (click) 10108 9814 13 104 0 0% 1 0 3.412708
str_concat (click) 12327 12217 15 131 3 2% 1 0 4.307974
throw (click) 12065 9846 14 109 0 0% 1 0 3.710853

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.