The Great Cross-Cloud Ruby Benchmark

Comparing iteration times across 7 machine types on several public clouds. Each dot is one non-warmup iteration.

This site was borne of my continuous frustration at Speedshop of clients running on old generation AWS instances, when I knew "free speed" was on the table. This page simply runs ruby-bench, a series of mostly CPU-bound benchmarks maintained by Ruby core and the YJIT developers. We run across multiple instances to reduce the effect of noisy neighbors.

All benchmarks were run on December 09, 2025 at 09:37 UTC with YJIT enabled on Ruby 3.4.7. View the code for this page here.

c8a-medium c8i-large c7i-large c7a-medium c8g-medium c7g-medium c6g-medium
0%
300%+ (% slower than fastest)
Benchmark c8a-medium c8i-large c7i-large c7a-medium c8g-medium c7g-medium c6g-medium
ms ±% vs best ms ±% vs best ms ±% vs best ms ±% vs best ms ±% vs best ms ±% vs best ms ±% vs best
all 10470 12620 +20.5% 14989 +43.2% 15243 +45.6% 18442 +76.1% 28170 +169.1% 37067 +254.0%
30k_ifelse 51 ±0.1 86 ±0.6 +68.6% 94 ±0.6 +84.3% 70 ±0.4 +37.3% 146 ±1.1 +186.3% 278 ±6.4 +445.1% 268 ±2.4 +425.5%
30k_methods 27 ±0.6 38 ±0.2 +40.7% 42 ±0.5 +55.6% 43 ±1.1 +59.3% 92 ±0.7 +240.7% 148 ±1.6 +448.1% 177 ±0.5 +555.6%
activerecord 79 ±0.4 85 ±0.1 +7.6% 104 ±0.8 +31.6% 111 ±0.6 +40.5% 144 ±0.8 +82.3% 206 ±1.1 +160.8% 301 ±1.3 +281.0%
addressable-equality 285 ±0.6 346 ±0.1 +21.4% 403 ±1.9 +41.4% 395 ±1.1 +38.6% 465 ±2.3 +63.2% 683 ±2.3 +139.6% 1014 ±1.9 +255.8%
addressable-getters 76 ±0.5 93 ±0.3 +22.4% 108 ±0.8 +42.1% 109 ±1.3 +43.4% 125 ±1.0 +64.5% 190 ±1.4 +150.0% 261 ±1.1 +243.4%
addressable-join 147 ±0.3 180 ±0.2 +22.4% 211 ±1.0 +43.5% 208 ±1.3 +41.5% 247 ±1.1 +68.0% 362 ±1.7 +146.3% 526 ±1.9 +257.8%
addressable-merge 67 ±0.7 77 ±0.2 +14.9% 92 ±0.7 +37.3% 93 ±1.0 +38.8% 109 ±0.7 +62.7% 167 ±2.3 +149.3% 237 ±1.6 +253.7%
addressable-new 32 ±0.5 37 ±0.3 +15.6% 44 ±0.5 +37.5% 46 ±0.8 +43.8% 53 ±0.7 +65.6% 77 ±0.9 +140.6% 115 ±0.8 +259.4%
addressable-normalize 161 ±0.3 195 ±0.2 +21.1% 227 ±1.1 +41.0% 222 ±0.3 +37.9% 260 ±0.9 +61.5% 380 ±1.1 +136.0% 571 ±1.9 +254.7%
addressable-parse 114 ±0.5 141 ±0.3 +23.7% 164 ±0.9 +43.9% 167 ±1.3 +46.5% 189 ±1.4 +65.8% 292 ±2.6 +156.1% 406 ±1.4 +256.1%
addressable-setters 64 ±0.3 76 ±0.3 +18.8% 90 ±0.7 +40.6% 90 ±0.9 +40.6% 105 ±1.1 +64.1% 152 ±0.8 +137.5% 213 ±1.4 +232.8%
addressable-to-s 75 ±0.4 92 ±0.1 +22.7% 108 ±0.7 +44.0% 107 ±0.8 +42.7% 125 ±1.0 +66.7% 190 ±1.5 +153.3% 260 ±1.2 +246.7%
attr_accessor 6 ±3.8 9 ±6.0 +50.0% 11 ±6.7 +83.3% 10 ±6.3 +66.7% 19 ±8.1 +216.7% 24 ±9.8 +300.0% 101 ±14.4 +1583.3%
binarytrees 124 ±0.4 155 ±0.5 +25.0% 179 ±0.9 +44.4% 165 ±0.6 +33.1% 176 ±0.8 +41.9% 221 ±1.5 +78.2% 354 ±1.8 +185.5%
blurhash 81 ±0.4 94 ±0.1 +16.0% 102 ±0.7 +25.9% 109 ±0.9 +34.6% 138 ±0.5 +70.4% 156 ±0.9 +92.6% 235 ±1.2 +190.1%
cfunc_itself 8 ±0.4 14 ±0.3 +75.0% 15 ±0.5 +87.5% 14 ±0.8 +75.0% 26 ±0.6 +225.0% 29 ±0.9 +262.5% 31 ±1.1 +287.5%
chunky-png 205 ±0.3 255 ±0.4 +24.4% 296 ±1.6 +44.4% 299 ±1.5 +45.9% 368 ±1.4 +79.5% 515 ±1.4 +151.2% 740 ±2.2 +261.0%
erubi 94 ±0.4 127 ±0.1 +35.1% 145 ±0.9 +54.3% 143 ±0.9 +52.1% 155 ±0.9 +64.9% 222 ±1.0 +136.2% 314 ±1.1 +234.0%
erubi-rails 409 ±1.8 473 ±0.1 +15.6% 562 ±2.0 +37.4% 661 ±3.1 +61.6% 735 ±1.3 +79.7% 1294 ±2.2 +216.4% 1735 ±1.5 +324.2%
etanni 146 ±0.4 194 ±0.3 +32.9% 222 ±1.0 +52.1% 211 ±0.9 +44.5% 222 ±1.0 +52.1% 331 ±1.2 +126.7% 535 ±3.8 +266.4%
fannkuchredux 234 ±13.1 244 ±11.1 +4.3% 342 ±5.0 +46.2% 440 ±1.7 +88.0% 437 ±2.2 +86.8% 494 ±1.6 +111.1% 673 ±1.4 +187.6%
fib 15 ±0.3 19 ±0.2 +26.7% 20 ±0.5 +33.3% 22 ±0.6 +46.7% 36 ±0.5 +140.0% 40 ±0.5 +166.7% 75 ±0.8 +400.0%
fluentd 307 ±3.5 334 ±1.9 +8.8% 433 ±3.9 +41.0% 384 ±3.2 +25.1% 439 ±1.9 +43.0% 627 ±1.7 +104.2% 945 ±1.1 +207.8%
getivar 4 ±1.6 7 ±3.9 +75.0% 9 ±4.4 +125.0% 7 ±3.5 +75.0% 15 ±5.1 +275.0% 16 ±4.6 +300.0% 44 ±6.0 +1000.0%
getivar-module 117 ±2.3 166 ±0.4 +41.9% 188 ±1.2 +60.7% 177 ±2.3 +51.3% 189 ±1.6 +61.5% 210 ±0.5 +79.5% 296 ±2.3 +153.0%
graphql 27 ±0.4 31 ±0.2 +14.8% 37 ±0.5 +37.0% 38 ±0.9 +40.7% 42 ±0.7 +55.6% 60 ±0.7 +122.2% 93 ±1.3 +244.4%
graphql-native 260 ±0.8 317 ±0.4 +21.9% 362 ±1.5 +39.2% 346 ±2.0 +33.1% 360 ±1.5 +38.5% 485 ±2.1 +86.5% 696 ±1.5 +167.7%
hexapdf 867 ±1.0 1051 ±1.1 +21.2% 1288 ±1.9 +48.6% 1253 ±1.9 +44.5% 1408 ±1.6 +62.4% 2047 ±3.2 +136.1% 2688 ±1.5 +210.0%
keyword_args 12 ±0.5 15 ±0.4 +25.0% 17 ±0.5 +41.7% 16 ±0.8 +33.3% 29 ±0.8 +141.7% 33 ±1.2 +175.0% 54 ±1.3 +350.0%
knucleotide 100 ±0.7 125 ±0.3 +25.0% 144 ±1.0 +44.0% 157 ±1.0 +57.0% 149 ±0.4 +49.0% 227 ±0.8 +127.0% 289 ±1.7 +189.0%
lee 490 ±1.2 621 ±0.7 +26.7% 727 ±2.1 +48.4% 663 ±1.6 +35.3% 750 ±1.8 +53.1% 1130 ±1.7 +130.6% 1536 ±1.4 +213.5%
liquid-c 22 ±0.3 29 ±0.3 +31.8% 34 ±0.6 +54.5% 35 ±1.0 +59.1% 40 ±0.7 +81.8% 63 ±1.1 +186.4% 82 ±0.6 +272.7%
liquid-compile 29 ±0.7 34 ±0.3 +17.2% 40 ±0.6 +37.9% 43 ±0.9 +48.3% 46 ±0.6 +58.6% 70 ±1.3 +141.4% 91 ±1.1 +213.8%
liquid-render 34 ±0.6 42 ±0.1 +23.5% 49 ±0.5 +44.1% 50 ±0.9 +47.1% 65 ±1.0 +91.2% 106 ±2.3 +211.8% 138 ±1.6 +305.9%
lobsters 437 ±1.4 529 ±0.6 +21.1% 616 ±1.9 +41.0% 665 ±2.0 +52.2% 788 ±3.3 +80.3% 1302 ±5.0 +197.9% 1279 ±1.7 +192.7%
loops-times 131 ±0.4 182 ±0.3 +38.9% 196 ±1.1 +49.6% 206 ±0.3 +57.3% 288 ±0.7 +119.8% 393 ±1.4 +200.0% 684 ±1.3 +422.1%
mail 54 ±0.6 72 ±0.3 +33.3% 83 ±0.7 +53.7% 83 ±1.4 +53.7% 89 ±0.9 +64.8% 142 ±1.4 +163.0% 180 ±1.2 +233.3%
matmul 99 ±0.3 129 ±0.6 +30.3% 152 ±1.1 +53.5% 159 ±0.8 +60.6% 183 ±0.7 +84.8% 245 ±1.2 +147.5% 441 ±1.2 +345.5%
nbody 19 ±0.4 22 ±0.3 +15.8% 24 ±0.4 +26.3% 26 ±0.6 +36.8% 38 ±0.5 +100.0% 47 ±0.7 +147.4% 72 ±1.0 +278.9%
nqueens 24 ±0.3 33 ±0.2 +37.5% 37 ±0.5 +54.2% 34 ±0.9 +41.7% 56 ±0.8 +133.3% 61 ±0.8 +154.2% 108 ±1.1 +350.0%
object-new 61 ±0.6 81 ±0.7 +32.8% 102 ±0.9 +67.2% 89 ±1.2 +45.9% 94 ±1.2 +54.1% 146 ±2.2 +139.3% 200 ±2.3 +227.9%
optcarrot 810 ±1.3 869 ±0.6 +7.3% 1059 ±2.1 +30.7% 1104 ±2.1 +36.3% 1622 ±0.9 +100.2% 2517 ±1.5 +210.7% 3272 ±1.1 +304.0%
protoboeuf 26 ±0.3 29 ±0.1 +11.5% 36 ±0.5 +38.5% 33 ±0.9 +26.9% 43 ±0.7 +65.4% 62 ±0.7 +138.5% 90 ±0.9 +246.2%
protoboeuf-encode 18 ±0.5 21 ±0.4 +16.7% 24 ±0.6 +33.3% 25 ±0.6 +38.9% 36 ±0.7 +100.0% 55 ±0.9 +205.6% 80 ±1.1 +344.4%
psych-load 748 ±0.5 897 ±0.2 +19.9% 1064 ±2.2 +42.2% 1051 ±1.5 +40.5% 1342 ±1.2 +79.4% 1886 ±1.8 +152.1% 2518 ±1.6 +236.6%
rack 26 ±0.5 28 ±0.2 +7.7% 34 ±0.5 +30.8% 37 ±1.1 +42.3% 42 ±0.7 +61.5% 63 ±1.2 +142.3% 98 ±1.2 +276.9%
railsbench 836 ±1.4 1066 ±0.5 +27.5% 1274 ±2.2 +52.4% 1246 ±1.8 +49.0% 1435 ±2.0 +71.7% 2772 ±7.0 +231.6% 2604 ±1.3 +211.5%
respond_to 3 ±0.5 4 ±0.4 +33.3% 5 ±0.6 +66.7% 6 ±1.0 +100.0% 10 ±0.7 +233.3% 11 ±0.9 +266.7% 31 ±1.0 +933.3%
rubocop 66 ±1.4 72 ±0.6 +9.1% 87 ±1.3 +31.8% 101 ±1.6 +53.0% 127 ±1.4 +92.4% 200 ±2.9 +203.0% 245 ±1.2 +271.2%
ruby-json 170 ±0.4 213 ±0.2 +25.3% 245 ±1.2 +44.1% 236 ±1.2 +38.8% 241 ±0.5 +41.8% 362 ±1.9 +112.9% 509 ±1.4 +199.4%
ruby-lsp 63 ±0.8 72 ±0.3 +14.3% 84 ±0.8 +33.3% 91 ±1.2 +44.4% 98 ±0.8 +55.6% 146 ±1.8 +131.7% 210 ±1.3 +233.3%
ruby-xor 10 ±0.3 13 ±0.2 +30.0% 15 ±0.4 +50.0% 15 ±0.6 +50.0% 20 ±0.6 +100.0% 25 ±0.7 +150.0% 48 ±0.7 +380.0%
rubyboy 727 ±0.4 810 ±0.2 +11.4% 978 ±1.8 +34.5% 1027 ±0.9 +41.3% 1574 ±0.9 +116.5% 2275 ±1.3 +212.9% 3233 ±1.0 +344.7%
rubykon 312 ±0.4 375 ±0.6 +20.2% 439 ±2.1 +40.7% 426 ±1.3 +36.5% 506 ±1.8 +62.2% 732 ±2.2 +134.6% 1008 ±1.4 +223.1%
send_bmethod 2 ±0.5 3 ±0.4 +50.0% 3 ±0.5 +50.0% 3 ±0.9 +50.0% 6 ±0.7 +200.0% 6 ±0.8 +200.0% 18 ±1.0 +800.0%
send_cfunc_block 41 ±0.4 51 ±0.4 +24.4% 62 ±0.7 +51.2% 64 ±1.3 +56.1% 90 ±0.8 +119.5% 107 ±2.2 +161.0% 187 ±1.5 +356.1%
send_rubyfunc_block 2 ±0.7 2 ±0.4 2 ±0.6 3 ±0.7 +50.0% 5 ±0.7 +150.0% 5 ±1.0 +150.0% 13 ±1.0 +550.0%
sequel 25 ±0.5 34 ±0.2 +36.0% 39 ±0.5 +56.0% 39 ±0.8 +56.0% 44 ±0.6 +76.0% 71 ±1.2 +184.0% 96 ±0.9 +284.0%
setivar 2 ±1.0 3 ±2.5 +50.0% 4 ±2.8 +100.0% 3 ±2.5 +50.0% 6 ±2.9 +200.0% 6 ±3.4 +200.0% 21 ±3.6 +950.0%
setivar_object 30 ±3.2 40 ±3.7 +33.3% 50 ±4.1 +66.7% 59 ±4.8 +96.7% 53 ±5.9 +76.7% 92 ±6.1 +206.7% 194 ±3.1 +546.7%
setivar_young 27 ±3.0 38 ±3.2 +40.7% 45 ±3.8 +66.7% 50 ±4.7 +85.2% 49 ±5.6 +81.5% 74 ±5.4 +174.1% 176 ±3.5 +551.9%
shipit 624 ±2.6 736 ±2.6 +17.9% 857 ±2.8 +37.3% 1008 ±2.9 +61.5% 1093 ±3.0 +75.2% 2067 ±5.8 +231.3% 2100 ±2.1 +236.5%
str_concat 11 ±0.4 16 ±0.3 +45.5% 18 ±0.5 +63.6% 19 ±0.5 +72.7% 24 ±0.5 +118.2% 29 ±0.5 +163.6% 55 ±0.8 +400.0%
structaref 6 ±2.9 10 ±5.6 +66.7% 11 ±6.4 +83.3% 9 ±5.3 +50.0% 20 ±8.1 +233.3% 21 ±8.7 +250.0% 85 ±13.1 +1316.7%
structaset 26 ±1.7 44 ±2.5 +69.2% 53 ±2.7 +103.8% 47 ±2.9 +80.8% 50 ±4.4 +92.3% 61 ±5.3 +134.6% 163 ±8.4 +526.9%
sudoku 68 ±0.5 93 ±0.2 +36.8% 114 ±1.2 +67.6% 96 ±0.7 +41.2% 137 ±0.8 +101.5% 176 ±0.8 +158.8% 310 ±1.0 +355.9%
throw 12 ±0.4 17 ±0.2 +41.7% 19 ±0.4 +58.3% 18 ±0.8 +50.0% 18 ±0.6 +50.0% 24 ±0.9 +100.0% 39 ±0.7 +225.0%
tinygql 185 ±0.3 214 ±0.2 +15.7% 249 ±1.3 +34.6% 261 ±1.7 +41.1% 311 ±1.1 +68.1% 464 ±2.1 +150.8% 606 ±0.8 +227.6%
c8a-medium c8i-large c7i-large c7a-medium c8g-medium c7g-medium c6g-medium