Skip to content

DOWNLOAD CLIENT SWEEP · WEAVER 0.11.2

Submission to verified file, against SABnzbd and NZBGet

Every client gets the same NZB, the same shaped link, and the same transport, inside the same measurement block. The sequential-run clock starts at submission and stops only once the client reports a terminal state and the harness has verified the output bytes.

MEASURED
8 September 2026
BASELINES
SABnzbd 5.1.2 · NZBGet 26.3
COVERAGE
3 rigs · 16 sweep phases · 58 fixtures in corpus

Three headline scenarios

Headline comparisons on Linux x86_64 (Docker). Wall figures express the speedup over Weaver; CPU figures compare total processor time used to finish the work.

SCENARIOVS. SABnzbd
WALL SPEEDUP
CPU TIMEVS. NZBGet
WALL SPEEDUP
CPU TIME
Common Usenet postings

1 Gbit/s link at 10 ms and 100 ms RTT*, TLS and plaintext, every fixture in the corpus (phases B3 and P3, both RTTs, geometric mean over all compared strata)

41.4% faster53.6% less106.1% faster42.5% less
Unthrottled

10 Gbit/s · 0 ms RTT* · TLS. 10 copies of the 200 MB direct download, queued at once. Queue-drain clock; verification completes afterward.

71.4% faster53.6% less620.7% faster83.4% less
Edge cases

The subset of the Usenet standard strata whose fixture is a compressed RAR or 7z, a quick-open RAR, or needs PAR2 or recovery-volume repair

36.7% faster51.2% less106.9% faster39.8% less

* RTT (round-trip time) is the time a request takes to travel to the server and a response to travel back, measured in milliseconds. Higher RTT means more network delay; 100 ms is one tenth of a second. On higher-latency real-world connections, RTT can range from 100 ms to over 1 second. Here, RTT is controlled by the benchmark’s network shaper.

“Faster” = (baseline wall time ÷ Weaver wall time − 1) × 100. Standard and edge-case figures use geometric means over compared strata. The unthrottled headline uses the dedicated queue-drain run with CPU accounting.

3 rigs, 3 operating systems, 2 architectures

Each client runs the way its users install it. A shaped NNTP server on the same host keeps provider variance out of the comparison.

Linux x86_64 (Docker)

12th Gen Intel Core i5-1240P

16 logical CPUs · Ubuntu 26.04.1 LTS
Docker 29.6.1
official container images

shaped NNTP server on the same host (Docker network), shaper sets link rate and RTT

CPU accounting: client container cgroup v2 cpu.stat. This is the headline rig.

Windows x86_64 (native)

AMD Ryzen 5 3600

12 logical CPUs · Windows 11 Pro 10.0.22621
Native applications
official Windows installers

shaped NNTP server on the same host (loopback), shaper sets link rate and RTT

CPU accounting: client process tree job cycle time (nominal 3600 MHz).

macOS arm64 (native)

Apple M5 Max

18 logical CPUs · macOS 26.6.2
Native applications
official macOS app bundles

shaped NNTP server on the same host (loopback), shaper sets link rate and RTT

CPU accounting: client process rusage.

rigs are named by CPU architecture, operating system, and how the clients ran (container or native); no machine identities are recorded

Every fixture, in seconds

Median wall time from submission to verified output. Shorter is better. Explore the rigs, transports, link conditions, and storage profiles; each selection includes its phase aggregates and paired measurements.

Weaver 0.11.2SABnzbd 5.1.2NZBGet 26.3

Linux x86_64 (Docker) · 1 Gbit/s · 10 ms RTT · TLS · equivalent-throughput · local storage

Full archive and repair suite · 222 test runs

Raw video

MKVRaw video · 200 MB

Weaver: 1.9s
SABnzbd: 2.14s
NZBGet: 3.31s

Uncompressed RAR

RAR 4Uncompressed

Weaver: 1.5s
SABnzbd: 2.04s
NZBGet: 3.3s

RAR 5Uncompressed

Weaver: 1.5s
SABnzbd: 2.04s
NZBGet: 3.31s

PAR2 repair

RAR 4Compressed · light damage

Weaver: 3.1s
SABnzbd: 3.72s
NZBGet: 7.31s

RAR 5Compressed - encrypted · heavy damage

Weaver: 2.7s
SABnzbd: 3.45s
NZBGet: 5.6s

RAR 5Uncompressed · light damage

Weaver: 1.8s
SABnzbd: 2.73s
NZBGet: 5.71s

RAR 5Uncompressed - encrypted · heavy damage · missing pieces

Weaver: 2.2s
SABnzbd: 2.54s
NZBGet: 4.71s

7zCompressed · heavy damage

Weaver: 2.3s
SABnzbd: 2.94s
NZBGet: 5.21s

7zUncompressed · light damage

Weaver: 1.7s
SABnzbd: 2.71s
NZBGet: 5.71s

Uncompressed 7z

7zUncompressed - encrypted

Weaver: 1.7s
SABnzbd: 2.02s
NZBGet: 3.1s

7zUncompressed

Weaver: 1.5s
SABnzbd: 1.72s
NZBGet: 3.11s

Compressed RAR

RAR 4Compressed

Weaver: 2.3s
SABnzbd: 3.23s
NZBGet: 3.31s

RAR 4Compressed - encrypted

Weaver: 2.3s
SABnzbd: 2.71s
NZBGet: 3.42s

RAR 5Compressed - encrypted

Weaver: 2s
SABnzbd: 2.34s
NZBGet: 3.23s

RAR 5Compressed

Weaver: 2.1s
SABnzbd: 3.12s
NZBGet: 3.61s

Quick-open RAR

RAR 5Uncompressed

Weaver: 2s
SABnzbd: 2.54s
NZBGet: 3.71s

RAR .rev repair

RAR 4Compressed · light damage

Weaver: 2.5s
✕ DNF
NZBGet: 4.51s

RAR 4Uncompressed · light damage

Weaver: 1.8s
✕ DNF
NZBGet: 3.31s

RAR 5Compressed - encrypted · heavy damage

Weaver: 2.1s
✕ DNF
NZBGet: 4.11s

RAR 5Uncompressed · heavy damage

Weaver: 1.7s
✕ DNF
NZBGet: 3.31s

Charts show one representative fixture per label, using the first matching fixture in the source data. Full measurements remain available below. Shorter is better. Each pane uses its own time scale; compare the labeled times across panes. Small hatched markers indicate DNF (did not finish), with no measured duration. N/A means too few paired results. Both are excluded from speedup figures.

Phase aggregates for B3-rtt10
BASELINESPEEDUPFIXTURE RANGECPU TIMESTRATA
SABnzbd1.29×1.14–1.57×48.9% less22 compared · 4 withheld
NZBGet1.95×1.44–3.35×42.0% less26 compared · 0 withheld

Speedup = baseline wall time ÷ Weaver wall time. Above 1× favors Weaver; below 1× favors the baseline. Phase figures are geometric means of paired comparisons.

Per-fixture paired results, CPU seconds, and 95% confidence intervals
FIXTURE / BASELINEWEAVER WALLBASELINE WALLSPEEDUP (95% CI)CPU SECONDS
WEAVER / BASELINE
PAIRED BLOCKS
MKV

Raw video · 200 MB


SABnzbd
1.9s 2.14s 1.15× (1.11–1.22) 0.75s / 1.47s 3
MKV

Raw video · 200 MB


NZBGet
1.9s 3.31s 1.72× (1.69–1.74) 0.75s / 1.9s 3
RAR 4

Compressed


SABnzbd
2.3s 3.23s 1.37× (1.31–1.40) 1.45s / 3.85s 3
RAR 4

Compressed


NZBGet
2.3s 3.31s 1.44× (1.40–1.48) 1.45s / 2.17s 3
RAR 4

Compressed - encrypted


SABnzbd
2.3s 2.71s 1.21× (1.18–1.28) 1.43s / 2.51s 3
RAR 4

Compressed - encrypted


NZBGet
2.3s 3.42s 1.50× (1.48–1.52) 1.43s / 2.19s 3
RAR 4

Uncompressed


SABnzbd
1.5s 2.04s 1.38× (1.35–1.43) 0.71s / 1.67s 3
RAR 4

Uncompressed


NZBGet
1.5s 3.3s 2.18× (2.13–2.20) 0.71s / 1.66s 3
RAR 4

Compressed - encrypted


SABnzbd
2.3s 2.83s 1.23× (1.23–1.24) 1.43s / 2.51s 3
RAR 4

Compressed - encrypted


NZBGet
2.3s 3.43s 1.50× (1.49–1.52) 1.43s / 2.18s 3
RAR 4

Uncompressed


SABnzbd
1.5s 2.11s 1.38× (1.33–1.41) 0.72s / 1.75s 3
RAR 4

Uncompressed


NZBGet
1.5s 3.31s 2.18× (2.14–2.20) 0.72s / 1.64s 3
RAR 5

Compressed - encrypted


SABnzbd
2s 2.34s 1.14× (1.06–1.20) 2.42s / 2.92s 3
RAR 5

Compressed - encrypted


NZBGet
2s 3.23s 1.59× (1.54–1.65) 2.42s / 2.7s 3
RAR 5

Uncompressed


SABnzbd
1.5s 2.04s 1.37× (1.34–1.40) 0.71s / 1.73s 3
RAR 5

Uncompressed


NZBGet
1.5s 3.31s 2.18× (2.14–2.20) 0.71s / 1.58s 3
RAR 5

Compressed - encrypted


SABnzbd
1.9s 2.32s 1.20× (1.16–1.28) 2.19s / 2.99s 3
RAR 5

Compressed - encrypted


NZBGet
1.9s 3.23s 1.68× (1.60–1.74) 2.19s / 2.8s 3
RAR 5

Uncompressed


SABnzbd
1.5s 2.14s 1.44× (1.42–1.49) 0.65s / 1.84s 3
RAR 5

Uncompressed


NZBGet
1.5s 3.23s 2.08× (1.89–2.20) 0.65s / 1.56s 3
RAR 5

Compressed


SABnzbd
2.1s 3.12s 1.50× (1.48–1.55) 2.98s / 5.9s 3
RAR 5

Compressed


NZBGet
2.1s 3.61s 1.71× (1.71–1.72) 2.98s / 3.51s 3
RAR 5

Compressed - encrypted


SABnzbd
2s 2.25s 1.15× (1.12–1.18) 2.23s / 2.99s 3
RAR 5

Compressed - encrypted


NZBGet
2s 3.21s 1.65× (1.60–1.69) 2.23s / 2.76s 3
RAR 5

Uncompressed


SABnzbd
2s 2.54s 1.26× (1.22–1.30) 0.9s / 2.04s 3
RAR 5

Uncompressed


NZBGet
2s 3.71s 1.83× (1.80–1.85) 0.9s / 1.91s 3
RAR 5

Uncompressed


SABnzbd
1.5s 2.15s 1.42× (1.35–1.48) 0.68s / 1.65s 3
RAR 5

Uncompressed


NZBGet
1.5s 3.21s 2.13× (2.13–2.14) 0.68s / 1.47s 3
RAR 4

Compressed · light damage


SABnzbd
Withheld Withheld Withheld Not measured 0
RAR 4

Compressed · light damage


NZBGet
2.5s 4.51s 1.74× (1.62–1.80) 3.33s / 4.09s 3
RAR 4

Compressed · light damage


SABnzbd
3.1s 3.72s 1.18× (1.17–1.20) 2.21s / 4.02s 3
RAR 4

Compressed · light damage


NZBGet
3.1s 7.31s 2.33× (2.28–2.35) 2.21s / 3.96s 3
RAR 4

Uncompressed · light damage


SABnzbd
Withheld Withheld Withheld Not measured 0
RAR 4

Uncompressed · light damage


NZBGet
1.8s 3.31s 1.85× (1.78–1.94) 2.6s / 2.9s 3
RAR 5

Compressed - encrypted · heavy damage


SABnzbd
2.7s 3.45s 1.22× (1.11–1.30) 3s / 4.37s 3
RAR 5

Compressed - encrypted · heavy damage


NZBGet
2.7s 5.6s 1.85× (1.48–2.15) 3s / 4.21s 3
RAR 5

Compressed - encrypted · heavy damage


SABnzbd
Withheld Withheld Withheld Not measured 0
RAR 5

Compressed - encrypted · heavy damage


NZBGet
2.1s 4.11s 1.88× (1.81–1.95) 2.5s / 3.94s 3
RAR 5

Uncompressed · light damage


SABnzbd
1.8s 2.73s 1.48× (1.38–1.57) 0.91s / 2.56s 3
RAR 5

Uncompressed · light damage


NZBGet
1.8s 5.71s 3.11× (3.00–3.17) 0.91s / 2.19s 3
RAR 5

Uncompressed · heavy damage


SABnzbd
Withheld Withheld Withheld Not measured 0
RAR 5

Uncompressed · heavy damage


NZBGet
1.7s 3.31s 1.93× (1.90–1.94) 0.83s / 2.1s 3
RAR 5

Uncompressed - encrypted · heavy damage · missing pieces


SABnzbd
2.2s 2.54s 1.20× (1.15–1.24) 1.67s / 2.56s 3
RAR 5

Uncompressed - encrypted · heavy damage · missing pieces


NZBGet
2.2s 4.71s 2.11× (1.68–2.62) 1.67s / 2.47s 3
7z

Compressed · heavy damage


SABnzbd
2.3s 2.94s 1.32× (1.27–1.42) 1.39s / 2.64s 3
7z

Compressed · heavy damage


NZBGet
2.3s 5.21s 2.30× (2.26–2.36) 1.39s / 2.38s 3
7z

Uncompressed · light damage


SABnzbd
1.7s 2.71s 1.57× (1.53–1.60) 0.85s / 2.09s 3
7z

Uncompressed · light damage


NZBGet
1.7s 5.71s 3.35× (3.35–3.35) 0.85s / 1.87s 3
7z

Uncompressed - encrypted


SABnzbd
1.7s 2.02s 1.18× (1.08–1.27) 0.74s / 1.29s 3
7z

Uncompressed - encrypted


NZBGet
1.7s 3.1s 1.84× (1.82–1.88) 0.74s / 1.62s 3
7z

Uncompressed


SABnzbd
1.5s 1.72s 1.17× (1.15–1.23) 0.63s / 1.25s 3
7z

Uncompressed


NZBGet
1.5s 3.11s 2.05× (2.02–2.07) 0.63s / 1.55s 3

The queue-drain clock

The homepage queue race uses the dedicated CPU-accounted run. The JSON reports queue drain and verified output separately; these are the recorded clocks for that same run.

CLIENTQUEUE DRAINVERIFIED OUTPUTCPU SECONDS
Weaver 0.11.21.89s4.35s2.81s
SABnzbd 5.1.23.23s4.75s6.05s
NZBGet 26.313.6s14.9s16.9s

Q10-unthrottled · 10 Gbit/s · 0 ms RTT · TLS. CPU percentages in the animation are CPU seconds divided by queue-drain seconds; the curves are illustrative, not sampled traces.

Method

The benchmark measures a complete download pipeline. Equivalent-throughput phases tune each client for the same link; the stock-settings and network-storage phases remain separately selectable.

The clock includes verification

from NZB submission until the client reports a terminal state and the harness has verified the output bytes

Everyone runs in the same block

each stratum pairs every client on the same fixture, link, and transport; a block is one measured repetition of every client; strata with fewer complete blocks than minimum_complete_blocks are withheld

A shaped link

e2e-nntp fake NNTP server v0.1.1 behind the nntpshaper link shaper (rate, burst, RTT)

Geometric means with bootstrap CIs

per stratum: geometric mean over paired blocks with a bootstrap 95% CI; per phase and headline: geometric mean over strata

Synthetic fixtures, realistic layouts

synthetic archives with invented titles; sizes and layouts modelled on real releases

Harness

usenet-bench (nntpbench), written in Go 1.27. 3 measured repetitions per standard stratum. Additional runs disclose their own paired-block counts.

Exact performance varies with hardware, providers, and archive shape. Results withheld for insufficient paired blocks are excluded from speedups. The raw data includes build identifiers, per-fixture confidence intervals, CPU seconds, and downstream byte counts.