Performance
What your S3 client sees on a deployment like the one you would get: every request over TLS, authenticated, metered, encrypted at rest and written to the record. Nothing is turned off to measure it. our statement
Setup. A dedicated deployment in GCP us-west1 (4 vCPU, 16 GB) · client: a VM in the same region, a stock AWS SDK and curl · files kept on the deployment (placement LOCAL) · release r95 · 2026-10-30 · three back-to-back runs; each figure is the median run’s.
Store and read
Section titled “Store and read”| 4 KiB | 64 KiB | 1 MiB | 16 MiB | |
|---|---|---|---|---|
| Store (PUT, p50 / p99 ms) | 10 / 29 | 11 / 27 | 21 / 42 | 134 / 157 |
| Read (GET, first byte p50 · whole p99 ms) | 6 · 10 | 6 · 14 | 7 · 21 | 17 · 89 |
| Check it exists (HEAD, p50 / p99 ms) | 6 / 8 |
A PUT returns once the file is stored on the deployment. Sealing to Walrus follows, on the file’s placement.
Large files
Section titled “Large files”| Throughput (median) | |
|---|---|
| Multipart upload, 256 MiB (16 MiB parts, 4 at a time) | 101 MiB/s |
| Multipart upload, 1 GiB | 102 MiB/s |
| Store a 16 MiB file, one PUT | 119 MiB/s |
| Read a 16 MiB file, one stream | 236 MB/s |
| Range read, 1 MiB from a 1 GiB file | first byte 17 ms · whole p99 30 ms |
Under concurrency (64 KiB)
Section titled “Under concurrency (64 KiB)”| Clients | Read p50 / p99 ms | Store p50 / p99 ms |
|---|---|---|
| 1 | 6 / 12 | 12 / 33 |
| 8 | 12 / 35 | 43 / 129 |
Each deployment admits requests up to a rate set for it; above that, a request is answered 429 and should be retried.
Run it yourself
Section titled “Run it yourself”Every figure comes from ordinary S3 calls. On a trial deployment, time the same calls with your own client: PUT and GET at the sizes above, and a multipart upload with 16 MiB parts.
Permafrost runs on Sui testnet and Walrus testnet. Everything here describes a shipped testnet instance, not a production service.