BENCHMARKS

Checked against ground truth.

Stampede's numbers are tested on every push against a server whose response times are known exactly.

01

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.

The harness and its README →

02

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.

fixed 10 ms, 200/s for 20 s
Toolp50 msp95 msp99 msTruth p50 / p95 / p99Within tolerance
Stampede (from scheduled send)10.1711.2011.2610.06 / 11.07 / 11.08yes
Stampede (service time)10.1411.1611.1810.06 / 11.07 / 11.08yes
k610.6410.9411.0910.56 / 10.86 / 11.00yes
wrk2 (from scheduled send)11.2212.1212.3810.42 / 10.98 / 11.13no
lognormal, median 20 ms, 300/s for 30 s
Toolp50 msp95 msp99 msTruth p50 / p95 / p99Within tolerance
Stampede (from scheduled send)21.1455.5880.1321.04 / 55.48 / 80.02yes
Stampede (service time)21.1255.5580.1321.04 / 55.48 / 80.02yes
k620.2954.5880.8220.21 / 54.48 / 80.74yes
wrk2 (from scheduled send)20.9855.1082.0520.57 / 53.81 / 81.03no
bimodal 5 ms / 300 ms (2%), 300/s for 30 s
Toolp50 msp95 msp99 msTruth p50 / p95 / p99Within tolerance
Stampede (from scheduled send)5.565.67300.295.48 / 5.54 / 300.04yes
Stampede (service time)5.555.64300.295.48 / 5.54 / 300.04yes
k65.545.69300.565.47 / 5.58 / 300.48yes
wrk2 (from scheduled send)5.826.74301.055.17 / 5.33 / 300.44no

"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.

03

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 /sAchieved /sDroppedErrorsp99 scheduling lagClean
1,0001,00000.00%8 µsyes
2,0002,00000.00%16 µsyes
5,0004,99900.00%17 µsyes
10,0009,99900.00%96 µsyes
20,0003,99381,5500.13%7,438.335 msno
04

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.