YJIT Benchmarks

Details for Benchmarks at 2025-08-04 04:09:16 UTC

YJIT metrics from the yjit-bench suite using Ruby 1c6b36af18.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 90.1% faster than CRuby 3.5.0dev
  • 4.7% faster than YJIT 3.3.6
On railsbench it is
  • 96.4% faster than CRuby 3.5.0dev
  • 4.0% 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 82 5 82 50 156 50 155
chunky-png 5 31 5 32 50 14 50 23
erubi-rails 5 15 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 382 50 596 50 603
liquid-compile 5 412 5 469 50 550 50 705
liquid-render 5 170 5 171 50 408 50 379
lobsters 5 20 5 19 50 10 50 10
mail 5 188 5 178 50 250 50 199
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 136 5 140 50 204 50 216
ruby-lsp 5 140 5 146 50 228 50 243
sequel 5 431 5 426 50 570 50 589
shipit 5 10 5 10 50 10 50 10
binarytrees 5 84 5 79 50 146 50 118
blurhash 5 82 5 85 50 127 50 144
erubi 5 115 5 142 50 101 50 137
etanni 5 90 5 99 50 53 50 67
fannkuchredux 5 52 5 57 50 97 50 95
fluentd 5 62 5 63 50 24 50 24
graphql 5 335 5 449 50 450 50 910
graphql-native 5 52 5 75 50 14 50 58
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 52 50 88 50 89
nbody 5 249 5 246 50 585 50 693
nqueens 5 120 5 128 50 74 50 566
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 185 50 621 50 732
protoboeuf-encode 5 179 5 200 50 327 50 794
rack 5 423 5 435 50 596 50 691
ruby-json 5 84 5 82 50 50 50 48
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 42 50 42 50 49
30k_ifelse 5 28 5 27 50 215 50 183
30k_methods 5 38 5 38 50 483 50 467
attr_accessor 5 157 5 172 50 1720 50 1869
cfunc_itself 5 360 5 361 50 1138 50 1258
fib 5 127 5 143 50 902 50 929
getivar 5 213 5 284 50 2251 50 2377
keyword_args 5 104 5 109 50 1034 50 1243
loops-times 5 24 5 24 50 48 50 54
object-new 5 318 5 305 50 405 50 428
respond_to 5 134 5 135 50 3256 50 3931
ruby-xor 5 245 5 254 50 800 50 1277
setivar 5 361 5 343 50 3185 50 4912
setivar_object 5 353 5 308 50 670 50 606
setivar_young 5 367 5 311 50 703 50 620
str_concat 5 397 5 423 50 983 50 1199
throw 5 1271 5 1131 50 1739 50 1406

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) 1552008 1342051 206 2590 0 0% 0 0 75.832464
chunky-png (click) 364105 338278 74 1322 1 0% 0 0 39.033149
erubi-rails (click) 1937999 1712844 262 3709 22 0% 0 0 103.060262
hexapdf (click) 1561184 1300773 593 15649 45 0% 0 0 458.058159
liquid-c (click) 572934 475900 114 2217 5 0% 0 0 62.964899
liquid-compile (click) 508299 465444 146 2717 2 0% 0 0 80.640583
liquid-render (click) 689902 635514 131 2933 8 0% 0 0 80.886178
lobsters (click) 8573837 7320641 3163 63724 119 0% 0 0 2140.315102
mail (click) 875132 863341 342 7227 40 0% 0 0 204.979177
psych-load (click) 332242 308617 61 830 2 0% 0 0 24.696642
railsbench (click) 3374380 2987226 1649 20189 58 0% 0 0 593.977524
rubocop (click) 6156001 5287984 3013 63534 161 0% 6 0 1896.502737
ruby-lsp (click) 994915 856501 345 6749 48 0% 1 0 187.073637
sequel (click) 540530 456777 11 119 0 0% 0 0 4.056014
shipit (click) 7309795 6233643 3387 54139 212 0% 0 0 1743.694896
binarytrees (click) 154320 151361 6 64 0 0% 0 0 2.530927
blurhash (click) 199337 195889 27 603 0 0% 0 0 18.110694
erubi (click) 294155 268809 5 125 0 0% 0 0 3.839751
etanni (click) 176957 175574 7 98 0 0% 0 0 3.216724
fannkuchredux (click) 171788 169014 3 399 0 0% 0 0 10.997978
fluentd (click) 508602 422482 7 115 0 0% 0 0 3.764431
graphql (click) 445127 402000 72 1918 17 0% 0 0 54.779009
graphql-native (click) 388574 375846 39 532 0 0% 0 0 14.187739
lee (click) 358669 326988 49 1070 0 0% 0 0 32.193926
matmul (click) 158172 149053 8 132 0 0% 0 0 4.13245
nbody (click) 160937 156493 6 238 0 0% 0 0 5.965373
nqueens (click) 169699 173218 5 387 0 0% 0 0 10.311542
optcarrot (click) 472476 475516 188 4740 34 0% 0 0 112.321267
protoboeuf (click) 316633 370664 11 2828 0 0% 0 0 76.136917
protoboeuf-encode (click) 389300 386423 13 1805 0 0% 0 0 46.30757
rack (click) 323277 288952 35 580 0 0% 0 0 15.628714
ruby-json (click) 167719 163604 8 204 0 0% 0 0 5.814381
rubyboy (click) 740073 638803 154 6860 42 0% 0 0 175.561519
rubykon (click) 291698 263894 135 2052 3 0% 0 0 56.360865
sudoku (click) 198625 193641 6 863 0 0% 0 0 23.781987
tinygql (click) 346851 300854 59 1025 5 0% 0 0 27.620756
30k_ifelse (click) 6367005 5283666 9259 75432 0 0% 0 0 1962.350151
30k_methods (click) 2381613 1737482 5778 19357 0 0% 0 0 485.412119
attr_accessor (click) 151419 152402 3 78 0 0% 0 0 2.058662
cfunc_itself (click) 152174 148605 4 53 0 0% 0 0 1.494742
fib (click) 149706 139253 3 30 0 0% 0 0 1.013562
getivar (click) 150859 143060 3 78 0 0% 0 0 1.881826
keyword_args (click) 153379 149435 5 56 0 0% 0 0 1.837226
loops-times (click) 154019 144271 5 93 0 0% 0 0 2.840409
object-new (click) 149453 139076 2 36 0 0% 0 0 1.034365
respond_to (click) 153498 151269 4 80 0 0% 0 0 2.041038
ruby-xor (click) 152918 144943 4 100 0 0% 0 0 2.782823
setivar (click) 149830 139984 3 46 0 0% 0 0 1.197232
setivar_object (click) 150449 140214 3 49 0 0% 0 0 1.366803
setivar_young (click) 151347 149317 4 63 0 0% 0 0 1.687919
str_concat (click) 152894 151483 6 82 0 0% 0 0 2.458566
throw (click) 153000 149074 5 53 0 0% 0 0 1.902597

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.