YJIT Benchmarks

Details for Benchmarks at 2024-12-21 03:43:34 UTC

YJIT metrics from the yjit-bench suite using Ruby 6114094aa0.

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 90.7% faster than CRuby 3.4.0dev
  • 4.8% faster than YJIT 3.3.6
On railsbench it is
  • 98.1% faster than CRuby 3.4.0dev
  • 5.4% 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 156 50 162
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 412 5 415 50 593 50 610
liquid-compile 5 408 5 406 50 538 50 584
liquid-render 5 173 5 170 50 403 50 417
lobsters 5 20 5 20 50 10 50 10
mail 5 195 5 184 50 250 50 238
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 155 50 250 50 266
ruby-lsp 5 155 5 156 50 258 50 260
sequel 5 428 5 415 50 596 50 591
binarytrees 5 84 5 82 50 144 50 140
blurhash 5 82 5 83 50 127 50 145
erubi 5 123 5 150 50 52 50 150
etanni 5 91 5 98 50 54 50 71
fannkuchredux 5 52 5 55 50 101 50 105
fluentd 5 63 5 61 50 25 50 28
graphql 5 84 5 85 50 57 50 57
graphql-native 5 40 5 52 50 10 50 14
lee 5 22 5 23 50 10 50 10
loops-times 5 24 5 23 50 48 50 65
matmul 5 51 5 51 50 85 50 93
nbody 5 247 5 258 50 577 50 706
nqueens 5 120 5 113 50 75 50 563
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 179 5 174 50 620 50 726
protoboeuf-encode 5 180 5 198 50 328 50 817
rack 5 582 5 609 50 947 50 1050
ruby-json 5 83 5 84 50 49 50 51
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 164 50 160
tinygql 5 36 5 37 50 23 50 28
30k_ifelse 5 28 5 28 50 214 50 207
30k_methods 5 38 5 38 50 484 50 478
cfunc_itself 5 345 5 325 50 1046 50 1145
fib 5 127 5 126 50 909 50 937
getivar 5 207 5 220 50 2259 50 2629
keyword_args 5 107 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 3977
ruby-xor 5 240 5 242 50 803 50 1379
setivar 5 358 5 361 50 3127 50 5710
setivar_object 5 374 5 338 50 746 50 841
setivar_young 5 374 5 359 50 769 50 848
str_concat 5 401 5 390 50 971 50 1202
throw 5 1264 5 1281 50 1725 50 1693

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) 1443112 1226781 210 2207 0 0% 0 0 64.708985
chunky-png (click) 319554 240815 85 1127 1 0% 0 0 33.155662
erubi-rails (click) 1918258 1698936 259 2972 19 0% 0 0 82.050357
hexapdf (click) 1464804 1192534 596 13145 41 0% 0 0 380.24374
liquid-c (click) 503833 444572 115 1750 5 0% 0 0 50.032478
liquid-compile (click) 426000 357071 147 2080 2 0% 0 0 64.657782
liquid-render (click) 606007 553352 132 2315 8 0% 0 0 65.603212
lobsters (click) 8120405 6818643 3212 52572 169 0% 0 0 1796.596431
mail (click) 761147 727493 343 5321 14 0% 0 0 154.112653
psych-load (click) 251018 217206 62 618 3 0% 0 0 19.265179
railsbench (click) 3218671 2817447 1642 16197 52 0% 0 0 494.700937
rubocop (click) 5660622 4977842 2888 50514 110 0% 4 0 1485.118481
ruby-lsp (click) 848542 716937 306 4737 24 0% 0 0 132.383832
sequel (click) 479560 410825 12 97 0 0% 0 0 3.908931
binarytrees (click) 7424 6400 7 55 0 0% 0 0 2.378333
blurhash (click) 50449 51120 28 441 0 0% 0 0 14.283672
erubi (click) 226459 179043 6 100 0 0% 0 0 3.308796
etanni (click) 31129 29637 8 87 0 0% 0 0 2.978147
fannkuchredux (click) 23377 30267 4 252 0 0% 0 0 7.416017
fluentd (click) 367104 328637 8 96 0 0% 0 0 3.351551
graphql (click) 398169 354195 67 679 0 0% 0 0 21.39149
graphql-native (click) 367168 319706 38 258 0 0% 0 0 8.710182
lee (click) 298835 268414 46 749 0 0% 0 0 23.585778
loops-times (click) 7034 7662 6 74 0 0% 0 0 2.37773
matmul (click) 10988 3769 9 112 0 0% 0 0 3.624804
nbody (click) 13396 17343 7 175 0 0% 0 0 4.55717
nqueens (click) 20494 27605 6 242 0 0% 0 0 7.044494
optcarrot (click) 319427 243061 189 4402 34 0% 0 0 103.369214
protoboeuf (click) 151228 130005 13 1484 0 0% 0 0 42.182553
protoboeuf-encode (click) 221443 220595 15 1223 0 0% 0 0 31.296859
rack (click) 238691 174828 33 388 0 0% 0 0 10.375787
ruby-json (click) 24261 20954 9 181 0 0% 0 0 5.099585
rubykon (click) 134396 137392 138 1492 3 0% 0 0 42.834321
sudoku (click) 45866 41280 8 521 0 0% 0 0 15.379994
tinygql (click) 294994 241957 59 765 5 0% 0 0 22.259491
30k_ifelse (click) 5659135 5285109 9260 51671 0 0% 0 0 1425.161976
30k_methods (click) 2234900 1593140 5779 19354 0 0% 0 0 451.869535
cfunc_itself (click) 5461 4343 5 50 0 0% 0 0 1.494476
fib (click) 2930 3118 4 29 0 0% 0 0 1.138711
getivar (click) 3832 4970 4 54 0 0% 0 0 1.476892
keyword_args (click) 6651 5070 6 52 0 0% 0 0 1.762488
object-new (click) 2264 2350 3 25 0 0% 0 0 0.875619
respond_to (click) 6199 6484 5 65 0 0% 0 0 1.901054
ruby-xor (click) 5662 6266 5 67 0 0% 0 0 2.005345
setivar (click) 2983 3646 4 34 0 0% 0 0 1.091535
setivar_object (click) 3512 3794 4 36 0 0% 0 0 1.248899
setivar_young (click) 4222 4516 5 44 0 0% 0 0 1.443607
str_concat (click) 5800 6273 7 65 0 0% 0 0 2.086732
throw (click) 6179 4548 6 49 0 0% 0 0 1.65949

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.