Performance & Benchmarks
Lioran S3 is engineered in Rust for high-throughput streaming with bounded memory overhead.
Benchmark Results
In controlled load testing on modern NVMe storage and dedicated gigabit/10-gigabit networking, Lioran S3 achieved the following benchmark throughput metrics:
┌───────────────────────────┬───────────────────────────┬───────────────────────────┐
│ 300+ MB/s │ 300+ MB/s │ 100 GB │
│ Write Throughput │ Read Throughput │ Tested Workload │
└───────────────────────────┴───────────────────────────┴───────────────────────────┘
- Write Throughput: Sustained 300+ MB/s streaming write throughput.
- Read Throughput: Sustained 300+ MB/s streaming read throughput.
- Tested Datasets: Validated under continuous 100 GB soak testing workloads.
:::note Benchmark Disclaimer
Benchmark results vary based on hardware specifications, storage media (local NVMe vs SATA SSD vs cloud block volumes), object size distribution, concurrency, network topology, reverse proxy configuration, and configured write durability settings (strict vs balanced). These metrics represent tested results under benchmark workloads and are not universal guarantees.
:::
Key Tuning Factors
1. Durability Modes (BASTION_DURABILITY)
- In
strictmode, every chunk and completed object write executes a synchronousfsync(sync_all) before committing metadata. This guarantees crash consistency on sudden power loss, with throughput bound by storage drive sync latency. - In
balancedmode, synchronousfsynccalls are omitted, allowing the OS to manage writeback caching. This mode yields peak throughput on enterprise NVMe drives or battery-backed controllers.
2. Streaming Buffer Chunk Size (BASTION_STREAM_CHUNK_KIB)
- Default is
256 KiB(valid range:64to4096KiB). - Larger chunk sizes (e.g.
1024or2048KiB) can increase sequential throughput on high-bandwidth networks, while smaller chunk sizes reduce per-connection memory footprint under extreme concurrency.
3. Multipart Concurrency
When uploading large files via @liorans3/driver or liorans3 multipart upload:
- Setting
--concurrency 4or8parallelizes chunk ingestion across available CPU cores and network streams. - Recommended part size:
32 MiB(or64 MiBfor files > 10 GB).
4. Reverse Proxy Unbuffered Streaming
Ensure Caddy or your reverse proxy uses unbuffered chunk forwarding (flush_interval -1). Proxy response buffering will introduce latency and inflate proxy memory usage during large transfers.