Skip to content

Benchmarks

Every number on this page comes from a committed evidence run with zero errors in every row, and every harness ships in the repository. Two instruments are used on purpose: our own matrix harness, and warp, MinIO's own benchmark tool, so the comparison cannot hinge on whose ruler was used. Read the caveats before quoting anything; they are part of the result.

How to read latency Throughput (MiB/s, ops/s) is "how much per second": higher is better. The p50 and p95

views are response times in milliseconds: p50 is the median request, p95 the slow tail, and lower is better. A Lockwell p50 at half of MinIO's means Lockwell answers twice as fast. The Advantage column already does this arithmetic for you, in the right direction, on every view. :::

The ledger

higher is better · advantage column = how many times better Lockwell is on this metric, in either direction

OBJECT SIZE
CONCURRENT CLIENTS
OperationSizeClientsLockwellMinIOAdvantage
put4 KiB13.20 MiB/s0.56 MiB/s5.7x
put4 KiB1617.4 MiB/s4.12 MiB/s4.2x
put4 KiB6410.5 MiB/s9.09 MiB/s1.2x
put1 MiB1155.4 MiB/s38.4 MiB/s4.0x
put1 MiB161,381 MiB/s188.8 MiB/s7.3x
put1 MiB641,622 MiB/s373.5 MiB/s4.3x
put64 MiB1308.1 MiB/s266.0 MiB/s1.2x
put64 MiB161,593 MiB/s598.7 MiB/s2.7x
put64 MiB641,631 MiB/s400.9 MiB/s4.1x
get4 KiB111.3 MiB/s4.53 MiB/s2.5x
get4 KiB1647.3 MiB/s45.7 MiB/s1.0x
get4 KiB6478.5 MiB/s48.0 MiB/s1.6x
get1 MiB1944.5 MiB/s256.9 MiB/s3.7x
get1 MiB168,598 MiB/s3,869 MiB/s2.2x
get1 MiB648,544 MiB/s5,203 MiB/s1.6x
get64 MiB12,858 MiB/s2,460 MiB/s1.2x
get64 MiB1610,889 MiB/s4,733 MiB/s2.3x
get64 MiB645,410 MiB/s3,524 MiB/s1.5x
head4 KiB12,510 ops/s2,298 ops/s1.1x
head4 KiB1611,512 ops/s13,179 ops/s0.9x behind
head4 KiB6423,451 ops/s18,741 ops/s1.3x
head1 MiB13,123 ops/s1,007 ops/s3.1x
head1 MiB1618,111 ops/s20,576 ops/s0.9x behind
head1 MiB6442,878 ops/s43,716 ops/s1.0x behind
head64 MiB13,149 ops/s2,208 ops/s1.4x
head64 MiB1617,290 ops/s20,865 ops/s0.8x behind
head64 MiB6452,432 ops/s14,688 ops/s3.6x
list4 KiB12,001 ops/s524.3 ops/s3.8x
list4 KiB164,095 ops/s1,848 ops/s2.2x
list4 KiB642,737 ops/s464.9 ops/s5.9x
list1 MiB12,076 ops/s1,351 ops/s1.5x
list1 MiB165,114 ops/s2,044 ops/s2.5x
list1 MiB642,699 ops/s564.5 ops/s4.8x
list64 MiB12,067 ops/s1,687 ops/s1.2x
list64 MiB167,024 ops/s1,818 ops/s3.9x
list64 MiB643,661 ops/s503.9 ops/s7.3x
multipart-put64 MiB1222.5 MiB/s232.6 MiB/s1.0x behind
multipart-put64 MiB16985.1 MiB/s413.4 MiB/s2.4x
multipart-put64 MiB641,036 MiB/s532.9 MiB/s1.9x
multipart-copy64 MiB1305.4 MiB/s205.4 MiB/s1.5x
multipart-copy64 MiB163,179 MiB/s325.3 MiB/s9.8x
multipart-copy64 MiB642,300 MiB/s338.9 MiB/s6.8x
mixed-rw4 KiB11,714 ops/s338.0 ops/s5.1x
mixed-rw4 KiB166,549 ops/s2,868 ops/s2.3x
mixed-rw4 KiB647,259 ops/s1,878 ops/s3.9x
mixed-rw1 MiB1316.6 ops/s99.9 ops/s3.2x
mixed-rw1 MiB163,279 ops/s918.6 ops/s3.6x
mixed-rw1 MiB644,074 ops/s1,537 ops/s2.7x
mixed-rw64 MiB110.2 ops/s9.29 ops/s1.1x
mixed-rw64 MiB1692.3 ops/s54.3 ops/s1.7x
mixed-rw64 MiB6481.8 ops/s27.9 ops/s2.9x

on-disk footprint for the identical write set: Lockwell 44.4 GiB vs MinIO 80.4 GiB (0.55x, lower is better)

2026-06-12 · Windows-11-10.0.26200-SP0 · zero errors required in every row (this run: 0) · reproduce: make bench

Caveats

These are part of the result, not footnotes to hide.

  • Durability tier. The bench configuration runs Lockwell in its grouped-durability tier (the write-ahead log is fsynced every 10 ms, not per commit, matching Garage's model; a power loss can cost up to ~10 ms of acknowledged writes). MinIO runs its defaults, which sync per operation. Lockwell's default tier is strict per-commit sync; if your threat model requires it, benchmark that tier instead. This asymmetry flatters Lockwell most on small-object PUT, which is exactly where the warp gap is largest.
  • One host. Server and client currently share a developer machine (Docker Desktop). Ratios and p50s are the signal; absolute numbers will differ on your hardware, which is why the harnesses ship. A neutral-hardware run is the plan of record, below.
  • MinIO version. Each run pulls minio/minio:latest at run time. Version-to-version variance is real, so cross-run comparisons of old tables mix that in.
  • CPU. Lockwell sustains the higher throughput while using more CPU than MinIO at peak. It trades compute for throughput and disk; if you are CPU-bound, weigh that.
  • Small-object frontier. The honest losses live in the table too: HEAD and mixed-read p50 at 4 KiB under 16 and 64 clients run 1.1x to 1.5x behind MinIO. That path is transport-bound in both servers; we publish it rather than filter it.
  • Storage. The random (incompressible) write set is the worst case for Lockwell's deduplication and compression and it still measures 0.54x MinIO's disk. On a compressible, duplicated dataset in an earlier validated run (2026-06-04), Lockwell stored 5.15 MiB where MinIO stored 1015.9 MiB.

Neutral hardware

Dev-machine numbers carry dev-machine noise. The standing plan is to run the same two harnesses on a fresh low-cost cloud box (the EUR 5 Hetzner class Lockwell is designed to fit), where nothing else is running, the exact specs are public, and anyone can rent the identical machine and check. scripts/bench-remote-hetzner.sh provisions the server with hcloud, runs make bench and make bench-warp, copies the evidence back, and destroys the box; the dataset selector above grows a new entry whenever such a run lands.

Reproduce

sh
make bench         # the full matrix harness (Lockwell, MinIO, Garage, SeaweedFS)
make bench-warp    # MinIO's warp against Lockwell and MinIO on the same stack

Both write per-run evidence (transcripts, versions, raw outputs) under bench-results/; regenerate the dataset behind this page with node website/scripts/build-bench-data.mjs <matrix-dir> <warp-dir>. The methodology and the regression thresholds the release gates enforce live in docs/benchmark-baselines.md.

Released under the Apache-2.0 License. License