<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="rload: Rust-native high-performance HTTP load generator and high-fidelity traffic replay engine.">
<title>rload 0.2.2 · Replay reality. Find the limit.</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<!-- Header Navigation -->
<header class="nav wrap" id="header">
<a class="logo" href="#top">
<img src="logo.png" alt="rload logo" class="logo-img">
<span>rload</span>
</a>
<nav>
<a href="#features">Features</a>
<a href="#compare">Comparison</a>
<a href="#install">Install</a>
<a href="./index.zh-cn.html" class="lang-switch">CN</a>
<a class="nav-cta" href="https://github.com/wenhaozhao/rload/releases">Releases ↗</a>
</nav>
</header>
<main id="top">
<!-- Hero Section -->
<section class="hero wrap" id="hero-section">
<div class="hero-content">
<p class="eyebrow"><i></i> RUST-NATIVE HTTP TRAFFIC REPLAY</p>
<h1>Replay reality.<br><em>Find the limit.</em></h1>
<p class="lead">rload is a Rust HTTP load generator with wrk-compatible CLI semantics. It replays millions of Nginx logs and structured JSONL with only 3.5MB memory, exposing high-concurrency bottlenecks with high fidelity.</p>
<div class="actions">
<a class="button primary" href="#install">Install Now ↓</a>
<a class="button" href="https://github.com/wenhaozhao/rload" target="_blank" rel="noopener noreferrer">GitHub Source ↗</a>
</div>
<p class="meta">Latest Stable v0.2.2 · MIT / Apache-2.0 Dual License · Rust 1.96+ / Zero Dependencies</p>
</div>
<!-- Terminal Preview -->
<div class="terminal" id="terminal-preview">
<div class="term-head">
<span>●</span><span>●</span><span>●</span>
<b>rload v0.2.2</b>
</div>
<pre><code><em>$</em> rload -t 4 -c 200 -d 30s \<br> --log-replay access.log \<br> --log-order shuffle --seed 42 \<br> http://staging-api.internal<br><br>Running 30s test @ http://staging-api.internal<br> 4 threads and 200 connections<br><br><strong>Thread Stats</strong> Avg Max +/- Stdev<br> Latency 2.18ms 18.74ms 84.32%<br> Req/Sec 12.45k 15.92k 76.10%<br><br> <strong>1482701</strong> requests in 30.00s, <strong>3.24GB</strong> read<br><strong>Requests/sec:</strong> 49,423.36<br><strong>Average latency:</strong> 2.18ms<br><strong>99% Latency:</strong> 8.12ms<br><strong>Socket errors:</strong> connect 0, read 0, write 0, timeout 0<br><br><mark>● log replay complete (shuffled, seed: 42)</mark></code></pre>
</div>
</section>
<!-- Scrolling Ribbon -->
<div class="ribbon" id="feature-ribbon">
<div class="wrap">
<span>WRK SEMANTICS PARITY</span>
<span>·</span>
<span>NGINX ACCESS LOG REPLAY</span>
<span>·</span>
<span>STRUCTURED JSONL REPLAY</span>
<span>·</span>
<span>COORDINATED OMISSION PREVENTION</span>
<span>·</span>
<span>STABLE STATIC BINARY</span>
</div>
</div>
<!-- 01 Core Features -->
<section id="features" class="section wrap">
<p class="eyebrow">01 / Capabilities</p>
<h2>From static benchmarking<br><em>to production-grade traffic replay.</em></h2>
<p class="section-lead">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.</p>
<div class="cards" id="feature-cards">
<article class="card dark">
<small>01 / HIGH FIDELITY</small>
<h3>Native Nginx Log Replay</h3>
<p>Stream-parse Common or Combined Nginx logs natively without writing complex Lua scripts. Supports sequential, shuffled, and random replay modes.</p>
<code>--log-replay access.log --log-order shuffle --seed 42</code>
</article>
<article class="card">
<small>02 / CUSTOM PAYLOADS</small>
<h3>Structured JSONL Replay</h3>
<p>Replay structured HTTP payloads (headers, methods, bodies) out-of-the-box. Gracefully mimic relative inter-arrival delays using high-precision timers.</p>
<code>--request-file queries.jsonl --replay-timestamps</code>
</article>
<article class="card">
<small>03 / PERFORMANCE PARITY</small>
<h3>wrk-Parity Footprint & Speed</h3>
<p>Built on bare-metal <code>mio</code> 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.</p>
<div class="bars">
<span class="bar-label">rload (3.55MB)</span><i></i>
<span class="bar-label">wrk (3.47MB)</span><i></i>
<span class="bar-label">k6 (>100MB)</span><i></i>
</div>
</article>
<article class="card orange">
<small>04 / REAL SRE WORKFLOWS</small>
<h3>Pacing & Anti-Coordinated Omission</h3>
<p>Prevents Coordinated Omission by tracking latency against scheduled send times. Program custom load profiles (step, burst, ramp-up) via flexible stage triggers.</p>
<code>--replay-stages 10s:100,5s:1000</code>
</article>
</div>
</section>
<!-- 02 Comparison Section -->
<section id="compare" class="contrast">
<div class="section wrap">
<p class="eyebrow lime">02 / Why rload?</p>
<h2>wrk Semantics Parity.<br><em>Replay modern reality.</em></h2>
<p class="section-lead" style="color: var(--text-muted); margin-bottom: 40px;">rload strikes the perfect balance between raw bare-metal execution speed and feature-rich traffic reproduction:</p>
<div class="table" id="comparison-table">
<div class="thead">
<span>Feature / Dimension</span>
<span>wrk 4.2.0 (C)</span>
<span>k6 (Go / JS)</span>
<span>rload v0.2.2 (Rust)</span>
</div>
<div>
<span>Static HTTP Load</span>
<b class="yes">✓ Extreme</b>
<b class="no">✓ Heavy Footprint</b>
<b class="yes">✓ Extreme (Parity)</b>
</div>
<div>
<span>Memory Footprint (RSS)</span>
<b class="yes">~3.5 MiB</b>
<b class="no">> 100 MiB</b>
<b class="yes">~3.55 MiB (Parity)</b>
</div>
<div>
<span>Nginx Access Log Replay</span>
<b class="no">✗ No (Requires Lua)</b>
<b class="no">✗ Memory Prohibitive</b>
<b class="yes">✓ Native & Streamed</b>
</div>
<div>
<span>JSONL Custom Replay</span>
<b class="no">✗ No (Requires Lua)</b>
<b class="yes">✓ Yes</b>
<b class="yes">✓ Native & Streamed</b>
</div>
<div>
<span>Rate Pacing</span>
<b class="no">✗ No</b>
<b class="yes">✓ Yes</b>
<b class="yes">✓ High-Precision Native</b>
</div>
<div>
<span>Anti-Coordinated Omission (CO)</span>
<b class="no">✗ No (Requires wrk2)</b>
<b class="no">✗ No</b>
<b class="yes">✓ Native & Precise</b>
</div>
<div>
<span>CI/CD Runner Friendliness</span>
<b class="no">✗ Requires compile/deps</b>
<b class="yes">✓ Yes</b>
<b class="yes">🏆 Excellent (Static Binary)</b>
</div>
</div>
</div>
</section>
<!-- 03 Install Guidelines -->
<section id="install" class="section wrap install">
<div class="install-text">
<p class="eyebrow">03 / Installation</p>
<h2>One-second install.<br><em>Ready out of the box.</em></h2>
<p class="section-lead">We provide first-class cross-platform support with single, dependency-free pre-compiled static binaries. Pick the method that fits your environment:</p>
<div class="install-tabs">
<button class="tab-btn active" onclick="switchInstallTab('brew')">Homebrew</button>
<button class="tab-btn" onclick="switchInstallTab('cargo')">Cargo</button>
<button class="tab-btn" onclick="switchInstallTab('binary')">Static Binary</button>
</div>
<div class="links">
<a href="https://github.com/wenhaozhao/rload/releases" target="_blank" rel="noopener noreferrer">GitHub Releases ↗</a>
<a href="https://crates.io/crates/rload" target="_blank" rel="noopener noreferrer">Crates.io ↗</a>
<a href="https://docs.rs/rload" target="_blank" rel="noopener noreferrer">API Docs ↗</a>
</div>
</div>
<div class="install-code-container">
<!-- Homebrew Tab Code -->
<pre class="install-code active" id="code-brew"><code><span># Install via Homebrew (macOS & Linux)</span><br>brew install wenhaozhao/rload/rload<br><br><span># Verify installation</span><br>rload --help</code></pre>
<!-- Cargo Tab Code -->
<pre class="install-code" id="code-cargo"><code><span># Install via cargo (for Rust toolchains)</span><br>cargo install rload<br><br><span># Ensure ~/.cargo/bin is in your PATH</span><br>rload --help</code></pre>
<!-- Static Binary Tab Code -->
<pre class="install-code" id="code-binary"><code><span># For container & minimal server environments</span><br><span># 1. Download the archive for your architecture from GitHub Releases</span><br><span># 2. Extract and move the binary into your PATH, e.g.:</span><br>tar -xvf rload-v0.2.2-x86_64-unknown-linux-musl.tar.gz<br>sudo mv rload /usr/local/bin/<br><br><span># 3. Verify execution</span><br>rload --help</code></pre>
</div>
</section>
<!-- 04 Practical Commands -->
<section class="section wrap quickstart" id="quickstart-section">
<p class="eyebrow">04 / Practical Commands</p>
<h2>Common engineering scenarios,<br><em>copy and run instantly.</em></h2>
<div class="quickstart-grid">
<div class="qs-item">
<h4>🔥 Scenario A: Static HTTP benchmarking (wrk parity)</h4>
<p>Bench a target with 4 threads and 200 connections for 30 seconds, tracking latency distribution:</p>
<pre><code>rload -t 4 -c 200 -d 30s https://api.yourdomain.com</code></pre>
</div>
<div class="qs-item">
<h4>📂 Scenario B: High-fidelity Nginx log shuffle replay</h4>
<p>Replay an Nginx access log in a shuffled order using a deterministic seed for reproducible results:</p>
<pre><code>rload -c 100 -d 60s --log-replay ./access.log --log-order shuffle --seed 12345 http://staging.internal</code></pre>
</div>
<div class="qs-item">
<h4>⏳ Scenario C: Log replay with relative timestamp pacing</h4>
<p>Reproduce real temporal gaps based on access-log timestamps at double speed (2.0x pacing):</p>
<pre><code>rload -c 50 --log-replay ./access.log --replay-timestamps --replay-speed 2.0 http://staging.internal</code></pre>
</div>
<div class="qs-item">
<h4>📝 Scenario D: Structured JSONL request sequence replay</h4>
<p>Sequentially replay structured query templates with custom headers, methods, and payloads:</p>
<pre><code>rload -c 100 -d 5m --request-file ./requests.jsonl http://staging.internal</code></pre>
</div>
</div>
</section>
</main>
<!-- Footer -->
<footer class="footer wrap">
<div class="footer-brand">
<a class="logo" href="#top">
<img src="logo.png" alt="rload logo" class="logo-img">
<span>rload</span>
</a>
<p>Replay reality. Find the limit.</p>
</div>
<div class="footer-links">
<a href="https://github.com/wenhaozhao/rload" target="_blank" rel="noopener noreferrer">GitHub Source</a>
<a href="https://github.com/wenhaozhao/rload/blob/main/ROADMAP.md" target="_blank" rel="noopener noreferrer">Roadmap</a>
<a href="https://github.com/wenhaozhao/rload/blob/main/CODING_STANDARDS.md" target="_blank" rel="noopener noreferrer">Standards</a>
</div>
</footer>
<!-- Easy Tab-Switching Logic -->
<script>
function switchInstallTab(tabId) {
// Toggle button states
document.querySelectorAll('.tab-btn').forEach(btn => {
btn.classList.remove('active');
});
event.target.classList.add('active');
// Toggle code block display
document.querySelectorAll('.install-code').forEach(codeBlock => {
codeBlock.classList.remove('active');
});
document.getElementById('code-' + tabId).classList.add('active');
}
</script>
</body>
</html>