YJIT Benchmarks

Details for Benchmarks at 2025-07-02 03:56:57 UTC

YJIT metrics from the yjit-bench suite using Ruby 8bf13f2605.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 95.2% faster than CRuby 3.5.0dev
  • 6.2% faster than YJIT 3.3.6
On railsbench it is
  • 105.5% faster than CRuby 3.5.0dev
  • 7.2% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 27 minutes
aarch64 runtime: 3 hours, 47 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 75 50 154 50 155
chunky-png 5 31 5 32 50 14 50 22
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 410 5 370 50 562 50 600
liquid-compile 5 407 5 456 50 539 50 675
liquid-render 5 169 5 161 50 406 50 438
lobsters 5 19 5 19 50 10 50 10
mail 5 187 5 168 50 235 50 199
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 251 50 255
ruby-lsp 5 155 5 151 50 232 50 262
sequel 5 412 5 415 50 571 50 581
binarytrees 5 84 5 80 50 146 50 117
blurhash 5 82 5 85 50 127 50 144
erubi 5 117 5 145 50 86 50 140
etanni 5 91 5 97 50 53 50 67
fannkuchredux 5 52 5 57 50 97 50 96
fluentd 5 64 5 58 50 25 50 27
graphql 5 85 5 84 50 58 50 56
graphql-native 5 40 5 46 50 10 50 15
lee 5 22 5 23 50 10 50 10
matmul 5 51 5 53 50 88 50 86
nbody 5 249 5 264 50 585 50 681
nqueens 5 120 5 126 50 75 50 547
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 160 50 620 50 735
protoboeuf-encode 5 177 5 198 50 328 50 769
rack 5 580 5 615 50 949 50 1036
ruby-json 5 83 5 80 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 163 50 137
tinygql 5 36 5 34 50 22 50 32
30k_ifelse 5 28 5 27 50 215 50 183
30k_methods 5 38 5 38 50 481 50 469
cfunc_itself 5 359 5 305 50 1137 50 1258
fib 5 124 5 141 50 902 50 929
getivar 5 214 5 307 50 2251 50 2395
keyword_args 5 104 5 104 50 1041 50 1244
loops-times 5 24 5 24 50 48 50 56
object-new 5 322 5 352 50 405 50 562
respond_to 5 133 5 138 50 3257 50 3878
ruby-xor 5 245 5 255 50 800 50 1278
setivar 5 361 5 352 50 3187 50 4916
setivar_object 5 354 5 327 50 672 50 585
setivar_young 5 368 5 327 50 702 50 582
str_concat 5 399 5 445 50 981 50 1209
throw 5 1271 5 1265 50 1721 50 1623

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) 1551381 1332114 206 2590 0 0% 0 0 76.048772
chunky-png (click) 374184 359564 74 1322 1 0% 0 0 38.846706
erubi-rails (click) 2024039 1718015 263 3677 21 0% 0 0 103.864082
hexapdf (click) 1557268 1385416 593 15616 43 0% 0 0 453.564001
liquid-c (click) 570779 552634 114 2217 5 0% 0 0 62.401509
liquid-compile (click) 497647 402348 146 2701 2 0% 0 0 81.602295
liquid-render (click) 681394 672337 131 2933 8 0% 0 0 83.742296
lobsters (click) 8573671 7414190 3171 63847 118 0% 0 0 2206.029115
mail (click) 855831 856422 342 7227 40 0% 0 0 211.882207
psych-load (click) 334532 328156 61 825 3 0% 0 0 24.749904
railsbench (click) 3439188 3044766 1655 20236 56 0% 0 0 580.994584
rubocop (click) 5947749 5248774 2886 61720 116 0% 4 0 1821.270282
ruby-lsp (click) 916990 839544 305 5956 29 0% 0 0 168.416009
sequel (click) 541560 514250 11 114 0 0% 0 0 3.929783
binarytrees (click) 153864 143208 6 64 0 0% 0 0 2.677818
blurhash (click) 198881 204120 27 603 0 0% 0 0 18.234941
erubi (click) 295213 280359 5 125 0 0% 0 0 3.898114
etanni (click) 176010 167049 7 98 0 0% 0 0 3.237376
fannkuchredux (click) 171332 169053 3 399 0 0% 0 0 11.055248
fluentd (click) 447624 399398 7 115 0 0% 0 0 3.956379
graphql (click) 493319 441973 66 1035 0 0% 0 0 28.628107
graphql-native (click) 454160 407071 37 399 0 0% 0 0 11.552472
lee (click) 356090 325305 45 1012 0 0% 0 0 30.443593
matmul (click) 157716 157284 8 132 0 0% 0 0 4.284229
nbody (click) 160476 156527 6 238 0 0% 0 0 5.874815
nqueens (click) 169243 181449 5 387 0 0% 0 0 10.322225
optcarrot (click) 472020 434595 188 4740 34 0% 0 0 115.231941
protoboeuf (click) 316177 378895 11 2828 0 0% 0 0 74.473413
protoboeuf-encode (click) 388844 484766 13 1805 0 0% 0 0 45.585722
rack (click) 310146 290289 31 496 0 0% 0 0 13.393759
ruby-json (click) 166771 163271 8 204 0 0% 0 0 5.876448
rubyboy (click) 753866 661036 177 6962 40 0% 0 0 177.593287
rubykon (click) 291670 280730 135 2056 3 0% 0 0 57.167357
sudoku (click) 198169 218256 6 863 0 0% 0 0 23.898698
tinygql (click) 346200 326286 58 971 5 0% 0 0 27.008442
30k_ifelse (click) 6366549 5128037 9259 75432 0 0% 0 0 1981.827112
30k_methods (click) 2381157 1737461 5778 19357 0 0% 0 0 498.619275
cfunc_itself (click) 151718 148644 4 53 0 0% 0 0 1.441064
fib (click) 149245 147479 3 30 0 0% 0 0 1.11566
getivar (click) 150403 151291 3 78 0 0% 0 0 1.891395
keyword_args (click) 152923 149454 5 56 0 0% 0 0 1.764173
loops-times (click) 153563 144310 5 93 0 0% 0 0 2.747828
object-new (click) 148992 147302 2 36 0 0% 0 0 1.031004
respond_to (click) 153042 151308 4 80 0 0% 0 0 2.121144
ruby-xor (click) 152449 153106 4 100 0 0% 0 0 2.683932
setivar (click) 149369 148210 3 46 0 0% 0 0 1.178157
setivar_object (click) 149993 148445 3 49 0 0% 0 0 1.358612
setivar_young (click) 150891 149356 4 63 0 0% 0 0 1.682557
str_concat (click) 152438 151522 6 82 0 0% 0 0 2.458684
throw (click) 152544 149113 5 53 0 0% 0 0 1.901894

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.