Checked against ground truth.
Stampede's numbers are tested on every push against a server whose response times are known exactly.
Method
A calibrated echo server delays each response by a value from a known distribution (fixed, uniform, lognormal, bimodal) and records exactly how long it held every request. Stampede drives it at a fixed arrival rate from a separate process, and its p50, p95 and p99 must land within 2% or 1 ms of the server's exact values, whichever is larger. A case also fails if a single request is dropped or counted twice.
Side by side with k6 and wrk2
The nightly job runs the same workloads through Stampede, k6 and wrk2 against the echo server. Each tool is judged against the server's exact values for its own run (within max(2% of truth, 1 ms) at p50, p95 and p99). Latest run: 2026-10-08, commit 6763e5b, on a GitHub-hosted ubuntu-latest.
| Tool | p50 ms | p95 ms | p99 ms | Truth p50 / p95 / p99 | Within tolerance |
|---|---|---|---|---|---|
| Stampede (from scheduled send) | 10.17 | 11.20 | 11.26 | 10.06 / 11.07 / 11.08 | yes |
| Stampede (service time) | 10.14 | 11.16 | 11.18 | 10.06 / 11.07 / 11.08 | yes |
| k6 | 10.64 | 10.94 | 11.09 | 10.56 / 10.86 / 11.00 | yes |
| wrk2 (from scheduled send) | 11.22 | 12.12 | 12.38 | 10.42 / 10.98 / 11.13 | no |
| Tool | p50 ms | p95 ms | p99 ms | Truth p50 / p95 / p99 | Within tolerance |
|---|---|---|---|---|---|
| Stampede (from scheduled send) | 21.14 | 55.58 | 80.13 | 21.04 / 55.48 / 80.02 | yes |
| Stampede (service time) | 21.12 | 55.55 | 80.13 | 21.04 / 55.48 / 80.02 | yes |
| k6 | 20.29 | 54.58 | 80.82 | 20.21 / 54.48 / 80.74 | yes |
| wrk2 (from scheduled send) | 20.98 | 55.10 | 82.05 | 20.57 / 53.81 / 81.03 | no |
| Tool | p50 ms | p95 ms | p99 ms | Truth p50 / p95 / p99 | Within tolerance |
|---|---|---|---|---|---|
| Stampede (from scheduled send) | 5.56 | 5.67 | 300.29 | 5.48 / 5.54 / 300.04 | yes |
| Stampede (service time) | 5.55 | 5.64 | 300.29 | 5.48 / 5.54 / 300.04 | yes |
| k6 | 5.54 | 5.69 | 300.56 | 5.47 / 5.58 / 300.48 | yes |
| wrk2 (from scheduled send) | 5.82 | 6.74 | 301.05 | 5.17 / 5.33 / 300.44 | no |
"From scheduled send" counts any wait inside the load generator (no coordinated omission); "service time" starts when the request actually left, as k6 measures. Each tool's truth differs slightly because each tool drives its own run. wrk2 reads about 1 ms high in every case, so it misses the 1 ms tolerance by a fraction of a millisecond; it schedules requests on its event loop's millisecond timer and counts from the scheduled time, so up to a millisecond of timer delay lands in its figures.
One process
How much load one Stampede process generates before it, rather than the target, becomes the limit. The nightly job raises the arrival rate against the echo server (1 ms fixed delay) running on the same 4-CPU GitHub-hosted ubuntu-latest runner, for 10s per level; a level is clean when nothing dropped, achieved rate within 2% of plan, errors under 0.1%, p99 scheduling lag under 10 ms. Latest run: 2026-10-07. Highest clean rate: 10,000 requests per second. Generator and target share the machine, so a worker on a host of its own does at least this.
| Planned /s | Achieved /s | Dropped | Errors | p99 scheduling lag | Clean |
|---|---|---|---|---|---|
| 1,000 | 1,000 | 0 | 0.00% | 8 µs | yes |
| 2,000 | 2,000 | 0 | 0.00% | 16 µs | yes |
| 5,000 | 4,999 | 0 | 0.00% | 17 µs | yes |
| 10,000 | 9,999 | 0 | 0.00% | 96 µs | yes |
| 20,000 | 3,993 | 81,550 | 0.13% | 7,438.335 ms | no |
Still to be measured
A quick accuracy check gates every push in CI and the full one runs nightly. The cluster targets (200 workers, 100,000 requests per second across them, 50,000 WebSocket connections) need several machines rather than one hosted runner, and appear here only once measured.