YJIT Benchmarks

Details for Benchmarks at 2025-07-18 04:01:26 UTC

YJIT metrics from the yjit-bench suite using Ruby 81515aca67.

Using the geomean of the headline benchmarks for x86 YJIT 3.5.0dev is
  • 90.2% faster than CRuby 3.5.0dev
  • 2.3% faster than YJIT 3.3.6
On railsbench it is
  • 106.6% faster than CRuby 3.5.0dev
  • 4.7% faster than YJIT 3.3.6
x86_64 runtime: 4 hours, 43 minutes
aarch64 runtime: 3 hours, 58 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 81 5 76 50 157 50 159
chunky-png 5 31 5 31 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 419 5 396 50 591 50 533
liquid-compile 5 414 5 449 50 537 50 698
liquid-render 5 171 5 166 50 402 50 375
lobsters 5 19 5 19 50 10 50 10
mail 5 195 5 173 50 245 50 204
psych-load 5 10 5 10 50 10 50 10
railsbench 5 10 5 10 50 10 50 10
rubocop 5 156 5 155 50 252 50 258
ruby-lsp 5 155 5 149 50 245 50 264
sequel 5 428 5 411 50 590 50 559
attr_accessor 5 157 5 175 50 1717 50 1895
binarytrees 5 84 5 79 50 146 50 121
blurhash 5 82 5 87 50 127 50 144
erubi 5 124 5 141 50 101 50 132
etanni 5 90 5 96 50 52 50 68
fannkuchredux 5 52 5 57 50 97 50 96
fluentd 5 63 5 56 50 25 50 26
graphql 5 85 5 82 50 58 50 55
graphql-native 5 39 5 46 50 10 50 16
lee 5 22 5 22 50 10 50 10
matmul 5 51 5 53 50 88 50 83
nbody 5 249 5 254 50 585 50 690
nqueens 5 120 5 127 50 75 50 561
optcarrot 5 10 5 10 50 10 50 10
protoboeuf 5 173 5 158 50 621 50 720
protoboeuf-encode 5 179 5 200 50 326 50 774
rack 5 566 5 607 50 958 50 1044
ruby-json 5 84 5 81 50 50 50 46
rubyboy 5 10 5 10 50 10 50 10
rubykon 5 21 5 21 50 10 50 10
sudoku 5 48 5 51 50 162 50 140
tinygql 5 36 5 34 50 23 50 33
30k_ifelse 5 28 5 27 50 216 50 185
30k_methods 5 38 5 38 50 481 50 471
cfunc_itself 5 351 5 359 50 1147 50 1258
fib 5 127 5 140 50 902 50 934
getivar 5 215 5 293 50 2253 50 2370
keyword_args 5 103 5 113 50 1042 50 1242
loops-times 5 24 5 25 50 48 50 56
object-new 5 323 5 306 50 405 50 450
respond_to 5 133 5 135 50 3257 50 3880
ruby-xor 5 245 5 241 50 798 50 1283
setivar 5 361 5 331 50 3191 50 4899
setivar_object 5 353 5 302 50 670 50 632
setivar_young 5 367 5 299 50 701 50 618
str_concat 5 400 5 428 50 979 50 1170
throw 5 1270 5 1125 50 1714 50 1424

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) 1545654 1342058 206 2590 0 0% 0 0 74.344141
chunky-png (click) 368523 320217 74 1322 1 0% 0 0 38.250791
erubi-rails (click) 2018079 1833988 263 3652 21 0% 0 0 100.820163
hexapdf (click) 1551699 1379104 594 15618 43 0% 0 0 450.866991
liquid-c (click) 570294 510496 114 2219 5 0% 0 0 61.605182
liquid-compile (click) 491212 410762 146 2684 2 0% 0 0 78.028923
liquid-render (click) 668509 617555 131 2933 8 0% 0 0 80.721301
lobsters (click) 8588637 7166094 3169 63963 118 0% 0 0 2140.975429
mail (click) 863668 872888 342 7227 40 0% 0 0 206.659239
psych-load (click) 328114 296322 61 825 3 0% 0 0 23.62341
railsbench (click) 3437957 3044059 1655 20201 56 0% 0 0 574.082331
rubocop (click) 5953478 5197590 2886 61704 116 0% 4 0 1788.58478
ruby-lsp (click) 925037 913275 305 5955 29 0% 0 0 164.976122
sequel (click) 544721 509527 11 114 0 0% 0 0 3.815401
attr_accessor (click) 151628 144470 3 78 0 0% 0 0 2.022436
binarytrees (click) 154529 151621 6 64 0 0% 0 0 2.632304
blurhash (click) 199546 187957 27 603 0 0% 0 0 17.899194
erubi (click) 296991 273597 5 125 0 0% 0 0 3.980003
etanni (click) 176438 158747 7 98 0 0% 0 0 3.099897
fannkuchredux (click) 171997 177466 3 399 0 0% 0 0 10.993738
fluentd (click) 455876 391304 7 115 0 0% 0 0 3.862163
graphql (click) 499246 447863 66 1035 0 0% 0 0 28.86866
graphql-native (click) 452781 429670 37 399 0 0% 0 0 11.203953
lee (click) 352035 336754 45 1012 0 0% 0 0 29.909433
matmul (click) 158381 157505 8 132 0 0% 0 0 4.124551
nbody (click) 161146 148561 6 238 0 0% 0 0 5.920866
nqueens (click) 169908 181670 5 387 0 0% 0 0 10.320362
optcarrot (click) 472685 467604 188 4740 34 0% 0 0 111.407882
protoboeuf (click) 316842 420076 11 2828 0 0% 0 0 75.009812
protoboeuf-encode (click) 389509 501371 13 1805 0 0% 0 0 46.00598
rack (click) 319855 299726 31 496 0 0% 0 0 12.993097
ruby-json (click) 167199 163161 8 204 0 0% 0 0 5.835863
rubyboy (click) 765949 721901 177 6962 40 0% 0 0 178.809079
rubykon (click) 291907 288730 135 2052 3 0% 0 0 56.605342
sudoku (click) 198834 218477 6 863 0 0% 0 0 23.684868
tinygql (click) 355286 343440 58 977 5 0% 0 0 26.717099
30k_ifelse (click) 6367214 5226662 9259 75432 0 0% 0 0 1959.628187
30k_methods (click) 2381822 1737722 5778 19357 0 0% 0 0 483.748714
cfunc_itself (click) 152383 148865 4 53 0 0% 0 0 1.434266
fib (click) 149915 139513 3 30 0 0% 0 0 1.029016
getivar (click) 151068 143320 3 78 0 0% 0 0 1.880107
keyword_args (click) 153588 149675 5 56 0 0% 0 0 1.733775
loops-times (click) 154228 144531 5 93 0 0% 0 0 2.676906
object-new (click) 149662 147528 2 36 0 0% 0 0 1.07127
respond_to (click) 153707 151529 4 80 0 0% 0 0 2.04146
ruby-xor (click) 153127 153395 4 100 0 0% 0 0 2.691785
setivar (click) 150039 148436 3 46 0 0% 0 0 1.215293
setivar_object (click) 150658 148666 3 49 0 0% 0 0 1.362472
setivar_young (click) 151556 141385 4 63 0 0% 0 0 1.64548
str_concat (click) 153103 151743 6 82 0 0% 0 0 2.430295
throw (click) 153209 149334 5 53 0 0% 0 0 1.90368

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.