Skip to content

Releases: goceleris/loadgen

v1.4.10

23 Jun 10:42
89e9f9c

Choose a tag to compare

Bump celeris dependency to v1.5.4 for the v1.5.4 cross-repo benchmark release set. No loadgen behavior change.

loadgen v1.4.9

21 Jun 14:55
7328187

Choose a tag to compare

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: close server (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

16 Jun 18:13
9e845ac

Choose a tag to compare

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.5 constant).

v1.4.7 — celeris v1.4.15

04 Jun 22:05
5cfbf2e

Choose a tag to compare

Changes

  • Bump github.com/goceleris/celeris v1.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

04 Jun 06:22
3001ec5

Choose a tag to compare

Changes

  • Bump github.com/goceleris/celeris v1.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 TestBenchmarkerTimeseriesP99AndErrors to remove a load-sensitive -race flake (approximation bound only).

Full Changelog: v1.4.5...v1.4.6

v1.4.5 — streaming load modes (WS/SSE) + per-bucket time-series

31 May 10:27
2a1148d

Choose a tag to compare

Extends loadgen beyond plain request/response, all driven through the existing Client interface (worker/latency/timeseries pipeline reused unchanged).

Added

  • Streaming load modesConfig.Mode + -mode CLI flag:
    • ws-echo / ws-large-echo / ws-hub — RFC 6455 WebSocket client (masked client frames, full extended-length encoding; ws-large-echo round-trips 64 KiB via the 64-bit length path; ws-hub blocks per call until the server's next broadcast).
    • sse-fanout — SSE client; each delivered data: event = one request (inter-event delivery latency).
    • Mutually exclusive with HTTP2 / Mix / H2CUpgrade.
  • Per-bucket P99 + errors in the time-series — each TimeseriesPoint now carries p99_ms (windowed HDR histogram, reset every 1 s) and errors (per-window delta) beside t/rps. The cumulative histogram and final Result.Latency percentiles are unchanged — the window histogram is additive.
  • Version constant (1.4.5) stamped into Result.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

16 May 16:17
b708596

Choose a tag to compare

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 emissionResult.Latency.Histogram carries 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/sockstat plus per-conn recv-Q; latch Result.LoadgenRecvQHigh when 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.CpuPctP95 exposes 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 unified Result for the whole fleet.
    Closes #51.

Changed

  • cmd/loadgen/main.go exposes -rate, -peer, -sidecar, -out, -cpu-monitor, -recvq-probe directly.
  • go.mod bumped: 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/h2c deprecation warnings suppressed via //nolint:staticcheck on the three test scaffolds that depend on it as a reference implementation; migration to http.Server.Protocols tracked for v1.5.0.

Compatibility

  • Wire-compatible with celeris ≥ v1.4.3.
  • Config / Result shapes are additive — old fields preserved.
  • Probatorium consumes this release directly. celeris v1.4.4 will bump its test/perfmatrix submodule to v1.4.4 via goceleris/celeris#275.

Full Changelog: v1.4.3...v1.4.4

v1.4.3

08 May 07:30
0d2bc23

Choose a tag to compare

chore(deps): bump go.mod + CI Go to 1.26.3 to absorb stdlib CVE fixes (#45)

v1.4.2

08 May 00:42
d0daf8b

Choose a tag to compare

Revert of v1.4.0 Unblocker (#42) and v1.4.1 h1 Close fix (#43) — both introduced subtler problems than they solved. Restores the pre-v1.4.0 Run/warmup contract.

v1.4.1

07 May 18:57
cc85256

Choose a tag to compare

fix(h1): Unblock now closes the conn rather than SetDeadline (#43)