YJIT Benchmarks

Details for Benchmarks at 2024-10-28 03:46:51 UTC

YJIT metrics from the yjit-bench suite using Ruby 70d20ce473

Using the geomean of the headline benchmarks for x86 YJIT 3.4.0dev is
  • 91.3% faster than CRuby 3.4.0dev
  • 5.2% faster than YJIT 3.3.4
On railsbench it is
  • 105.0% faster than CRuby 3.4.0dev
  • 4.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 79 50 149 50 158
chunky-png 5 31 5 31 50 15 50 20
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 411 5 417 50 577 50 630
liquid-compile 5 415 5 404 50 543 50 556
liquid-render 5 168 5 166 50 403 50 429
lobsters 5 20 5 20 50 10 50 10
mail 5 193 5 186 50 250 50 250
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 252 50 267
ruby-lsp 5 156 5 156 50 233 50 260
sequel 5 417 5 418 50 599 50 586
binarytrees 5 84 5 83 50 146 50 148
blurhash 5 82 5 84 50 127 50 144
erubi 5 122 5 142 50 95 50 38
etanni 5 90 5 97 50 52 50 60
fannkuchredux 5 52 5 54 50 101 50 108
fluentd 5 61 5 61 50 23 50 23
graphql 5 85 5 86 50 57 50 56
graphql-native 5 39 5 53 50 10 50 13
lee 5 23 5 22 50 10 50 10
matmul 5 51 5 52 50 88 50 99
nbody 5 248 5 261 50 595 50 706
nqueens 5 119 5 121 50 74 50 562
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 173 50 616 50 678
protoboeuf-encode 5 179 5 194 50 328 50 793
rack 5 578 5 628 50 952 50 1048
ruby-json 5 85 5 82 50 51 50 49
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 49 50 164 50 159
tinygql 5 37 5 37 50 24 50 26
30k_ifelse 5 28 5 28 50 215 50 194
30k_methods 5 39 5 38 50 482 50 478
cfunc_itself 5 344 5 344 50 1046 50 1136
fib 5 126 5 127 50 900 50 962
getivar 5 206 5 216 50 2267 50 2620
keyword_args 5 108 5 103 50 959 50 1231
object-new 5 321 5 272 50 405 50 309
respond_to 5 137 5 139 50 3257 50 4037
ruby-xor 5 243 5 238 50 803 50 1376
setivar 5 360 5 355 50 3126 50 5718
setivar_object 5 372 5 347 50 766 50 786
setivar_young 5 371 5 344 50 771 50 845
str_concat 5 399 5 410 50 990 50 1166
throw 5 1272 5 1161 50 1730 50 1415

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) 1476252 1255190 213 2296 0 0% 0 0 65.312872
chunky-png (click) 287469 271331 86 1133 1 0% 0 0 33.028688
erubi-rails (click) 1927788 1603557 249 2857 8 0% 0 0 77.592591
hexapdf (click) 1523703 1341262 597 13852 40 0% 0 0 392.445906
liquid-c (click) 502787 424008 122 1906 5 0% 0 0 52.960079
liquid-compile (click) 444479 383723 150 2197 2 0% 0 0 67.315317
liquid-render (click) 639366 564060 139 2520 12 0% 0 0 69.573731
lobsters (click) 8316777 7106940 3213 54377 181 0% 0 0 1817.33481
mail (click) 742113 676858 346 5481 16 0% 0 0 157.551345
psych-load (click) 257862 223538 64 656 3 0% 0 0 20.4425
railsbench (click) 3324648 2904262 1635 16746 41 0% 0 0 480.678056
rubocop (click) 5835433 4945522 2891 52116 110 0% 4 0 1521.116685
ruby-lsp (click) 850986 743515 308 4990 26 0% 0 0 139.649044
sequel (click) 467047 441048 15 117 0 0% 0 0 4.112995
binarytrees (click) 9627 8546 8 75 0 0% 0 0 3.032935
blurhash (click) 57136 49713 29 501 0 0% 0 0 16.212166
erubi (click) 251445 235512 9 108 0 0% 0 0 3.683105
etanni (click) 27632 25855 9 81 0 0% 0 0 2.737985
fannkuchredux (click) 24038 30826 5 257 0 0% 0 0 7.7351
fluentd (click) 350595 308577 10 109 0 0% 0 0 3.775166
graphql (click) 427384 382156 69 695 0 0% 0 0 20.331162
graphql-native (click) 393483 336182 40 270 0 0% 0 0 8.695288
lee (click) 310446 256143 48 803 0 0% 0 0 24.540972
matmul (click) 11838 4563 10 119 0 0% 0 0 3.95469
nbody (click) 14884 19325 8 196 0 0% 0 0 5.109024
nqueens (click) 21155 28164 7 247 0 0% 0 0 7.200985
optcarrot (click) 327944 312320 190 4549 34 0% 0 0 105.392892
protoboeuf (click) 163392 155036 14 1610 0 0% 0 0 45.945917
protoboeuf-encode (click) 234584 230620 16 1249 0 0% 0 0 31.980853
rack (click) 234007 200730 36 417 0 0% 0 0 10.919417
ruby-json (click) 25474 21941 10 187 0 0% 0 0 5.359361
rubykon (click) 141232 121417 138 1575 3 0% 0 0 45.220837
sudoku (click) 48090 43120 9 536 0 0% 0 0 15.979532
tinygql (click) 275776 247699 61 787 5 0% 0 0 22.440623
30k_ifelse (click) 6315665 5791705 9261 56473 0 0% 0 0 1581.539081
30k_methods (click) 2235566 1593704 5780 19359 0 0% 0 0 455.524249
cfunc_itself (click) 6912 5554 7 62 0 0% 0 0 1.93987
fib (click) 4041 4120 5 37 0 0% 0 0 1.398074
getivar (click) 5037 6014 6 64 0 0% 0 0 1.92075
keyword_args (click) 7637 6022 7 60 0 0% 0 0 2.010085
object-new (click) 3469 3394 5 35 0 0% 0 0 1.35652
respond_to (click) 9322 2039 6 95 0 0% 0 0 2.689422
ruby-xor (click) 6437 6880 6 72 0 0% 0 0 2.198733
setivar (click) 4188 4690 6 44 0 0% 0 0 1.544752
setivar_object (click) 4717 4838 6 46 0 0% 0 0 1.697487
setivar_young (click) 5427 5560 7 54 0 0% 0 0 1.835915
str_concat (click) 7646 7893 9 81 0 0% 0 0 2.719376
throw (click) 7384 5592 8 59 0 0% 0 0 2.150995

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.