Reproducing this
Everything here runs from a clone of the repository. No number on this site comes from anywhere else.
What you need
- Docker, with enough headroom for the infrastructure and one arm at a time.
The environment profile in
environments/declares the exact allocations. - A Rust toolchain. The version is pinned in
rust-toolchain.tomland must match the arm image's base — a test asserts it, because codegen moves throughput and a silent divergence would make the recorded toolchain wrong.
The commands
bench list # systems, variants, and when each was last measured
bench validate # what CI checks, runnable locally
bench build '*' # build every entrant image
bench prefill # populate the topic once per corpus
bench ceiling # report the ceilings, and refuse if none is gateable
bench ceiling --measure --write # re-measure them against this corpus and record it
bench run '*' --reps 3 # every arm, interleaved
bench run spate --reps 3 # one system; nothing else is touched
bench run '*' --dry-run # print the plan without running it
bench run spate --mode sustained --rate 40000 # latency; has to be asked for
--dry-run is worth using before any full sweep. It prints the exact execution
list — one line per arm, with its entrant, variant, wire format and knobs
— which is how you check that "only Spate" really means only Spate before
spending hours finding out. (Image digests are resolved and recorded per arm
when a run actually executes, not in the dry-run.)
Two properties worth knowing
Runs are interleaved, not batched. bench run alternates between arms rather
than completing all of one and then all of the next. This is not fastidiousness:
running arms in sequence has already manufactured a fake 30% difference in a
related project, because the machine is not in the same state at the end of a
long run as at the start.
Nothing appends over anything. bench run only ever appends, and there is no
code path in it that truncates a results file. Re-running one system produces a
diff confined to that system's file, and a number later found to be wrong is
corrected in a commit of its own.
If you get a different number
That is useful and I would like to know. The most likely causes, in order:
- A different environment. Add your own environment profile rather than comparing across; the site will refuse to draw them on one axis, which is the intended behaviour rather than an obstacle.
- A busy machine. Background load moves throughput materially, which is why the site shows run-to-run spread on every chart. Every sweep also measures one arm twice under two labels and publishes the difference, so the spread the rig itself produces is a figure you can compare yours against rather than a number quoted at you.
- A real defect in the harness. Open an issue. A benchmark that cannot be reproduced is a claim, not evidence.
No credentials required
Every arm, including Spate's, builds from a clean clone of this repository. The
framework is consumed from crates.io and pinned in Cargo.lock, so the arm that
is ours is exactly as reproducible as every arm that is not.
Reproducing the cloud environment
Published runs execute on a disposable EC2 box — one on-demand
c8gd.metal-24xl (Graviton4: 96 vCPUs that are 96 physical cores, no SMT, no
hypervisor), Ubuntu 24.04 arm64, with ClickHouse, the broker and Docker each on
one of the instance's three local NVMe devices, so storage is not a figure
anyone has to provision. What the box actually executes is public
and versioned at the SHA it ran: .github/aws/userdata.sh.tpl boots it and
.github/aws/run-bench.sh builds the harness from the clone at that SHA and
runs the suite. The instance type, volume, AMI and those scripts are the whole
of what makes a number reproducible, and they are all here.
The cloud plumbing that spends the money — the launcher, the collector, and the AWS Terraform — runs from a private operations repository, because the benchmark shares an AWS account and its account shape is not something to publish. It changes nothing you can reproduce: a run executes this repo at an approved commit and its results come back as an ordinary, validated pull request. A full sweep costs roughly the instance-hours it takes at ~$5.6/hour, bounded by a 36-hour TTL.