YJIT Benchmarks

Details for Benchmarks at 2024-10-25 03:45:40 UTC

YJIT metrics from the yjit-bench suite using Ruby 2b98545646

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 90.7% faster than CRuby 3.4.0dev
  • 4.5% faster than YJIT 3.3.4
On railsbench it is
  • 108.2% faster than CRuby 3.4.0dev
  • 6.2% faster than 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 5 83 5 80 50 156 50 163
chunky-png 5 31 5 31 50 15 50 21
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 410 5 419 50 569 50 620
liquid-compile 5 412 5 403 50 550 50 556
liquid-render 5 167 5 165 50 402 50 436
lobsters 5 20 5 20 50 10 50 10
mail 5 189 5 193 50 238 50 239
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 253 50 267
ruby-lsp 5 156 5 156 50 246 50 263
sequel 5 431 5 418 50 597 50 574
binarytrees 5 84 5 83 50 149 50 148
blurhash 5 82 5 84 50 128 50 145
erubi 5 113 5 141 50 85 50 122
etanni 5 90 5 97 50 52 50 61
fannkuchredux 5 52 5 54 50 101 50 108
fluentd 5 61 5 61 50 23 50 24
graphql 5 85 5 84 50 57 50 56
graphql-native 5 40 5 52 50 10 50 13
lee 5 23 5 23 50 10 50 10
matmul 5 52 5 52 50 88 50 99
nbody 5 247 5 259 50 595 50 706
nqueens 5 119 5 121 50 74 50 562
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 172 5 172 50 616 50 678
protoboeuf-encode 5 179 5 193 50 326 50 797
rack 5 579 5 614 50 963 50 1079
ruby-json 5 84 5 83 50 50 50 48
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 48 50 164 50 159
tinygql 5 37 5 36 50 23 50 25
30k_ifelse 5 28 5 28 50 215 50 193
30k_methods 5 38 5 38 50 482 50 478
cfunc_itself 5 347 5 343 50 1046 50 1136
fib 5 127 5 126 50 900 50 963
getivar 5 206 5 214 50 2270 50 2619
keyword_args 5 108 5 103 50 959 50 1231
object-new 5 321 5 272 50 407 50 311
respond_to 5 137 5 139 50 3258 50 4035
ruby-xor 5 242 5 238 50 803 50 1380
setivar 5 361 5 361 50 3126 50 5718
setivar_object 5 372 5 348 50 763 50 844
setivar_young 5 372 5 343 50 771 50 844
str_concat 5 399 5 408 50 989 50 1162
throw 5 1273 5 1164 50 1726 50 1423

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) 1477121 1272441 213 2296 0 0% 0 0 65.727621
chunky-png (click) 325145 293634 86 1133 1 0% 0 0 32.987793
erubi-rails (click) 1945072 1658010 249 2885 8 0% 0 0 78.16164
hexapdf (click) 1519700 1337878 597 13852 40 0% 0 0 393.366238
liquid-c (click) 500295 430744 122 1906 5 0% 0 0 52.675883
liquid-compile (click) 422539 397569 150 2218 2 0% 0 0 68.453401
liquid-render (click) 639408 555931 139 2520 12 0% 0 0 69.980677
lobsters (click) 8307681 7021984 3213 54267 181 0% 0 0 1817.808179
mail (click) 741073 634876 346 5481 16 0% 0 0 157.136086
psych-load (click) 261398 237748 64 654 3 0% 0 0 20.209368
railsbench (click) 3311314 2876629 1635 16733 41 0% 0 0 477.37907
rubocop (click) 5835438 4961837 2891 52116 110 0% 4 0 1519.135593
ruby-lsp (click) 855416 736206 308 4990 26 0% 0 0 138.31629
sequel (click) 492262 380307 15 118 0 0% 0 0 4.310908
binarytrees (click) 9627 8546 8 75 0 0% 0 0 2.999855
blurhash (click) 57136 49713 29 501 0 0% 0 0 16.067397
erubi (click) 232734 211365 9 108 0 0% 0 0 3.633713
etanni (click) 27697 25886 9 81 0 0% 0 0 2.731549
fannkuchredux (click) 24038 30826 5 257 0 0% 0 0 7.734462
fluentd (click) 346328 296407 10 109 0 0% 0 0 3.846348
graphql (click) 392558 354186 69 695 0 0% 0 0 20.448903
graphql-native (click) 391191 326035 40 270 0 0% 0 0 8.615351
lee (click) 306845 244891 48 803 0 0% 0 0 24.635553
matmul (click) 11838 4563 10 119 0 0% 0 0 3.973717
nbody (click) 14884 19325 8 196 0 0% 0 0 5.128259
nqueens (click) 21155 28164 7 247 0 0% 0 0 7.289433
optcarrot (click) 327944 312320 190 4549 34 0% 0 0 103.552816
protoboeuf (click) 163392 155036 14 1610 0 0% 0 0 45.704532
protoboeuf-encode (click) 234584 230620 16 1249 0 0% 0 0 32.16464
rack (click) 269178 253674 36 422 0 0% 0 0 11.318282
ruby-json (click) 25539 21972 10 187 0 0% 0 0 5.32458
rubykon (click) 140297 120385 138 1566 3 0% 0 0 44.812618
sudoku (click) 48090 43120 9 536 0 0% 0 0 16.096925
tinygql (click) 263730 241731 61 787 5 0% 0 0 22.532473
30k_ifelse (click) 6315665 5791705 9261 56473 0 0% 0 0 1577.18182
30k_methods (click) 2235566 1593704 5780 19359 0 0% 0 0 456.511438
cfunc_itself (click) 6912 5554 7 62 0 0% 0 0 1.962255
fib (click) 4041 4120 5 37 0 0% 0 0 1.474376
getivar (click) 5037 6014 6 64 0 0% 0 0 1.917221
keyword_args (click) 7637 6022 7 60 0 0% 0 0 1.994916
object-new (click) 3469 3394 5 35 0 0% 0 0 1.370662
respond_to (click) 9322 2039 6 95 0 0% 0 0 2.770072
ruby-xor (click) 6437 6880 6 72 0 0% 0 0 2.21518
setivar (click) 4188 4690 6 44 0 0% 0 0 1.557015
setivar_object (click) 4717 4838 6 46 0 0% 0 0 1.755743
setivar_young (click) 5427 5560 7 54 0 0% 0 0 1.900007
str_concat (click) 7646 7893 9 81 0 0% 0 0 2.723825
throw (click) 7384 5592 8 59 0 0% 0 0 2.113919

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.