You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Breaking (CSV) — Removed duplicate latency_fastest_ms and latency_slowest_ms columns; use latency_min_ms and latency_max_ms
Breaking (Accuracy) — Transport errors are excluded from latency metrics (avg/min/max/stdev/percentiles/histogram), so connect failures and timeouts no longer skew percentiles; latency fields report 0 when no responses were received
Load testing — Added --disable-keepalive to open a fresh connection per request (sends Connection: close), so connection setup cost is part of the measured latency
Request Ergonomics — Added --body-stdin to read the request body from standard input (pipe-friendly)
Performance — Latency histogram now uses HDR-style logarithmic buckets (~1% relative precision from 1µs to 1h) instead of a dense linear array, cutting memory from ~4.8 MB to ~18 KB; reported percentiles are accurate within 1%
Performance — Duration mode now flushes worker stats in batches (250 requests or 1s) instead of sending one channel message per request
Performance — --random-path and --urls-file now reuse one keep-alive client per origin instead of opening a new TCP/TLS connection per request
CLI — Live progress is now time-based: a ticker refreshes the line every second regardless of throughput, so slow and rate-limited runs stay visible
CLI — Invalid numeric flag values (e.g. -n abc, --max-p99 zz) now print a clear error and exit 1 instead of crashing with a stack trace
Refactor — CLI options now use a typed Cli::Options class instead of a union-typed Hash with casts; ARGV is parsed once instead of twice
Documentation — README comparison table now covers CI thresholds, keep-alive control, body sources, HTTP/2, and multi-core support; cryload's current HTTP/1.1 and single-core limits are stated explicitly