Releases: goceleris/loadgen
v1.4.10
loadgen v1.4.9
loadgen v1.4.9
Resilience fixes that let the full benchmark matrix survive servers it previously DNF'd on. Each is the loadgen side of a column that produced zero requests.
- h1: backoff-paced reconnect on read EOF — a
Connection: closeserver (or one closing mid-response under churn-close) surfaces as a read EOF on the status/header line, not just the write. The read paths now reconnect + back off like the write path, instead of spinning read-EOFs with no pacing. (drogon churn-close: 0 → healthy.) - h2: honor server SETTINGS_MAX_FRAME_SIZE + send-window flow control — POST bodies > 16384 B were sent as one oversized DATA frame (FRAME_SIZE_ERROR) and bodies > the 65535 initial window overran flow control. Now split at the server's frame size and paced against the connection + per-stream send windows, replenished from WINDOW_UPDATE. (post-64k-h2 across the h2 columns.)
- h2: re-dial connections the server closes/GOAWAYs mid-cell — the h2 client dialed once and never recovered a torn-down conn; a server that GOAWAYs periodically (hypercorn) left the slot dead and every request hot-looped. Each conn is now a re-dialable slot with single-flight + backoff. (fastapi-h2: ~1.1B-error hot loop → healthy.)
Verified on x/net 0.56.0 incl. -race, with regression tests for the flow-control split and the reconnect path, plus a live hypercorn h2c repro.
loadgen v1.4.8
loadgen v1.4.8
Robustness + measurement-integrity fixes surfaced by the v3.9 celeris bench post-mortem.
Changes
- Dial backoff + never-connected fail-fast. Failed connects now use bounded jittered exponential backoff; a cell that never establishes a stream aborts fast (instead of a ~386k-dials/sec hot loop against a dead server). Kills the 34.7M-error dead-port cells.
- Calibrated warmup→measure handoff. The full worker set warms up and hands the converged rate into the measured window, so saturation cells start at the knee with zero t=0 error burst — no samples discarded.
- Typed ConnectErrors counter (dial/handshake failures) distinct from the total, surfaced in Result + per-second timeseries.
- Warmup visibility: warmup request/error/connect-error counts in Result + a stderr summary.
- Version self-report fixed (was a stale
1.4.5constant).
v1.4.7 — celeris v1.4.15
Changes
- Bump
github.com/goceleris/celerisv1.4.14 → v1.4.15 (io_uring churn-close memory-leak fix, celeris#314).
loadgen uses celeris only as a library for its integration testserver; no behavioral change to the load generator. Verified: build + vet + go test -race ./... + the live-celeris integration matrix.
Full Changelog: v1.4.6...v1.4.7
v1.4.6 — celeris v1.4.14 + Go 1.26.4 toolchain
Changes
- Bump
github.com/goceleris/celerisv1.4.10 → v1.4.14 (HTTP/2 connection-level send flow-control fix + stream-accounting fixes from v1.4.13, metrics dep refresh from v1.4.14). - Toolchain: Go 1.26.4 (go.mod + CI), golangci-lint v2.12 — aligns the celeris ecosystem on one toolchain.
- Test robustness: widen the per-bucket error-accounting tolerance in
TestBenchmarkerTimeseriesP99AndErrorsto remove a load-sensitive-raceflake (approximation bound only).
Full Changelog: v1.4.5...v1.4.6
v1.4.5 — streaming load modes (WS/SSE) + per-bucket time-series
Extends loadgen beyond plain request/response, all driven through the existing Client interface (worker/latency/timeseries pipeline reused unchanged).
Added
- Streaming load modes —
Config.Mode+-modeCLI flag:ws-echo/ws-large-echo/ws-hub— RFC 6455 WebSocket client (masked client frames, full extended-length encoding;ws-large-echoround-trips 64 KiB via the 64-bit length path;ws-hubblocks per call until the server's next broadcast).sse-fanout— SSE client; each delivereddata:event = one request (inter-event delivery latency).- Mutually exclusive with
HTTP2/Mix/H2CUpgrade.
- Per-bucket P99 + errors in the time-series — each
TimeseriesPointnow carriesp99_ms(windowed HDR histogram, reset every 1 s) anderrors(per-window delta) besidet/rps. The cumulative histogram and finalResult.Latencypercentiles are unchanged — the window histogram is additive. Versionconstant (1.4.5) stamped intoResult.LoadgenVersion.
Binaries
linux/darwin × amd64/arm64, built CGO_ENABLED=0 -trimpath and attached below.
Consumed by goceleris/probatorium for the WS/SSE benchmark scenarios and over-run tail-latency charts.
v1.4.4 — rated mode + HdrHistogram + federation + recv-Q + CPU sampler
Wave 11 release. All four v1.4.4 milestone issues land in this version.
Added
-
Rated mode (
-rate <constant>,Config.RateRPS) — scheduled-send benchmarker with Gil-Tene-style coordinated-omission correction. Latency interval starts at the intended dispatch deadline. Saturation mode (-rate 0) unchanged.
Closes #48. -
HdrHistogram emission —
Result.Latency.Histogramcarries a V2-compressed payload of the merged per-worker hdrhistograms. Existing P50/P75/.../P9999 summary fields preserved. Downstream tools (probatorium, perfmatrix) can re-merge across hosts/arches/git refs without re-running.
Closes #49. -
EPOLLIN backlog probe (
-recvq-probe) — every 5 s, sample/proc/<pid>/net/sockstatplus per-conn recv-Q; latchResult.LoadgenRecvQHighwhen median exceeds 64 KB sustained 10 s. Linux-only; Darwin/Windows stub keeps the field zero.
Closes #50. -
1 Hz self-CPU sampler (
-cpu-monitor) —Result.CpuPctP95exposes 95th-percentile loadgen CPU for "loadgen-bound" detection. -
Multi-host loadgen federation (
-peer,-sidecar) — coordinator + sidecar mode; per-host HdrHistograms streamed back and merged client-side; one unifiedResultfor the whole fleet.
Closes #51.
Changed
cmd/loadgen/main.goexposes-rate,-peer,-sidecar,-out,-cpu-monitor,-recvq-probedirectly.go.modbumped:github.com/goceleris/celeris v1.4.1 → v1.4.3,golang.org/x/net v0.53.0 → v0.54.0(supersedes dependabot #47).golang.org/x/net/http2/h2cdeprecation warnings suppressed via//nolint:staticcheckon the three test scaffolds that depend on it as a reference implementation; migration tohttp.Server.Protocolstracked for v1.5.0.
Compatibility
- Wire-compatible with celeris ≥ v1.4.3.
Config/Resultshapes are additive — old fields preserved.- Probatorium consumes this release directly. celeris v1.4.4 will bump its
test/perfmatrixsubmodule to v1.4.4 via goceleris/celeris#275.
Full Changelog: v1.4.3...v1.4.4