Benchmarks and methodology

Every performance number Adjoint publishes is either measured (and we say where and how) or illustrative (and we say so). This page is the source of truth behind the numbers on the product page.

Time to a ready clone (TTFC)

TTFC — time-to-first-clone — is measured from instance creation to the instance reporting Ready, using control-plane object timestamps (1-second granularity). Developer-perceived wall-clock around adj clone --wait tracks it within about a second.

Measured results

Three independent benchmark runs (2026-07-03, 2026-07-16, 2026-07-17), each claiming 9–10 clones sequentially from a warm pool (targetWarm=10), on a SINGLE_AZ_1 FSx for OpenZFS filesystem (128 MB/s throughput, 1000 IOPS) in us-east-2:

Path p50 p95 Notes
Warm pool claim 15–16 s 25–30 s reproduced across all three runs
On demand (pool empty) ~99 s FSx volume creation dominates
On demand, under FSx load up to ~10 min worst observed case (see below)

Details that matter:

Storage efficiency

Clones are FSx for OpenZFS copy-on-write children of the golden snapshot: a clone stores only the blocks it changes. Total storage follows base + Σ(each clone's changed blocks) — it does not multiply by clone count.

Measured results

From our FSx CoW validation battery (10 GB golden, measured via FSx UsedStorageCapacity):

Scenario Measured total vs. full copies
Golden + 10 clones, no changes yet 1.115× the golden's size (~126 MB overhead per clone) — vs. 11× for full copies
Golden + 10 clones, after 120 s of heavy pgbench writes on each 1.366× (~276 MB of changed blocks per clone)

The 1.12× number on the product page

That figure is an illustrative model, not a measurement: a 500 GB golden plus 10 developers each changing 6 GB is 560 GB ≈ 1.12× — assuming, pessimistically, that every changed byte costs its full size. The measured numbers above are the empirical anchors; your ratio depends entirely on how much your developers change. Write-heavy work — table rewrites, index rebuilds, VACUUM FULL, bulk updates — diverges clones faster and moves the ratio up. Storage is cheap relative to full copies in every scenario we've measured, but copy-on-write is not magic: you pay for what you change.

Query performance on a clone

A clone is fit for functional and integration work, not as a production performance replica. Measured on a medium clone (0.5 vCPU / 512 Mi, the default), pgbench with 4 clients:

Reproducing these numbers

The TTFC harness ships with the provisioning bundle (verify/ttfc.sh in the embedded module — export it with adj cluster bundle export): it drains and claims against your own pool and prints per-clone timings. Storage amplification is visible in the FSx console as UsedStorageCapacity before and after cloning. If your measurements disagree with this page, we want to know: [email protected].