RUST-NATIVE HTTP TRAFFIC REPLAY

Replay reality.
Find the limit.

rload is a Rust HTTP load generator with wrk-compatible CLI semantics. Versioned YAML workloads, typed CI assertions, and deterministic offline reports pair with Nginx and JSONL replay for reproducible load validation.

Latest Stable v0.3.1 · MIT / Apache-2.0 Dual License · Rust 1.96+ / Single native binary

rload v0.3.1
$ rload -t 4 -c 200 -d 30s \
--log-replay access.log \
--log-order shuffle --seed 42 \
http://staging-api.internal

Running 30s test @ http://staging-api.internal
4 threads and 200 connections

Thread Stats Avg Max +/- Stdev
Latency 2.18ms 18.74ms 84.32%
Req/Sec 12.45k 15.92k 76.10%

1482701 requests in 30.00s, 3.24GB read
Requests/sec: 49,423.36
Average latency: 2.18ms
99% Latency:   8.12ms
Socket errors: connect 0, read 0, write 0, timeout 0

● log replay complete (shuffled, seed: 42)
WRK SEMANTICS PARITY · NGINX ACCESS LOG REPLAY · STRUCTURED JSONL REPLAY · COORDINATED OMISSION PREVENTION · STABLE STATIC BINARY

01 / Capabilities

From static benchmarking
to production-grade traffic replay.

Static single-endpoint benchmarks fail to trigger real-world caching or queueing bottlenecks. rload ensures every request and sequence is derived from real environments, 100% reproducible.

01 / HIGH FIDELITY

Native Nginx Log Replay

Stream-parse Common or Combined Nginx logs natively without writing complex Lua scripts. Supports sequential, shuffled, and random replay modes.

--access-log access.log --replay-order shuffle --seed 42
02 / CUSTOM PAYLOADS

Structured JSONL Replay

Replay structured HTTP payloads (headers, methods, bodies) out-of-the-box. Gracefully mimic relative inter-arrival delays using high-precision timers.

--request-file queries.jsonl --replay-timestamps
03 / PERFORMANCE PARITY

wrk-Parity Footprint & Speed

Built on bare-metal mio with thread-affinity. Maintains a constant ~3.5MB RSS footprint. Delivers near-identical throughput and latency distribution (MAE < 1% vs. wrk) with zero scheduler noise.

rload (3.55MB) wrk (3.47MB) k6 (>100MB)
04 / REAL SRE WORKFLOWS

Pacing & Anti-Coordinated Omission

Prevents Coordinated Omission by tracking latency against scheduled send times. Program custom load profiles (step, burst, ramp-up) via flexible stage triggers.

--replay-stages 10s:100,5s:1000

02 / Why rload?

wrk Semantics Parity.
Replay modern reality.

rload strikes the perfect balance between raw bare-metal execution speed and feature-rich traffic reproduction:

Feature / Dimension wrk 4.2.0 (C) k6 (Go / JS) rload v0.3.1 (Rust)
Static HTTP Load ✓ Extreme ✓ Heavy Footprint ✓ Extreme (Parity)
Memory Footprint (RSS) ~3.5 MiB > 100 MiB ~3.55 MiB (Parity)
Nginx Access Log Replay ✗ No (Requires Lua) ✗ Memory Prohibitive ✓ Native & Streamed
JSONL Custom Replay ✗ No (Requires Lua) ✓ Yes ✓ Native & Streamed
Rate Pacing ✗ No ✓ Yes ✓ High-Precision Native
Anti-Coordinated Omission (CO) ✗ No (Requires wrk2) ✗ No ✓ Native & Precise
CI/CD Runner Friendliness ✗ Requires compile/deps ✓ Yes 🏆 Excellent (Static Binary)

03 / Installation

One-second install.
Ready out of the box.

We provide first-class cross-platform support with single, dependency-free pre-compiled static binaries. Pick the method that fits your environment:

# Install via Homebrew (macOS & Linux)
brew install wenhaozhao/rload/rload

# Verify installation
rload --help
# Install via cargo (for Rust toolchains)
cargo install rload

# Ensure ~/.cargo/bin is in your PATH
rload --help
# For container & minimal server environments
# 1. Download the archive for your architecture from GitHub Releases
# 2. Extract and move the binary into your PATH, e.g.:
tar -xvf rload-v0.3.0-x86_64-unknown-linux-gnu.tar.gz
sudo mv rload /usr/local/bin/

# 3. Verify execution
rload --help

04 / Practical Commands

Common engineering scenarios,
copy and run instantly.

🔥 Scenario A: Static HTTP benchmarking (wrk parity)

Bench a target with 4 threads and 200 connections for 30 seconds, tracking latency distribution:

rload -t 4 -c 200 -d 30s https://api.yourdomain.com

📂 Scenario B: High-fidelity Nginx log shuffle replay

Replay an Nginx access log in a shuffled order using a deterministic seed for reproducible results:

rload -c 100 -d 60s --access-log ./access.log --replay-order shuffle --seed 12345 http://staging.internal

⏳ Scenario C: Log replay with relative timestamp pacing

Reproduce real temporal gaps based on access-log timestamps at double speed (2.0x pacing):

rload -c 50 --access-log ./access.log --replay-timestamps --replay-speed 2.0 http://staging.internal

📝 Scenario D: Structured JSONL request sequence replay

Sequentially replay structured query templates with custom headers, methods, and payloads:

rload -c 100 -d 5m --request-file ./requests.jsonl http://staging.internal