YJIT Benchmarks

Details for Benchmarks at 2025-07-01 04:01:27 UTC

YJIT metrics from the yjit-bench suite using Ruby c3bdf7043c.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 88.4% faster than CRuby 3.5.0dev
  • 3.1% faster than YJIT 3.3.6
On railsbench it is
  • 108.8% faster than CRuby 3.5.0dev
  • 8.7% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 27 minutes
aarch64 runtime: 3 hours, 48 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 80 5 75 50 153 50 158
chunky-png 5 31 5 32 50 14 50 23
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 418 5 414 50 563 50 510
liquid-compile 5 406 5 455 50 544 50 676
liquid-render 5 170 5 162 50 403 50 377
lobsters 5 19 5 19 50 10 50 10
mail 5 195 5 168 50 235 50 187
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 157 5 156 50 251 50 255
ruby-lsp 5 160 5 153 50 246 50 263
sequel 5 426 5 416 50 569 50 583
binarytrees 5 84 5 80 50 146 50 117
blurhash 5 82 5 85 50 127 50 144
erubi 5 126 5 143 50 98 50 141
etanni 5 91 5 97 50 53 50 67
fannkuchredux 5 52 5 57 50 97 50 95
fluentd 5 63 5 63 50 26 50 31
graphql 5 85 5 82 50 57 50 56
graphql-native 5 40 5 44 50 10 50 16
lee 5 23 5 23 50 10 50 10
matmul 5 51 5 53 50 88 50 84
nbody 5 249 5 264 50 585 50 684
nqueens 5 120 5 126 50 75 50 548
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 159 50 620 50 738
protoboeuf-encode 5 179 5 200 50 327 50 770
rack 5 576 5 611 50 962 50 1023
ruby-json 5 84 5 81 50 50 50 47
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 51 50 162 50 137
tinygql 5 35 5 35 50 22 50 32
30k_ifelse 5 28 5 27 50 216 50 183
30k_methods 5 39 5 38 50 481 50 471
cfunc_itself 5 358 5 306 50 1137 50 1258
fib 5 127 5 141 50 902 50 928
getivar 5 213 5 307 50 2249 50 2396
keyword_args 5 104 5 104 50 1034 50 1244
loops-times 5 24 5 24 50 48 50 56
object-new 5 322 5 352 50 405 50 558
respond_to 5 131 5 138 50 3257 50 3882
ruby-xor 5 245 5 255 50 799 50 1278
setivar 5 361 5 355 50 3194 50 4916
setivar_object 5 354 5 327 50 671 50 584
setivar_young 5 368 5 327 50 703 50 582
str_concat 5 399 5 444 50 980 50 1209
throw 5 1269 5 1262 50 1737 50 1622

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) 1549903 1339824 206 2590 0 0% 0 0 75.995699
chunky-png (click) 364783 325112 74 1322 1 0% 0 0 38.783542
erubi-rails (click) 2016811 1815661 263 3622 21 0% 0 0 100.470146
hexapdf (click) 1557099 1344287 593 15631 43 0% 0 0 450.325046
liquid-c (click) 571051 528244 114 2217 5 0% 0 0 61.596433
liquid-compile (click) 483729 444758 146 2691 2 0% 0 0 80.692186
liquid-render (click) 668318 552261 131 2933 8 0% 0 0 81.363784
lobsters (click) 8556464 7221166 3171 63845 118 0% 0 0 2194.764985
mail (click) 854912 863576 342 7227 40 0% 0 0 211.162822
psych-load (click) 333189 310242 61 825 3 0% 0 0 24.760618
railsbench (click) 3431963 3030188 1655 20176 56 0% 0 0 585.182588
rubocop (click) 5952179 5237055 2886 61701 116 0% 4 0 1810.5948
ruby-lsp (click) 925922 849382 305 5955 29 0% 0 0 167.580357
sequel (click) 536893 460922 11 115 0 0% 0 0 4.231473
binarytrees (click) 153864 143208 6 64 0 0% 0 0 2.572618
blurhash (click) 198881 204120 27 603 0 0% 0 0 18.046727
erubi (click) 301921 287276 5 125 0 0% 0 0 3.923513
etanni (click) 175773 166718 7 98 0 0% 0 0 3.202702
fannkuchredux (click) 171332 169053 3 399 0 0% 0 0 11.033708
fluentd (click) 455963 391765 7 115 0 0% 0 0 3.798216
graphql (click) 499269 448257 66 1035 0 0% 0 0 28.552657
graphql-native (click) 440392 409361 37 399 0 0% 0 0 11.097658
lee (click) 363362 332988 45 1012 0 0% 0 0 30.108776
matmul (click) 157716 157284 8 132 0 0% 0 0 4.207887
nbody (click) 160476 156527 6 238 0 0% 0 0 5.874613
nqueens (click) 169243 181449 5 387 0 0% 0 0 10.276242
optcarrot (click) 472020 434595 188 4740 34 0% 0 0 113.916163
protoboeuf (click) 316177 378895 11 2828 0 0% 0 0 74.41879
protoboeuf-encode (click) 388844 484766 13 1805 0 0% 0 0 45.340955
rack (click) 318783 274345 31 496 0 0% 0 0 13.47211
ruby-json (click) 166771 163271 8 204 0 0% 0 0 5.834962
rubyboy (click) 762448 702363 177 6919 40 0% 0 0 176.039835
rubykon (click) 291670 280730 135 2056 3 0% 0 0 56.915854
sudoku (click) 198169 218256 6 863 0 0% 0 0 23.78363
tinygql (click) 354656 326886 58 971 5 0% 0 0 27.2053
30k_ifelse (click) 6366549 5128037 9259 75432 0 0% 0 0 1989.990748
30k_methods (click) 2381157 1737461 5778 19357 0 0% 0 0 498.47328
cfunc_itself (click) 151718 148644 4 53 0 0% 0 0 1.451828
fib (click) 149245 147479 3 30 0 0% 0 0 1.02394
getivar (click) 150403 151291 3 78 0 0% 0 0 1.886392
keyword_args (click) 152923 149454 5 56 0 0% 0 0 1.770702
loops-times (click) 153563 144310 5 93 0 0% 0 0 2.815165
object-new (click) 148992 147302 2 36 0 0% 0 0 1.042192
respond_to (click) 153042 151308 4 80 0 0% 0 0 2.050961
ruby-xor (click) 152449 153106 4 100 0 0% 0 0 2.657074
setivar (click) 149369 148210 3 46 0 0% 0 0 1.182221
setivar_object (click) 149993 148445 3 49 0 0% 0 0 1.36331
setivar_young (click) 150891 149356 4 63 0 0% 0 0 1.664786
str_concat (click) 152438 151522 6 82 0 0% 0 0 2.440099
throw (click) 152544 149113 5 53 0 0% 0 0 1.81372

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.