Benchmarks
This page compares the default transfer settings, other fixed settings and transfer-tuning: auto on 3 providers and 3 cache sizes. See Performance for what the settings do and how to select them.
How the numbers were measured
- Run 39906947417 of the Transfer benchmark workflow, on 2026-10-23.
- Runner:
ubuntu-latest, linux x64, 4 CPUs, 16 GiB RAM, node v24.21.0. - Each configuration ran 2 times. The tables show the median transfer rate in MiB/s.
- The payload is random bytes, so the archive is about as large as the payload.
- The transfer rate is the S3 transfer alone. It does not include tar, compression or the sha256 check.
- Bold is the fastest fixed configuration in that column, and the
autorow when it is as fast or faster. - The
autorules come from an earlier sweep, run 39905131759. This page uses a different run, so theautorows are not the data the rules were fitted to. - The jobs for the three providers ran at the same time. The numbers depend on the region, the runner and the time of day. The same configuration can change by more than 30% between runs. Compare rows inside one table, not numbers between runs.
transfer-tuning: auto against the defaults
A value above 1 means that auto was faster than the defaults.
| Restore | Amazon S3 | Cloudflare R2 | Google Cloud Storage |
|---|---|---|---|
| 128 MiB | 1.13× | 3.22× | 1.60× |
| 512 MiB | 1.25× | 2.08× | 2.05× |
| 2 GiB | 1.46× | 2.89× | 2.62× |
| Save | Amazon S3 | Cloudflare R2 | Google Cloud Storage |
|---|---|---|---|
| 128 MiB | 1.75× | 1.82× | 1.58× |
| 512 MiB | 1.34× | 1.20× | 1.11× |
| 2 GiB | 1.40× | 1.86× | 1.30× |
128 MiB cache
Restore
| Download | Amazon S3 | Cloudflare R2 | Google Cloud Storage |
|---|---|---|---|
| defaults: 8 x 8 MiB | 121 | 47 | 67 |
| 8 x 16 MiB | 129 | 126 | 101 |
| 16 x 8 MiB | 134 | 133 | 80 |
| 16 x 16 MiB | 129 | 115 | 108 |
| 32 x 8 MiB | 141 | 125 | 85 |
| 32 x 16 MiB | 131 | 115 | 100 |
| 32 x 32 MiB | 120 | 75 | 95 |
transfer-tuning: auto | 136 | 150 | 108 |
Save
| Upload | Amazon S3 | Cloudflare R2 | Google Cloud Storage |
|---|---|---|---|
| defaults: 8 x 64 MiB | 57 | 27 | 60 |
| 8 x 16 MiB | 108 | 43 | 87 |
| 16 x 16 MiB | 101 | 44 | 88 |
| 16 x 32 MiB | 74 | 43 | 78 |
| 32 x 16 MiB | 108 | 53 | 94 |
transfer-tuning: auto | 99 | 49 | 95 |
512 MiB cache
Restore
| Download | Amazon S3 | Cloudflare R2 | Google Cloud Storage |
|---|---|---|---|
| defaults: 8 x 8 MiB | 230 | 102 | 82 |
| 8 x 16 MiB | 278 | 159 | 144 |
| 16 x 8 MiB | 278 | 224 | 151 |
| 16 x 16 MiB | 303 | 182 | 188 |
| 32 x 8 MiB | 283 | 216 | 181 |
| 32 x 16 MiB | 266 | 217 | 171 |
| 32 x 32 MiB | 275 | 201 | 196 |
transfer-tuning: auto | 288 | 211 | 168 |
Save
| Upload | Amazon S3 | Cloudflare R2 | Google Cloud Storage |
|---|---|---|---|
| defaults: 8 x 64 MiB | 161 | 102 | 186 |
| 8 x 16 MiB | 131 | 78 | 117 |
| 16 x 16 MiB | 227 | 98 | 186 |
| 16 x 32 MiB | 238 | 136 | 210 |
| 32 x 16 MiB | 130 | 142 | 198 |
transfer-tuning: auto | 216 | 123 | 206 |
2 GiB cache
Restore
| Download | Amazon S3 | Cloudflare R2 | Google Cloud Storage |
|---|---|---|---|
| defaults: 8 x 8 MiB | 249 | 96 | 89 |
| 8 x 16 MiB | 330 | 227 | 162 |
| 16 x 8 MiB | 338 | 268 | 183 |
| 16 x 16 MiB | 386 | 258 | 227 |
| 32 x 8 MiB | 377 | 273 | 226 |
| 32 x 16 MiB | 352 | 271 | 258 |
| 32 x 32 MiB | 371 | 277 | 269 |
transfer-tuning: auto | 364 | 278 | 233 |
Save
| Upload | Amazon S3 | Cloudflare R2 | Google Cloud Storage |
|---|---|---|---|
| defaults: 8 x 64 MiB | 265 | 122 | 245 |
| 8 x 16 MiB | 162 | 72 | 130 |
| 16 x 16 MiB | 289 | 139 | 239 |
| 16 x 32 MiB | 351 | 176 | 317 |
| 32 x 16 MiB | 401 | 241 | 315 |
transfer-tuning: auto | 370 | 226 | 318 |
Run the benchmark yourself
sh
gh workflow run benchmark.yml -f size-mb=128,512,2048 -f matrix=sweep -f repeats=2
gh run download <run-id> --dir bench
node tests/ci/benchmarkPage.ts bench docs/guide/benchmarks.md [rules-run-id]