Benchmarks

Vier Clients, sieben Szenarien, identische Hardware und Provider, Läufe verschränkt, sodass sich Provider-Drift aufhebt. Die Kennzahl ist Zeit bis zur benutzbaren Datei: geladen, geprüft, entpackt. Inklusive der Etappen, die wir nicht gewinnen.

Auf dieser Seite

Erst die Methodik

Der Aufbau

Szenario 1 · sauber, riesig

190.6 GB → einzelne 167.9 GB mkv („Europa“, 10 GbE)

nzbfast4m 33s
NZBGet 26.27m 58s · +75%
SABnzbd 5.0.419m 32s · +329%
rustnzb 1.3.4keine Ausgabe¹
nzbfastNZBGet 26.2SABnzbd 5.0.4rustnzb 1.3.4
Zeit bis zur benutzbaren Datei4m 33s7m 58s (+75%)19m 32s (+329%)keine¹
GB auf der Leitung169.6169.8169.7186.5
Spitzen-RSS1.4 GB²1.5 GB1.8 GB0.6 GB

¹ rustnzb war bei 5m 42s mit dem Bewegen der Bytes fertig, nachdem es 186.5 GB gezogen hatte (10% mehr über die Leitung als alle anderen), hinterließ aber keine entpackten Medien, seine dritte gescheiterte Runde in Folge an diesem Post. · ² nzbfasts Speicher folgt seinem konfigurierten Budget, nicht dem Job: diese Etappe lief mit dem Standard-Auto-Budget und erreichte in der Spitze 1.4 GB; ein bewusst riesiges 64 GB-Budget bringt nur 4% (4m 22s), und gedeckelt auf 1 GB läuft derselbe 190 GB-Job trotzdem durch (siehe die Niedrigspeicher-Leiter weiter unten). In der früheren „US-Ostküste“-Runde (~2.4–3 Gbps Leitung) lief das gleiche Szenario in 9m 00s vs. NZBGet +30% und SABnzbd +111%. Der Abstand hält über Leitungsgeschwindigkeiten hinweg.

Szenario 2 · der Abstand wächst mit der Größe

Zeit bis zur benutzbaren Datei, nach Job-Größe

Ein-Pass heißt: kein nachgelagerter Prüf-/Entpack-Durchlauf, je größer der Job, desto weiter zieht es davon. Sequenzielle Läufe auf derselben Maschine:

JobnzbfastNZBGetSABnzbd
7.4 GB REMUX („Europa“, 10 GbE)13.7 s17.3 s (+26%)19.0 s (+39%)
35 GB verschleiertes 4K („Europa“)67 s108 s (+61%)285 s (+325%)
87 GB 4K („US-Ostküste“)272 s370 s (+36%)708 s (+160%)
87 GB auf einer Platte mit 97 GB frei („Europa“)3m 08släuft nicht²läuft nicht²
190.6 GB („US-Ostküste“)9m 00s11m 43s (+30%)19m 02s (+111%)

² Ihr Spitzen-Fußabdruck (Volumes + entpackte Ausgabe gleichzeitig, ~156 GB) überstieg die 97 GB frei. Ein-Pass braucht 1× die Inhaltsgröße: es halbiert die Platte, die du brauchst, nicht nur die Zeit.

Szenario 3 · verschleierter Post

35 GB hash-benanntes 4K → benutzbare mkv („US-Ostküste“)

nzbfastNZBGetSABnzbdrustnzb
Zeit bis zur benutzbaren Datei96 s153 s (+59%)259 s (+170%)keine benutzbare Datei³
Spitzen-RSS1.55 GB3.7 GB8.8 GB3.6 GB

³ rustnzb lud in 119 s, markierte den Job als Completed, und lieferte die rohen verschleierten Volumes: keine Umbenennung, kein Entpacken. nzbfast deobfuskierte aus den PAR2-Metadaten und entpackte im Stream, null Rücklese-Blöcke.

Szenario 4 · Warteschlange aus dreien

Die Leitung über eine Warteschlange hinweg ausgelastet halten („US-Ostküste“, ~43 GB)

nzbfastrustnzbNZBGetSABnzbd
Warteschlangen-Laufzeit122 s136 s162 s277 s
Leitung im Leerlauf (<20 MB/s)2 s (2%)16 s (12%)0 s168 s (61%)

Drei Ausprägungen desselben Problems: nzbfasts Tail-Overlap hält die Leitung von Kante zu Kante ausgelastet; NZBGet ruht nie, läuft aber ~35% langsamer, weil es gleichzeitig entpackt; SABnzbd lädt schnell und lässt die Leitung dann zu 61% der Zeit dunkel während der seriellen Nachbearbeitung. In der Resilienz-Variante (ein Job mit verschlüsselten RAR-Headern) verkeilte sich SABnzbds Warteschlange am verschlüsselten Job und nur 1 von 3 Jobs wurde je fertig; nzbfast parkte ihn mit klarer Meldung und beendete den Rest.

Die ehrliche Spalte

Die Etappen, die wir nicht gewinnen

Beide Läufe, die hier standen, wurden auf dem ausgelieferten Build neu gemessen und keiner ist mehr eine Niederlage: Der beschädigte Store-Mode-Post kostet uns jetzt 30 s gegen NZBGets 38 s, und die Rekonstruktion aus reiner Parität ist in 9 s fertig statt in 19 s, auf einem Lauf, bei dem NZBGet in derselben Zeit zurückkehrt, aber nichts liefert. Wir lassen den Abschnitt stehen, statt ihn zu löschen: Hier landen unsere Niederlagen, und die nächste Runde, die eine findet, stellt sie wieder hier hinein.

Warum überhaupt eine Niederlage zeigen? Weil die Siege nur daneben glaubwürdig sind. Jede Zahl auf dieser Seite stammt aus denselben verschränkten Läufen, und eine Runde, die wir verlieren, bleibt veröffentlicht, bis ein neuer Lauf sie ersetzt.

Szenario 6 · lass es am RAM verhungern

Die Niedrigspeicher-Leiter: 190 GB in ~1.1 GB RAM

Dieselben vier Jobs, erneut mit harten Speicher-Budgets von 2 GB, 1 GB und 256 MB gefahren: was der Auto-Sizer auf einer 8-GB-Box, einer 4-GB-Box und einem 2-GB-NAS wählen würde. Jede Etappe erzeugte eine korrekte, voll geprüfte, entpackte Datei; das Spitzen-RSS folgte dem Budget, nicht dem Job. Zeit bis zur benutzbaren Datei, 10-GbE-Leitung:

Job-Größereichlich RAM2-GB-Budget1-GB-Budget256-MB-Budget
7 GB15 s15 s15 s15 s
35 GB65 s70 s70 s65 s
87 GB148 s206 s196 s180 s
190 GB330 s427 s402 s411 s

Der Aufschlag von 20–40% bei den großen Jobs ist ein 10-GbE-Artefakt: ausgelagerte Blöcke kosten nur Zeit, wenn die Leitung die Platte überholt. Derselbe 87 GB-Job bei denselben Budgets auf einer ~2.4 Gbps-Leitung maß −1% bis +7%, Rauschen. Auf einem typischen Heimanschluss ist ein kleines Budget bei jeder Job-Größe quasi gratis. Ein NAS-Profil (2 Verbindungen, 256 MB Budget) beendete den 35 GB-Job mit 0.4 GB Spitzen-RSS. Ein 2-GB-NAS kann das stemmen. Kein anderer Client bietet überhaupt eine Speicherobergrenze.

Szenario 7 · Archive in Archiven

Zehn verschachtelte Formen: wer ohne dich fertig wird

Posts kommen zunehmend verschachtelt an: ein RAR im RAR, ein 7z in einem Store-Archiv, eine Leiter aus Schichten, eine Passwortkette. Diese Runde bewertet, was für den Betreiber übrig bleibt. auto heißt: jede Nutzlast entpackt, byte-identisch, ohne Handgriff; manuell heißt: der Client meldete Erfolg, ließ aber ein inneres Archiv im Ausgabeverzeichnis liegen, das du selbst öffnen darfst.

FormnzbfastSABnzbdNZBGetrustnzb
Store-RAR im Store-RARautoautomanuellmanuell
komprimiertes RAR im Store-RARautoautomanuellmanuell
7z in einem Store-RARautoautomanuellmanuell
5-Ebenen-Leiter, 6 Nutzlastenauto · 6/6manuell · 3/6manuell · 1/6manuell · 1/6
Passwortkette, 3 verschlüsselte Ebenenauto · 3/3fragt nach einem Passwortfragt nach einem Passwortgescheitert
automatisch fertig, alle zehn Formen8/106/102/102/10

Loopback-Rig, maschinell erzeugtes Korpus, alle vier Clients auf derselben Maschine, bewertet per Inhalts-Hash, sodass ein Client, der die Nutzlast umbenennt, trotzdem gewertet wird. Weil innere Schichten im Flug entschachtelt werden, hält nzbfast eine einzige ~1.5 GB-Kopie auf der Platte, wo Ausschreiben-und-Entpacken-Clients ~3 GB halten, und beendet diese Etappen in 1–2 s gegenüber 4–8 s. Bei der Passwortkette steckt das Passwort jeder Schicht in einer Datei, die die Schicht darüber entpackt: nzbfast liest es und entsperrt alle drei Ebenen; die anderen halten an und warten, bis du es eintippst. Die beiden Formen, die es nicht automatisch abschließt, werden mit Absicht hart bewertet: eine 10-Ebenen-Leiter jenseits seiner Standard-Tiefengrenze und ein Post, der auf allen drei Ebenen beschädigt ist. Auf beiden rettet es mehr Nutzlasten als jeder andere Client, beendet sich aber mit einem Fehlercode, statt einen Teil-Job einen Erfolg zu nennen, also zählen beide hier als Fehlschläge.

Komponenten-Duelle

Die Entpack- und Reparatur-Engines, solo gefahren

Entpacken und PAR2 sind unser eigener nativer Code, also lassen wir sie auch standalone gegen das Feld antreten, auf identischen Korpora. Eine Zeit zählt nur, wenn die Ausgabe byte-identisch zur Quell-Nutzlast ist.

RAR-Entpacken · 8 Archivformen

Gegen unrar 7.23, 7-Zip, bsdtar, unar und das Upstream-rars-Crate auf einem Apple M3 Ultra gewinnt nzbfasts Entpacker jede Form oder liegt gleichauf: 400 kleine Dateien in 0.13 s zu unrars 0.66 s, solid 0.50 vs. 0.87, verschlüsselt 0.49 vs. 0.82, ein RAR7-Archiv mit 128 MB-Wörterbuch 0.71 vs. 0.92. Erneut gefahren auf einem 20-Kern-M1-Ultra und auf einem 14-Kern-Intel-Laptop hält das Ergebnis bei jeder Form, und auf dem Laptop weiten sich die Abstände: die parallelen Decode-Pfade skalieren in die zusätzlichen Threads. Jede gemeldete Zeit erzeugte sha256-identische Ausgabe.

PAR2-Prüfung + Reparatur · 1 GiB-Set

Gegen das klassische par2cmdline, den SIMD-Fork par2cmdline-turbo und MultiPar hat nzbfast auf jeder gebenchten Maschine die schnellste Prüfung und die schnellste Reparatur. 20-Kern-Desktop: saubere Prüfung 0.40 s zu turbos 1.08 und den 3.67 des Klassikers; Reparatur von 101 beschädigten Blöcken 1.26 s vs. 2.61 und 7.52. 14-Kern-Laptop: Prüfung 1.26 vs. 1.48, Reparatur 2.57 vs. 3.62. Jede reparierte Datei byte-identisch. Eine ehrliche Anmerkung: Wir erzeugen kein PAR2 (ein Downloader braucht das nicht, und ParPar gehört diese Etappe).

Was ein Job kostet

Spitzenbedarf an Speicherplatz für 1,5 GB Nutzlast

Das Ein-Durchlauf-Versprechen betrifft den Speicherplatz genauso wie das Tempo, hier also gemessen statt behauptet: der Höchststand des Arbeitsverzeichnisses während der verschachtelten Läufe, zweimal pro Sekunde abgefragt. Einmal am Ende zu messen wäre sinnlos, denn ein Client, der seine Volumes nach dem Entpacken löscht, sähe aus, als hätte er sie nie geschrieben.

FormnzbfastNZBGet 26.2rustnzb 1.3.4SABnzbd 5.0.4
Store-RAR im Store-RAR1538153817743080
komprimierte innere Ebene1536153616743102
RAR im RAR, Tiefe 21536153617143076
7z in einem Store-RAR1503153617223102

Megabyte, weniger ist besser. NZBGet zieht hier mit uns gleich, und der Grund gehört dazu: Es läuft mit DirectUnpack und DirectWrite, so wie wir jeden Konkurrenten konfigurieren, und auf diesen Formen reicht das für eine einzige Kopie auf der Platte. SABnzbd hält zwei. Der verbleibende Abstand ist der, für den die Pipeline gebaut wurde: Wir materialisieren die Volumes gar nicht erst, der Spitzenwert ist also die Nutzlast selbst statt der Nutzlast plus dem Archiv, das sie transportiert hat.

Fähigkeiten, keine Mikro-Benchmarks

Was jeder Client kann

nzbfastSABnzbd 5NZBGet 26rustnzbUsenappNewsbin
Pipelined NNTPjastandardmäßig ausneinja--
volle Prüfung während des Downloadsjeder BlockdanachQuick-Checkdanachdanachdanach
Entpacken während des Downloadsim Stream, keine Volumes auf der PlatteDirect Unpack⁴Direct Unpack⁴unzuverlässig⁵neinnein
Platte für einen N-GB-Post~1×N~2×N~2×N~2×N~2×N~2×N
Vollständigkeits-Urteil vor dem DownloadblockgenauneinZustand %neinArtikel-Checknein
begrenzter Speicher (nie swappen)budgetiert9.3 GB @ 190 GBCache-Einstellungnein--
Datei an jeder Stelle beim Download prüfenjaneinneinneinsequenziellnein
eingebauter Indexer + Posterwandja, schlüssellosneinneinneinSuch-UIGruppen-Browser
Sonarr/Radarr-Drop-inSAB API + Newznabnativnativteilweiseneinnein
Handy-Fernsteuerungen (nzb360/LunaSea)über NZBGet-RPCjajaneinneinnein
Watchlist-Auto-Grab + Upgradeseingebautüber *arrüber *arrneinWatchdogRegeln
einzige, in sich geschlossene BinaryjaPythonjaja.app.exe
Open SourceGPL⁶GPLGPLjakostenpflichtigkostenpflichtig
Plattformenmac/win/linux/dockermac/win/linuxmac/win/linuxlinux/winnur macnur win

⁴ Direct Unpack materialisiert die Volumes trotzdem zuerst: 2× Schreiben und 2× Platte. ⁵ rustnzb lieferte in unserer Runde verschleierte Volumes, markiert als „Completed“ (sein Entpacken hängt sich mit RARLab-unrar zudem auf, sofern nicht deaktiviert). ⁶ GPL-3.0-or-later. Usenapp/Newsbin sind kommerzielle Ein-Plattform-Reader mit Downloader-Funktionen; sie stehen hier, weil Leute fragen, nicht weil sie beim Tempo mithalten.

Transport-Beweis

Die Engine sättigt echte Leitungen

Stehende Regel: jede Leistungsbehauptung nennt die Bedingungen, unter denen sie lief, negative Ergebnisse und Irrwege inklusive.