YJIT Benchmarks

Details for Benchmarks at 2025-05-04 03:53:15 UTC

YJIT metrics from the yjit-bench suite using Ruby 21035c826d.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 87.0% faster than CRuby 3.5.0dev
  • 6.4% faster than YJIT 3.3.6
On railsbench it is
  • 102.2% faster than CRuby 3.5.0dev
  • 6.4% 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 84 50 156 50 179
chunky-png 5 31 5 33 50 15 50 24
erubi-rails 5 16 5 15 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 414 50 590 50 572
liquid-compile 5 409 5 468 50 539 50 705
liquid-render 5 171 5 174 50 404 50 384
lobsters 5 19 5 20 50 10 50 10
mail 5 196 5 178 50 251 50 206
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 160 50 253 50 274
ruby-lsp 5 145 5 165 50 241 50 273
sequel 5 419 5 429 50 561 50 596
binarytrees 5 84 5 83 50 148 50 140
blurhash 5 82 5 86 50 127 50 145
erubi 5 125 5 143 50 99 50 148
etanni 5 90 5 101 50 55 50 69
fannkuchredux 5 52 5 58 50 99 50 113
fluentd 5 63 5 63 50 24 50 30
graphql 5 85 5 88 50 57 50 59
graphql-native 5 49 5 59 50 10 50 20
lee 5 22 5 26 50 10 50 10
matmul 5 51 5 51 50 85 50 97
nbody 5 248 5 242 50 575 50 654
nqueens 5 120 5 128 50 75 50 563
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 175 5 188 50 620 50 739
protoboeuf-encode 5 180 5 191 50 328 50 836
rack 5 576 5 636 50 956 50 1071
ruby-json 5 84 5 84 50 50 50 49
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 172
tinygql 5 35 5 39 50 23 50 33
30k_ifelse 5 28 5 28 50 215 50 207
30k_methods 5 38 5 38 50 482 50 472
cfunc_itself 5 345 5 370 50 1147 50 1258
fib 5 127 5 148 50 909 50 933
getivar 5 207 5 309 50 2243 50 2745
keyword_args 5 106 5 110 50 1042 50 1243
loops-times 5 24 5 27 50 48 50 65
object-new 5 323 5 365 50 403 50 668
respond_to 5 133 5 140 50 3258 50 3989
ruby-xor 5 224 5 263 50 801 50 1375
setivar 5 358 5 579 50 3191 50 5899
setivar_object 5 354 5 435 50 665 50 780
setivar_young 5 365 5 435 50 685 50 789
str_concat 5 398 5 460 50 963 50 1173
throw 5 1262 5 1277 50 1740 50 1704

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) 1454445 1253242 206 2230 0 0% 0 0 64.18731
chunky-png (click) 309508 248185 74 1073 1 0% 0 0 31.495226
erubi-rails (click) 1934461 1492354 262 3118 21 0% 0 0 85.769821
hexapdf (click) 1456007 1262599 595 13339 40 0% 0 0 380.51859
liquid-c (click) 490475 423269 114 1758 5 0% 0 0 48.663147
liquid-compile (click) 441472 393390 146 2189 2 0% 0 0 68.002689
liquid-render (click) 593306 557592 131 2325 8 0% 0 0 64.58332
lobsters (click) 8303334 6968516 3171 54400 112 0% 0 0 1874.348267
mail (click) 796010 710151 342 5645 40 0% 0 0 166.625964
psych-load (click) 262477 231010 61 645 3 0% 0 0 19.561276
railsbench (click) 3274090 2736087 1653 16756 54 0% 0 0 477.856667
rubocop (click) 5726956 4959956 2885 51132 113 0% 4 0 1545.829472
ruby-lsp (click) 824388 710107 305 4836 24 0% 0 0 135.969181
sequel (click) 483538 406180 11 94 0 0% 0 0 3.410611
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.243176
blurhash (click) 50446 50805 27 444 0 0% 0 0 14.203275
erubi (click) 261563 220998 5 99 0 0% 0 0 3.253152
etanni (click) 30101 29597 8 88 0 0% 0 0 3.011462
fannkuchredux (click) 23031 13626 3 249 0 0% 0 0 7.375101
fluentd (click) 404665 318496 7 93 0 0% 0 0 3.149377
graphql (click) 435454 396875 66 705 0 0% 0 0 20.534745
graphql-native (click) 394640 355099 37 293 0 0% 0 0 8.354938
lee (click) 309513 269972 45 799 0 0% 0 0 24.494425
matmul (click) 10810 11796 8 111 0 0% 0 0 3.636968
nbody (click) 13050 17086 6 172 0 0% 0 0 4.426537
nqueens (click) 20756 19597 5 247 0 0% 0 0 7.058769
optcarrot (click) 318856 234467 188 4395 34 0% 0 0 100.666595
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.300999
protoboeuf-encode (click) 221062 212146 14 1220 0 0% 0 0 31.545593
rack (click) 243251 207671 31 383 0 0% 0 0 10.034107
ruby-json (click) 24443 21290 8 181 0 0% 0 0 5.067657
rubyboy (click) 698789 585433 177 5886 40 0% 0 0 146.273168
rubykon (click) 135591 113219 137 1515 3 0% 0 0 43.147848
sudoku (click) 46753 50636 7 535 0 0% 0 0 15.991834
tinygql (click) 305954 241475 58 824 5 0% 0 0 22.691983
30k_ifelse (click) 5658774 5284843 9259 51667 0 0% 0 0 1437.081565
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 457.096286
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.360835
fib (click) 2599 2861 3 26 0 0% 0 0 0.986385
getivar (click) 3501 4713 3 51 0 0% 0 0 1.33957
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.583174
loops-times (click) 6843 7499 5 72 0 0% 0 0 2.366033
object-new (click) 2301 2493 2 29 0 0% 0 0 0.968461
respond_to (click) 6409 6687 4 71 0 0% 0 0 1.859962
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.92495
setivar (click) 2652 3389 3 31 0 0% 0 0 1.034882
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.142906
setivar_young (click) 4031 4260 4 44 0 0% 0 0 1.3441
str_concat (click) 5622 6117 6 64 0 0% 0 0 2.005104
throw (click) 5848 4291 5 46 0 0% 0 0 1.574672

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.