forge-perf tracks the sustained ingest rate of the Forge storage stack. A dedicated EC2 box runs every Forge service from the images published on main, drives them with the storage-qualification drill's import profile (~128 MiB objects), and publishes one number per run: p5 of 30-second windows, the highest rate at least 95% of the windows held. The median sits beside it. Each run also publishes the same figures for the drill's two read streams, read-back and restore, which ingot serves from its local spool until spool eviction exists.
The results page will be served from GitHub Pages at https://fil-forge.github.io/forge-perf/ once the first run is published.
- Every five minutes the box resolves a set: the smelt SHA, the harness SHA and the digest of every tracked Forge image. A new set starts a run; a nightly run starts at 03:00 UTC regardless.
- The box boots the stack with smelt, every image pinned by digest, piri writing to S3, and 25 ms of round trip added between the node and the central services.
- The drill ingests up to its cap and reports per-window rates.
- The box builds an allowlisted record, uploads it and the raw data to a private bucket, and wipes every container, every volume and the box's piri buckets.
- A scheduled Action checks the record, commits it to the
resultsbranch and redeploys the page.
A developer can also measure a pull request in a Forge service repository by commenting /forge-perf on it. The box runs main's set and the same set with the pull request's image, back to back, and the comparison comes back as a comment (docs/operations.md).
| Tier | Instance | Role |
|---|---|---|
| 1 | m9gd.2xlarge | the persistent box until a valid run reached its ceiling on 2026-09-28 |
| 2 | m9gd.8xlarge | the persistent box until its network bounded the number on 2026-09-30 |
| 3 | m9gd.16xlarge | the persistent box, asleep between runs, and campaign boxes |
Each tier's ceiling is the lower of its measured sustained S3 PUT and NVMe write throughput. The page draws the three ceilings as gates on a thermometer.
- docs/DESIGN.md: what is measured, the modeled topology, the box, a run from trigger to result, latency, storage, the record and page, operations and open questions.
- docs/operations.md: procedures run by hand: the bootstrap apply, piri's key, the harness credential, the denylist parameter and the cost allocation tag.
- docs/runner.md: the host scripts on the box, and running them on a laptop in skip mode.
- AGENTS.md: layout, conventions and the rules for this public repository.
make check runs every scripts/ci/check-*.sh, the same command CI runs. The denylist check needs a pattern from PUBLIC_DENYLIST_REGEX or a file named by DENYLIST_FILE, and skips with a notice without one. CI runs it in a job of its own, which fails when the pattern is missing, except on pull requests from forks.
MIT; see LICENSE.