Cursus ships Docker end-to-end correctness benchmarks and Go storage microbenchmarks. Published throughput numbers are meaningful only with the workload, hardware, durability, topology, and correctness counters attached.
| Topology | Compose file | Records | Partitions | Producer/consumer |
|---|---|---|---|---|
| Standalone | test/docker-compose.yml |
100000 | 12 | one idempotent batched publisher, one polling group consumer |
| Cluster | test/cluster/docker-compose.yml |
100000 | 12 | one multi-broker publisher, one coordinator/leader-routed polling group consumer |
The source settings are test/publisher/config.yaml, test/consumer/config.yaml, and the matching files under test/cluster. Benchmark storage uses tmpfs in the checked-in compose workloads, so results emphasize broker/client behavior and do not represent durable physical-disk latency.
RUN_E2E_BENCHMARK=1 go test -v -timeout 30m ./test/e2e-benchmark/...
PowerShell:
$env:RUN_E2E_BENCHMARK = "1"
go test -v -timeout 30m ./test/e2e-benchmark/...
make bench runs the standalone compose workload. See Benchmark Verification for direct compose commands and cleanup.
The harness fails on non-zero container exit, timeout, incomplete/verification markers, anchored panic/fatal logs, failed publishes, missing records, duplicate message IDs, or duplicate logical offsets. Multi-digit counters are parsed numerically. A success banner without zero correctness counters is not sufficient.
Expected consumer summary fields include:
Total Messages
Elapsed Time
Overall TPS
Duplicate (MessageID) : 0
Duplicate (Offset) : 0
Message missing : 0
The test output filters successful logs to benchmark summaries. Full compose service logs are collected when a process times out or verification fails.
Those require purpose-built workloads and failure tests. Do not infer them from this benchmark.
Normal E2E runs on pull requests. The Docker benchmark runs only on pushes to main, after normal E2E succeeds, in the final step of .github/workflows/e2e-tests.yml. It builds its own standalone/cluster compose images; Docker layer caching may help, but the active E2E containers are not reused.
make bench-disk
make bench-serialize
Equivalent commands:
go test ./pkg/disk/ -bench=. -benchmem -count=3 -timeout=120s
go test ./pkg/disk/ -bench=BenchmarkSerializeDiskMessage -benchmem -count=5 -timeout=60s
Microbenchmarks isolate serialization and disk-handler operations from the network and coordinators. Record Go version, OS/filesystem, CPU, disk/tmpfs, benchmark count, and configuration when comparing results.
A useful report includes:
Do not commit generated benchmark result files unless they are intentionally curated evidence for a release or design document.