YJIT Benchmarks

Details for Benchmarks at 2025-05-05 03:51:38 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 89.9% faster than CRuby 3.5.0dev
  • 8.1% faster than YJIT 3.3.6
On railsbench it is
  • 100.0% faster than CRuby 3.5.0dev
  • 7.3% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 19 minutes
aarch64 runtime: 3 hours, 39 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 87 50 157 50 173
chunky-png 5 31 5 33 50 15 50 24
erubi-rails 5 15 5 16 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 420 5 433 50 586 50 649
liquid-compile 5 411 5 467 50 571 50 704
liquid-render 5 171 5 173 50 402 50 442
lobsters 5 19 5 20 50 10 50 10
mail 5 191 5 178 50 242 50 211
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 161 50 249 50 272
ruby-lsp 5 155 5 164 50 247 50 272
sequel 5 424 5 425 50 601 50 597
binarytrees 5 84 5 82 50 148 50 139
blurhash 5 82 5 88 50 127 50 145
erubi 5 125 5 143 50 91 50 145
etanni 5 90 5 102 50 54 50 70
fannkuchredux 5 51 5 57 50 100 50 113
fluentd 5 64 5 60 50 25 50 32
graphql 5 85 5 82 50 57 50 61
graphql-native 5 40 5 55 50 10 50 20
lee 5 22 5 26 50 10 50 10
matmul 5 50 5 51 50 85 50 97
nbody 5 248 5 252 50 575 50 674
nqueens 5 120 5 129 50 75 50 560
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 186 50 620 50 737
protoboeuf-encode 5 177 5 219 50 328 50 852
rack 5 586 5 647 50 945 50 1077
ruby-json 5 84 5 84 50 50 50 50
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 20 5 23 50 10 50 10
sudoku 5 48 5 51 50 162 50 173
tinygql 5 36 5 38 50 23 50 34
30k_ifelse 5 28 5 28 50 215 50 206
30k_methods 5 39 5 38 50 479 50 470
cfunc_itself 5 345 5 370 50 1147 50 1258
fib 5 127 5 149 50 910 50 933
getivar 5 207 5 297 50 2241 50 2731
keyword_args 5 107 5 109 50 1042 50 1243
loops-times 5 24 5 27 50 48 50 65
object-new 5 322 5 365 50 404 50 664
respond_to 5 117 5 141 50 3258 50 3988
ruby-xor 5 240 5 260 50 801 50 1376
setivar 5 358 5 599 50 3184 50 5911
setivar_object 5 354 5 466 50 665 50 790
setivar_young 5 364 5 466 50 685 50 792
str_concat 5 398 5 494 50 963 50 1159
throw 5 1260 5 1270 50 1721 50 1724

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) 1451745 1236158 206 2230 0 0% 0 0 64.875255
chunky-png (click) 325043 260232 74 1078 1 0% 0 0 32.020011
erubi-rails (click) 1932705 1596704 262 3063 21 0% 0 0 83.723326
hexapdf (click) 1479866 1267746 596 13341 40 0% 0 0 386.620056
liquid-c (click) 487162 460094 114 1758 5 0% 0 0 48.378983
liquid-compile (click) 416004 364633 146 2201 2 0% 0 0 67.966152
liquid-render (click) 587481 486064 131 2325 8 0% 0 0 65.285445
lobsters (click) 8290524 6957532 3170 54358 112 0% 0 0 1847.460436
mail (click) 788033 727501 342 5636 40 0% 0 0 163.723474
psych-load (click) 254285 222280 61 645 3 0% 0 0 19.575399
railsbench (click) 3286178 2919327 1653 16773 54 0% 0 0 481.987766
rubocop (click) 5707085 4900328 2885 51137 113 0% 4 0 1494.575212
ruby-lsp (click) 821360 748952 305 4836 24 0% 0 0 132.621092
sequel (click) 470198 396123 11 94 0 0% 0 0 3.598362
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.252002
blurhash (click) 50446 50805 27 444 0 0% 0 0 14.208592
erubi (click) 261563 220998 5 99 0 0% 0 0 3.259997
etanni (click) 30101 29597 8 88 0 0% 0 0 2.981828
fannkuchredux (click) 23031 13626 3 249 0 0% 0 0 7.380877
fluentd (click) 381602 307342 7 93 0 0% 0 0 3.110326
graphql (click) 435454 396940 66 705 0 0% 0 0 20.717827
graphql-native (click) 370618 350224 37 293 0 0% 0 0 9.245411
lee (click) 287116 202111 45 799 0 0% 0 0 24.249641
matmul (click) 10810 11796 8 111 0 0% 0 0 3.63039
nbody (click) 13050 17086 6 172 0 0% 0 0 4.419269
nqueens (click) 20756 19597 5 247 0 0% 0 0 7.081842
optcarrot (click) 318856 234467 188 4395 34 0% 0 0 100.876972
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.191643
protoboeuf-encode (click) 221062 212146 14 1220 0 0% 0 0 31.492229
rack (click) 268653 211524 31 383 0 0% 0 0 10.091711
ruby-json (click) 24443 21290 8 181 0 0% 0 0 5.024912
rubyboy (click) 672413 638232 177 5886 40 0% 0 0 145.270176
rubykon (click) 135591 113219 137 1515 3 0% 0 0 43.008298
sudoku (click) 46753 50636 7 535 0 0% 0 0 15.842904
tinygql (click) 282178 236437 58 824 5 0% 0 0 22.655496
30k_ifelse (click) 5658774 5284843 9259 51667 0 0% 0 0 1433.386305
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 457.261712
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.307681
fib (click) 2599 2861 3 26 0 0% 0 0 0.97651
getivar (click) 3501 4713 3 51 0 0% 0 0 1.344763
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.5966
loops-times (click) 6843 7499 5 72 0 0% 0 0 2.327891
object-new (click) 2301 2493 2 29 0 0% 0 0 0.956915
respond_to (click) 6409 6687 4 71 0 0% 0 0 1.8299
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.928601
setivar (click) 2652 3389 3 31 0 0% 0 0 1.019551
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.153305
setivar_young (click) 4031 4260 4 44 0 0% 0 0 1.331308
str_concat (click) 5622 6117 6 64 0 0% 0 0 2.039443
throw (click) 5848 4291 5 46 0 0% 0 0 1.61836

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.