Performance Benchmarks

These numbers come from the s3BEAR benchmark harness. The headline result: across 2,680 measured transfers spanning four object sizes and up to 50 concurrent clients, every sample returned correct, complete bytes — zero failures. The presigned data path keeps pace with talking to S3 directly, and the share proxy, after tuning, moves large objects at near-direct throughput.

How to read this page

Throughput is in MiB/s (higher is better); latency is in milliseconds (lower is better). Percentages in the results table compare each gateway path against the direct baseline on the same run. This is a single-host, HTTP-only benchmark — it measures gateway overhead and stability, not production capacity or a cross-product ranking.

Test methodology

SettingValue
HardwareApple M4 Mac mini · 10 cores · 16 GB RAM
StackOne s3BEAR process · PostgreSQL 16 · MinIO · Docker bridge networking
TransportHTTP, no TLS
Database poolDB_POOL_SIZE=32 · DB_MAX_OVERFLOW=32
Total samples2,680 measured targets — 2,680 successful, 0 failed, 0 short

Download paths measured

  • direct — baseline, client talks straight to storage without s3BEAR.
  • gateway-presigned — a pre-generated presigned URL (no per-request control plane).
  • gateway-presigned-e2e — a permission check and fresh presign on every request.
  • gateway-share — token resolution per request; all bytes proxy through s3BEAR.

Measured results

Throughput in MiB/s. The parenthetical percentage is the change versus direct on the same profile.

ProfileDirect storagePresigned dataPresigned E2EShare proxyFailed samples
1 MiB, c10 final smoke619.6595.5 (−3.9%)285.0 (−54.0%)145.2 (−76.6%)0 / 80
16 MiB, c10, median of 31935.31980.9 (+2.4%)1588.1 (−17.9%)1583.9 (−18.2%)0 / 360
128 MiB, c5 stability run1411.71821.2 (+29.0%)1991.3 (+41.1%)1339.5 (−5.1%)0 / 40
1 MiB, c50 sharded stress558.3475.2 (−14.9%)395.9 (−29.1%)160.6 (−71.2%)0 / 400

The pattern is what you'd expect from a gateway: for objects 16 MiB and up, bytes dominate and the presigned data path essentially matches direct storage. For small 1 MiB objects under heavy concurrency, per-request control-plane and proxy work is a larger share of the total, so the fully-proxied share path costs more.

Optimization impact

The share proxy and presigned control plane were the two areas we tuned. Before → after, same hardware:

SignalBaselineOptimizedChange
Share throughput480.3 MiB/s1583.9 MiB/s+229.7%
Share p95 TTFB539.3 ms40.1 ms−92.6%
Share p95 total latency561.4 ms124.8 ms−77.8%
Presigned E2E throughput1034.1 MiB/s1588.1 MiB/s+53.6%
Presigned E2E control p95118.5 ms18.2 ms−84.7%
1,000-part presign preparation183 ms92 ms−49.8%

Success / failure scorecard

We hold the benchmark to explicit goals and report them honestly — including the targets we haven't fully met yet.

GoalResultEvidence
Correct, complete responsesPASS2,680 / 2,680 measured samples succeeded
Presigned data path within 5% of directPARTIALPassed c10 smoke (−3.9%) and 16 MiB (+2.4%); failed c50 (−14.9%)
Presigned E2E control p95 below 100 ms at c50PASS91.0 ms after DB pool tuning
Presigned E2E throughput within 10% of direct for objects ≥16 MiBFAIL82.1% of direct — missing by 7.9 points
Large-object share stabilityPROVISIONAL PASS128 MiB run: zero failures, 94.9% of direct throughput (single run)
Small-object share performance at c50FAIL28.8% of direct, p95 TTFB 546.4 ms
Production capacity or cross-product rankingNOT MEASUREDSingle host, HTTP only, no resource limits
Scope & honesty

This is a controlled, single-host benchmark over plain HTTP with no resource limits. It is designed to isolate s3BEAR's own overhead and stability — not to predict production capacity, and not to rank s3BEAR against other products. Small-object share throughput at high concurrency, and presigned E2E throughput for large objects, are known areas we're still improving.

To reproduce or extend these runs, the harness sweeps object size against concurrency:

Object sizeConcurrencyRequests per runDominant signal
1 MiB1, 10, 50300Control plane, TTFB, request rate
16 MiB1, 10, 50100Typical transfer and concurrency
128 MiB1, 10, 2530Sustained throughput and backpressure
1024 MiB1, 45Long-stream stability and memory

Related: Architecture · Public Share Links · Image Serving & Transforms · Deployment