Snapshot creation and fork latency across object storage providers — how fast can a provider branch your bucket?
Powered byProvider | Score | Snapshot (med) | Fork (snap) (med) | Fork (live) (med) | First Read (med) | Success |
|---|---|---|---|---|---|---|
| Tigris | 99.8 | 0.07s | 0.10s | 0.18s | 0.15s | 100% |
| Tensorlake | 99.8 | 0.04s | 0.18s | 0.22s | 0.09s | 100% |
| Azure Blob | 98.9 | 0.63s | 0.64s | 1.23s | 0.03s | 100% |
| Archil | 0.0 | 0.00s | 0.00s | 0.00s | 0.00s | 0% |
| AWS S3 | 0.0 | 0.00s | 0.00s | 0.00s | 0.00s | 0% |
| Mosaic | 0.0 | 0.00s | 0.00s | 0.00s | 0.00s | 0% |
Want to see a provider added?
Each iteration seeds a small dataset (10 objects × 1 MB = 10 MB) into the provider bucket, then times four operations: snapshot create, fork from snapshot, fork from live, and a first object read from the fork to confirm time-to-usable.
Every created resource (objects, snapshot, forks) is torn down in a finally block so a failure mid-iteration does not leak storage or siblings.
Each provider runs 100 iterations per benchmark run. Benchmarks run weekly via GitHub Actions and results are committed to the public benchmarks repo.
The Composite Score (0–100, higher is better) scores each latency metric against a 60-second ceiling: 100 × (1 − value / 60,000ms), weighted as follows, then multiplied by success rate.
Providers with native zero-copy semantics (e.g. Tigris) create snapshots and forks in near-constant time. Copy-based emulation (S3, R2, Azure) scales with object count and total bytes, which becomes visible at larger dataset sizes.