YJIT Benchmarks

Details for Benchmarks at 2025-02-12 03:43:50 UTC

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

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 89.9% faster than CRuby 3.5.0dev
  • 6.2% faster than YJIT 3.3.6
On railsbench it is
  • 100.9% faster than CRuby 3.5.0dev
  • 2.5% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 19 minutes
aarch64 runtime: 3 hours, 42 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 84 50 157 50 158
chunky-png 5 32 5 32 50 15 50 33
erubi-rails 5 16 5 16 50 10 50 10
hexapdf 5 10 5 10 50 10 50 10
liquid-c 5 421 5 425 50 570 50 632
liquid-compile 5 410 5 424 50 540 50 587
liquid-render 5 171 5 167 50 406 50 431
lobsters 5 20 5 19 50 10 50 10
mail 5 190 5 193 50 251 50 251
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 158 5 157 50 253 50 268
ruby-lsp 5 155 5 162 50 247 50 274
sequel 5 433 5 422 50 602 50 590
binarytrees 5 84 5 80 50 149 50 128
blurhash 5 82 5 85 50 127 50 145
erubi 5 76 5 152 50 99 50 147
etanni 5 90 5 100 50 54 50 72
fannkuchredux 5 52 5 55 50 99 50 104
fluentd 5 63 5 63 50 25 50 30
graphql 5 85 5 85 50 56 50 55
graphql-native 5 40 5 51 50 11 50 13
lee 5 22 5 23 50 10 50 10
matmul 5 51 5 55 50 85 50 100
nbody 5 248 5 274 50 577 50 699
nqueens 5 116 5 122 50 75 50 565
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 174 5 175 50 619 50 718
protoboeuf-encode 5 181 5 176 50 328 50 827
rack 5 575 5 629 50 957 50 1042
ruby-json 5 84 5 85 50 50 50 51
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 22 50 10 50 10
sudoku 5 48 5 49 50 164 50 170
tinygql 5 35 5 37 50 23 50 29
30k_ifelse 5 28 5 28 50 215 50 207
30k_methods 5 38 5 38 50 476 50 475
cfunc_itself 5 346 5 327 50 1147 50 1255
fib 5 117 5 130 50 910 50 933
getivar 5 207 5 320 50 2243 50 2748
keyword_args 5 107 5 104 50 1042 50 1240
loops-times 5 24 5 25 50 48 50 65
object-new 5 323 5 282 50 404 50 315
respond_to 5 134 5 140 50 3258 50 3974
ruby-xor 5 231 5 243 50 803 50 1361
setivar 5 358 5 502 50 3122 50 5858
setivar_object 5 355 5 394 50 698 50 734
setivar_young 5 364 5 398 50 743 50 780
str_concat 5 398 5 431 50 976 50 1223
throw 5 1266 5 1168 50 1775 50 1464

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) 1440321 1152840 209 2204 0 0% 0 0 63.445743
chunky-png (click) 302023 258082 84 1124 1 0% 0 0 32.905568
erubi-rails (click) 1895608 1678224 259 2968 19 0% 0 0 81.209922
hexapdf (click) 1469271 1221434 595 13143 41 0% 0 0 371.375344
liquid-c (click) 480753 424646 114 1743 5 0% 0 0 47.997714
liquid-compile (click) 430320 394038 146 2090 2 0% 0 0 63.822409
liquid-render (click) 580445 507132 131 2309 8 0% 0 0 65.02264
lobsters (click) 8144507 6804913 3161 52836 106 0% 0 0 1823.905606
mail (click) 728547 627276 342 5318 14 0% 0 0 152.054846
psych-load (click) 254096 231140 61 617 3 0% 0 0 19.179904
railsbench (click) 3258691 2718281 1645 16204 52 0% 0 0 461.523182
rubocop (click) 5687769 4805143 2887 50513 110 0% 4 0 1471.704343
ruby-lsp (click) 846209 789223 305 4734 24 0% 0 0 133.004594
sequel (click) 475190 407385 11 95 0 0% 0 0 3.334842
binarytrees (click) 7093 6143 6 52 0 0% 0 0 2.262897
blurhash (click) 50118 50863 27 438 0 0% 0 0 14.042884
erubi (click) 252772 229649 5 97 0 0% 0 0 3.230805
etanni (click) 27173 26329 8 88 0 0% 0 0 2.985578
fannkuchredux (click) 23046 13626 3 249 0 0% 0 0 7.391346
fluentd (click) 376326 316350 7 93 0 0% 0 0 3.156152
graphql (click) 429702 392560 66 676 0 0% 0 0 20.809822
graphql-native (click) 396450 371955 37 255 0 0% 0 0 8.520772
lee (click) 300086 261937 45 750 0 0% 0 0 23.469911
matmul (click) 10657 3512 8 109 0 0% 0 0 3.535689
nbody (click) 13065 17086 6 172 0 0% 0 0 4.423744
nqueens (click) 20163 27348 5 239 0 0% 0 0 6.968377
optcarrot (click) 319096 242804 188 4399 34 0% 0 0 100.25861
protoboeuf (click) 150678 129601 12 1479 0 0% 0 0 42.035912
protoboeuf-encode (click) 221107 212146 14 1220 0 0% 0 0 30.998579
rack (click) 262685 223126 32 385 0 0% 0 0 10.053552
ruby-json (click) 20461 17978 8 181 0 0% 0 0 5.12464
rubyboy (click) 657687 609092 177 5803 40 0% 0 0 144.856307
rubykon (click) 133544 111856 137 1482 3 0% 0 0 42.194447
sudoku (click) 45311 40871 7 516 0 0% 0 0 15.393985
tinygql (click) 299392 262322 58 762 5 0% 0 0 21.791589
30k_ifelse (click) 5658804 5284852 9259 51668 0 0% 0 0 1405.208333
30k_methods (click) 2234569 1592883 5778 19351 0 0% 0 0 448.298265
cfunc_itself (click) 5130 4086 4 47 0 0% 0 0 1.341523
fib (click) 2599 2861 3 26 0 0% 0 0 1.010008
getivar (click) 3501 4713 3 51 0 0% 0 0 1.353366
keyword_args (click) 6320 4813 5 49 0 0% 0 0 1.587865
loops-times (click) 6703 7405 5 71 0 0% 0 0 2.297932
object-new (click) 1933 2093 2 22 0 0% 0 0 0.812687
respond_to (click) 5868 6227 4 62 0 0% 0 0 1.737278
ruby-xor (click) 5331 6009 4 64 0 0% 0 0 1.88392
setivar (click) 2652 3389 3 31 0 0% 0 0 1.001312
setivar_object (click) 3181 3537 3 33 0 0% 0 0 1.135507
setivar_young (click) 3891 4259 4 41 0 0% 0 0 1.315437
str_concat (click) 5469 6016 6 62 0 0% 0 0 2.00957
throw (click) 5848 4291 5 46 0 0% 0 0 1.597261

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.