YJIT Benchmarks

Details for Benchmarks at 2024-08-14 19:08:33 UTC

YJIT metrics from the yjit-bench suite using Ruby 002e785e77

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 73.8% faster than CRuby 3.4.0dev
  • 2.9% faster than YJIT 3.3.4
On railsbench it is
  • 79.0% faster than CRuby 3.4.0dev
  • the same speed as YJIT 3.3.4

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.4 warmups CRuby 3.3.4 iters CRuby 3.4.0dev warmups CRuby 3.4.0dev iters YJIT 3.3.4 warmups YJIT 3.3.4 iters YJIT 3.4.0dev warmups YJIT 3.4.0dev iters
activerecord 10 49 10 50 10 118 10 118
chunky-png 10 18 10 18 10 36 10 40
erubi-rails 10 10 10 10 10 21 10 20
hexapdf 10 10 10 10 10 10 10 10
liquid-c 10 342 10 349 10 498 10 510
liquid-compile 10 344 10 341 10 500 10 523
liquid-render 10 137 10 134 10 355 10 373
lobsters 10 14 10 13 10 24 10 23
mail 10 159 10 156 10 238 10 226
psych-load 10 10 10 10 10 10 10 10
railsbench 10 10 10 10 10 10 10 10
rubocop 10 136 10 132 10 234 10 241
ruby-lsp 10 130 10 125 10 216 10 213
sequel 10 317 10 315 10 438 10 427
binarytrees 10 51 10 50 10 118 10 107
blurhash 10 62 10 63 10 120 10 147
erubi 10 83 10 95 10 99 10 122
etanni 10 60 10 64 10 69 10 76
fannkuchredux 10 10 10 10 10 17 10 18
fluentd 10 10 10 10 10 10 10 10
graphql 10 10 10 10 10 10 10 10
graphql-native 10 29 10 30 10 33 10 38
lee 10 11 10 12 10 19 10 21
matmul 10 10 10 10 10 15 10 18
nbody 10 203 10 234 10 421 10 519
nqueens 10 112 10 114 10 113 10 444
optcarrot 10 10 10 10 10 10 10 10
protoboeuf 10 181 10 181 10 572 10 678
protoboeuf-encode 10 125 10 162 10 283 10 640
rack 10 461 10 480 10 836 10 920
ruby-json 10 10 10 10 10 10 10 10
rubykon 10 10 10 10 10 10 10 10
sudoku 10 10 10 10 10 28 10 32
tinygql 10 23 10 23 10 51 10 53
30k_ifelse 10 10 10 10 10 71 10 69
30k_methods 10 10 10 10 10 26 10 26
cfunc_itself 10 249 10 256 10 1108 10 1213
fib 10 102 10 98 10 615 10 618
getivar 10 214 10 243 10 1249 10 1747
keyword_args 10 90 10 88 10 729 10 947
object-new 10 226 10 216 10 309 10 286
respond_to 10 91 10 86 10 1786 10 2096
ruby-xor 10 30 10 28 10 92 10 160
setivar 10 348 10 415 10 2319 10 4880
setivar_object 10 216 10 243 10 536 10 475
setivar_young 10 216 10 245 10 528 10 471
str_concat 10 319 10 355 10 659 10 698
throw 10 969 10 908 10 1342 10 1212

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) 1349470 1202211 214 2169 0 0% 0 0 81.52365
chunky-png (click) 277989 278366 83 1054 1 0% 0 0 36.103327
erubi-rails (click) 1643745 1382589 274 2908 6 0% 0 0 102.122241
hexapdf (click) 1253324 1079484 505 11812 39 0% 0 0 414.001389
liquid-c (click) 463668 364091 119 1768 5 0% 0 0 57.554593
liquid-compile (click) 385107 347857 151 2064 2 0% 0 0 73.490295
liquid-render (click) 561082 519400 136 2323 8 0% 0 0 77.603086
lobsters (click) 7557759 6164377 3081 49718 81 0% 0 0 2256.218216
mail (click) 715631 687953 347 5554 14 0% 0 0 188.73454
psych-load (click) 235053 207991 61 594 3 0% 0 0 21.716386
railsbench (click) 2901752 2441667 1636 15974 57 0% 0 0 591.923675
rubocop (click) 5430593 4529082 2894 50956 114 0% 4 0 1940.40897
ruby-lsp (click) 808908 701570 309 4750 24 0% 0 0 160.99258
sequel (click) 431378 361804 16 118 0 0% 0 0 5.250142
binarytrees (click) 8404 7594 9 66 0 0% 0 0 2.993389
blurhash (click) 50094 43901 30 453 0 0% 0 0 17.71209
erubi (click) 216779 198128 10 112 0 0% 0 0 4.651806
etanni (click) 24958 23898 11 92 0 0% 0 0 3.559141
fannkuchredux (click) 23706 31291 4 252 0 0% 0 0 9.658862
fluentd (click) 319475 282310 4 28 0 0% 0 0 1.281103
graphql (click) 378565 307301 66 650 0 0% 0 0 23.175767
graphql-native (click) 348422 298062 41 273 0 0% 0 0 10.613732
lee (click) 242902 178685 34 531 0 0% 0 0 19.550316
matmul (click) 7957 8968 7 82 0 0% 0 0 3.231984
nbody (click) 15014 19017 10 191 0 0% 0 0 6.184517
nqueens (click) 23822 23823 9 279 0 0% 0 0 10.400171
optcarrot (click) 309010 266612 187 4398 34 0% 0 0 119.683626
protoboeuf (click) 139992 122036 16 1364 0 0% 0 0 48.97841
protoboeuf-encode (click) 212046 158560 18 1189 0 0% 0 0 36.720801
rack (click) 225946 191238 37 408 0 0% 0 0 13.041986
ruby-json (click) 19008 16632 7 164 0 0% 0 0 5.423496
rubykon (click) 128589 131709 136 1482 3 0% 0 0 48.714284
sudoku (click) 45292 24766 7 516 0 0% 0 0 19.276512
tinygql (click) 254562 235271 58 735 5 0% 0 0 24.537946
30k_ifelse (click) 5134313 4729205 9258 50774 0 0% 0 0 1930.958656
30k_methods (click) 2016559 1591611 5777 19335 0 0% 0 0 536.939736
cfunc_itself (click) 7172 6017 8 66 0 0% 0 0 2.370244
fib (click) 4609 4792 7 45 0 0% 0 0 1.838973
getivar (click) 5575 6644 7 70 0 0% 0 0 2.322947
keyword_args (click) 8042 6744 9 68 0 0% 0 0 2.675004
object-new (click) 4039 4024 6 41 0 0% 0 0 1.853824
respond_to (click) 7910 8158 8 81 0 0% 0 0 2.890919
ruby-xor (click) 5219 5772 4 58 0 0% 0 0 1.956735
setivar (click) 4726 5320 7 50 0 0% 0 0 1.864499
setivar_object (click) 5109 5228 7 50 0 0% 0 0 1.957286
setivar_young (click) 5819 5950 8 58 0 0% 0 0 2.219806
str_concat (click) 7415 7947 10 81 0 0% 0 0 3.252133
throw (click) 7538 6222 9 65 0 0% 0 0 2.650876

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.