YJIT Benchmarks

Details for Benchmarks at 2024-12-23 03:44:52 UTC

YJIT metrics from the yjit-bench suite using Ruby b19fcd02fa.

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 90.3% faster than CRuby 3.4.0dev
  • 4.4% faster than YJIT 3.3.6
On railsbench it is
  • 92.4% faster than CRuby 3.4.0dev
  • 2.8% faster than YJIT 3.3.6
x86_64 runtime: 3 hours, 51 minutes
aarch64 runtime: 3 hours, 20 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 82 50 155 50 160
chunky-png 5 31 5 32 50 16 50 33
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 419 5 416 50 588 50 618
liquid-compile 5 408 5 408 50 572 50 558
liquid-render 5 172 5 170 50 403 50 433
lobsters 5 20 5 20 50 10 50 10
mail 5 189 5 188 50 236 50 213
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 154 50 249 50 265
ruby-lsp 5 157 5 140 50 258 50 272
sequel 5 430 5 416 50 566 50 556
binarytrees 5 84 5 82 50 144 50 140
blurhash 5 82 5 83 50 127 50 145
erubi 5 114 5 144 50 99 50 150
etanni 5 91 5 99 50 54 50 71
fannkuchredux 5 52 5 55 50 101 50 105
fluentd 5 64 5 60 50 25 50 28
graphql 5 85 5 85 50 57 50 57
graphql-native 5 40 5 52 50 10 50 15
lee 5 23 5 23 50 10 50 10
loops-times 5 24 5 23 50 48 50 64
matmul 5 50 5 51 50 85 50 93
nbody 5 248 5 258 50 577 50 706
nqueens 5 120 5 115 50 75 50 562
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 176 5 174 50 620 50 727
protoboeuf-encode 5 178 5 198 50 326 50 816
rack 5 588 5 609 50 951 50 1044
ruby-json 5 83 5 84 50 49 50 50
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 163 50 160
tinygql 5 36 5 37 50 23 50 28
30k_ifelse 5 28 5 28 50 215 50 205
30k_methods 5 38 5 38 50 484 50 476
cfunc_itself 5 345 5 328 50 1046 50 1145
fib 5 116 5 126 50 908 50 937
getivar 5 207 5 221 50 2257 50 2630
keyword_args 5 106 5 104 50 959 50 1134
object-new 5 321 5 310 50 404 50 376
respond_to 5 133 5 136 50 3260 50 3979
ruby-xor 5 238 5 243 50 803 50 1379
setivar 5 358 5 361 50 3123 50 5709
setivar_object 5 374 5 337 50 747 50 842
setivar_young 5 374 5 359 50 770 50 849
str_concat 5 401 5 393 50 969 50 1202
throw 5 1262 5 1279 50 1732 50 1699

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) 1416399 1204145 210 2207 0 0% 0 0 64.898265
chunky-png (click) 296320 261509 85 1127 1 0% 0 0 33.621995
erubi-rails (click) 1923568 1661054 259 2944 19 0% 0 0 82.002747
hexapdf (click) 1442291 1206246 597 13149 41 0% 0 0 379.269062
liquid-c (click) 478122 340292 115 1747 5 0% 0 0 48.689172
liquid-compile (click) 404258 362533 147 2093 2 0% 0 0 65.438704
liquid-render (click) 580285 520273 132 2315 8 0% 0 0 65.811848
lobsters (click) 8106113 6766526 3212 52467 169 0% 0 0 1817.681929
mail (click) 758422 660442 343 5321 14 0% 0 0 158.326863
psych-load (click) 247408 209352 62 620 3 0% 0 0 19.514962
railsbench (click) 3249740 2810529 1642 16201 52 0% 0 0 471.402523
rubocop (click) 5684957 5007860 2888 50517 110 0% 4 0 1494.364538
ruby-lsp (click) 814680 692075 306 4721 24 0% 0 0 133.866138
sequel (click) 453231 388080 12 97 0 0% 0 0 3.562562
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.370938
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.203807
erubi (click) 227315 187960 6 100 0 0% 0 0 3.304698
etanni (click) 31129 29637 8 87 0 0% 0 0 2.969558
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.468675
fluentd (click) 337654 312651 8 96 0 0% 0 0 3.360002
graphql (click) 414608 371760 67 679 0 0% 0 0 21.207319
graphql-native (click) 370186 315967 38 258 0 0% 0 0 8.806355
lee (click) 272011 238179 46 749 0 0% 0 0 23.722053
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.366399
matmul (click) 10988 3769 9 112 0 0% 0 0 3.642041
nbody (click) 13396 17343 7 175 0 0% 0 0 4.57605
nqueens (click) 20494 27605 6 242 0 0% 0 0 6.972358
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 103.730816
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.647753
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.414155
rack (click) 237530 198561 33 388 0 0% 0 0 10.004081
ruby-json (click) 24498 21285 9 181 0 0% 0 0 5.068774
rubykon (click) 134396 137392 138 1492 3 0% 0 0 43.172396
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.453788
tinygql (click) 272209 219326 59 768 5 0% 0 0 22.299212
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1434.250009
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 457.680017
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.519628
fib (click) 2930 3118 4 29 0 0% 0 0 1.124475
getivar (click) 3832 4970 4 54 0 0% 0 0 1.491273
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.804292
object-new (click) 2264 2350 3 25 0 0% 0 0 0.955684
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.893163
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 2.107404
setivar (click) 2983 3646 4 34 0 0% 0 0 1.142192
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.248101
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.524691
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.107095
throw (click) 6179 4548 6 49 0 0% 0 0 1.698023

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.