YJIT Benchmarks

Details for Benchmarks at 2025-08-09 03:56:43 UTC

YJIT metrics from the yjit-bench suite using Ruby 60ca525fce.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 87.4% faster than CRuby 3.5.0dev
  • 3.6% faster than YJIT 3.3.6
On railsbench it is
  • 107.6% faster than CRuby 3.5.0dev
  • 10.5% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 29 minutes
aarch64 runtime: 3 hours, 49 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.5.0dev warmups CRuby 3.5.0dev iters YJIT 3.3.6 warmups YJIT 3.3.6 iters YJIT 3.5.0dev warmups YJIT 3.5.0dev iters
activerecord 5 83 5 83 50 156 50 156
chunky-png 5 31 5 32 50 15 50 24
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 380 50 591 50 540
liquid-compile 5 407 5 471 50 550 50 704
liquid-render 5 171 5 171 50 408 50 379
lobsters 5 19 5 19 50 10 50 10
mail 5 190 5 177 50 250 50 200
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 139 5 141 50 201 50 217
ruby-lsp 5 141 5 147 50 245 50 245
sequel 5 419 5 427 50 598 50 589
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 79 50 146 50 120
blurhash 5 82 5 87 50 127 50 144
erubi 5 126 5 145 50 99 50 132
etanni 5 91 5 95 50 53 50 68
fannkuchredux 5 52 5 57 50 97 50 98
fluentd 5 62 5 61 50 24 50 23
graphql 5 337 5 454 50 463 50 919
graphql-native 5 52 5 81 50 11 50 60
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 48 50 88 50 90
nbody 5 248 5 244 50 585 50 696
nqueens 5 120 5 130 50 74 50 560
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 176 5 186 50 621 50 736
protoboeuf-encode 5 179 5 198 50 326 50 799
rack 5 422 5 444 50 639 50 683
ruby-json 5 83 5 81 50 50 50 46
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 51 50 163 50 148
tinygql 5 41 5 43 50 42 50 48
30k_ifelse 5 28 5 27 50 214 50 184
30k_methods 5 39 5 38 50 481 50 467
attr_accessor 5 157 5 179 50 1719 50 1874
cfunc_itself 5 358 5 364 50 1137 50 1258
fib 5 127 5 138 50 903 50 930
getivar 5 213 5 297 50 2253 50 2386
keyword_args 5 104 5 107 50 1034 50 1243
loops-times 5 24 5 24 50 48 50 56
object-new 5 318 5 303 50 405 50 444
respond_to 5 133 5 136 50 3255 50 3932
ruby-xor 5 246 5 253 50 800 50 1279
setivar 5 361 5 340 50 3187 50 4905
setivar_object 5 353 5 306 50 682 50 604
setivar_young 5 367 5 308 50 700 50 615
str_concat 5 397 5 415 50 979 50 1204
throw 5 1274 5 1143 50 1739 50 1453

Different Ruby configurations want different amounts of warmup. With no JIT, CRuby needs hardly any. YJIT warms up fairly quickly, while some JITs may start slower as they do more advanced compilation.

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) 1551705 1309194 206 2590 0 0% 0 0 74.471881
chunky-png (click) 353883 311112 74 1322 1 0% 0 0 38.197653
erubi-rails (click) 1930077 1629352 263 3696 22 0% 0 0 102.000186
hexapdf (click) 1560281 1340458 593 15633 45 0% 0 0 452.139207
liquid-c (click) 583043 527735 114 2217 5 0% 0 0 61.751689
liquid-compile (click) 506946 455983 146 2708 2 0% 0 0 79.648491
liquid-render (click) 690426 644208 131 2933 8 0% 0 0 79.84887
lobsters (click) 8582673 7357107 3161 63818 118 0% 0 0 2188.901877
mail (click) 875132 814257 342 7227 40 0% 0 0 207.171467
psych-load (click) 331527 316143 61 830 2 0% 0 0 24.356637
railsbench (click) 3376373 2915696 1649 20163 58 0% 0 0 575.750387
rubocop (click) 6154497 5311027 3013 63529 161 0% 6 0 1843.288826
ruby-lsp (click) 994915 872813 345 6749 48 0% 1 0 184.615895
sequel (click) 530327 470564 11 119 0 0% 0 0 4.123418
shipit (click) 7293933 6265405 3386 54003 214 0% 0 0 1732.735858
binarytrees (click) 154320 151361 6 64 0 0% 0 0 2.49782
blurhash (click) 199337 195889 27 603 0 0% 0 0 17.782617
erubi (click) 294155 260553 5 125 0 0% 0 0 3.824611
etanni (click) 176957 175574 7 98 0 0% 0 0 3.147425
fannkuchredux (click) 171788 169014 3 399 0 0% 0 0 10.990196
fluentd (click) 507160 404563 7 115 0 0% 0 0 3.86586
graphql (click) 444824 401700 72 1918 17 0% 0 0 54.990085
graphql-native (click) 378256 356572 39 532 0 0% 0 0 14.180834
lee (click) 358366 310276 49 1070 0 0% 0 0 31.627697
matmul (click) 158172 149053 8 132 0 0% 0 0 4.105446
nbody (click) 160937 156493 6 238 0 0% 0 0 5.915905
nqueens (click) 169699 173218 5 387 0 0% 0 0 10.267835
optcarrot (click) 472476 475516 188 4740 34 0% 0 0 112.868782
protoboeuf (click) 316633 370664 11 2828 0 0% 0 0 75.264109
protoboeuf-encode (click) 389300 386423 13 1805 0 0% 0 0 45.503246
rack (click) 323277 272664 35 580 0 0% 0 0 15.375283
ruby-json (click) 167719 163604 8 204 0 0% 0 0 5.693791
rubyboy (click) 738631 670114 154 6860 42 0% 0 0 172.608764
rubykon (click) 291698 263894 135 2052 3 0% 0 0 55.990863
sudoku (click) 198625 193641 6 863 0 0% 0 0 23.561127
tinygql (click) 347409 309730 59 1031 5 0% 0 0 27.158372
30k_ifelse (click) 6367005 5283666 9259 75432 0 0% 0 0 1936.342965
30k_methods (click) 2381613 1737482 5778 19357 0 0% 0 0 478.518116
attr_accessor (click) 151419 152402 3 78 0 0% 0 0 2.036617
cfunc_itself (click) 152174 148605 4 53 0 0% 0 0 1.43009
fib (click) 149706 139253 3 30 0 0% 0 0 1.015986
getivar (click) 150859 143060 3 78 0 0% 0 0 1.878525
keyword_args (click) 153379 149435 5 56 0 0% 0 0 1.738009
loops-times (click) 154019 144271 5 93 0 0% 0 0 2.693877
object-new (click) 149453 139076 2 36 0 0% 0 0 1.041803
respond_to (click) 153498 151269 4 80 0 0% 0 0 2.149577
ruby-xor (click) 152918 144943 4 100 0 0% 0 0 2.632296
setivar (click) 149830 139984 3 46 0 0% 0 0 1.206202
setivar_object (click) 150449 140214 3 49 0 0% 0 0 1.334875
setivar_young (click) 151347 149317 4 63 0 0% 0 0 1.654969
str_concat (click) 152894 151483 6 82 0 0% 0 0 2.414098
throw (click) 153000 149074 5 53 0 0% 0 0 1.758383

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.