Benchmark-uri

Patru clienți, șapte scenarii, hardware și provideri identici, rulări intercalate ca variația providerilor să se anuleze. Măsura este timpul până la un fișier utilizabil: descărcat, verificat, extras. Include probele pe care nu le câștigăm.

Pe această pagină

Mai întâi metodologia

Configurația

Scenariul 1 · curat, uriaș

190.6 GB → un singur mkv de 167.9 GB (Europa, 10 GbE)

nzbfast4m 33s
NZBGet 26.27m 58s · +75%
SABnzbd 5.0.419m 32s · +329%
rustnzb 1.3.4no output¹
nzbfastNZBGet 26.2SABnzbd 5.0.4rustnzb 1.3.4
timp până la fișierul utilizabil4m 33s7m 58s (+75%)19m 32s (+329%)none¹
GB pe fir169.6169.8169.7186.5
RSS de vârf1.4 GB²1.5 GB1.8 GB0.6 GB

¹ rustnzb a terminat de mutat octeții la 5m 42s, după ce a tras 186.5 GB (cu 10% mai mult trafic decât oricine), dar nu a lăsat niciun fișier media extras, a treia lui rundă eșuată la rând pe această postare. · ² memoria nzbfast urmează bugetul configurat, nu jobul: această rundă a rulat pe bugetul auto implicit și a atins un vârf de 1.4 GB; un buget uriaș de 64 GB, ales dinadins, aduce doar 4% (4m 22s), iar limitat la 1 GB, același job de 190 GB tot se finalizează (vezi scara de memorie redusă mai jos). În runda anterioară de pe Coasta de Est (linie de ~2.4–3 Gbps), același scenariu a rulat 9m 00s față de NZBGet +30% și SABnzbd +111%. Diferența se menține la diferite viteze de linie.

Scenariul 2 · diferența crește cu dimensiunea

Timp până la fișierul utilizabil, după dimensiunea jobului

O singură trecere înseamnă fără trecere de verificare/dezarhivare după descărcare, așa că, cu cât jobul e mai mare, cu atât aterizează mai în față. Rulări secvențiale pe aceeași mașină:

JobnzbfastNZBGetSABnzbd
7.4 GB REMUX (Europa, 10 GbE)13.7 s17.3 s (+26%)19.0 s (+39%)
35 GB 4K obfuscat (Europa)67 s108 s (+61%)285 s (+325%)
87 GB 4K (Coasta de Est)272 s370 s (+36%)708 s (+160%)
87 GB pe un disc cu 97 GB liberi (Europa)3m 08scannot run²cannot run²
190.6 GB (Coasta de Est)9m 00s11m 43s (+30%)19m 02s (+111%)

² Amprenta lor de vârf (volume + ieșire dezarhivată simultan, ~156 GB) a depășit cei 97 GB liberi. O singură trecere are nevoie de 1× dimensiunea conținutului: înjumătățește discul de care ai nevoie, nu doar timpul.

Scenariul 3 · postare obfuscată

35 GB 4K cu nume de tip hash → mkv utilizabil (Coasta de Est)

nzbfastNZBGetSABnzbdrustnzb
timp până la fișierul utilizabil96 s153 s (+59%)259 s (+170%)no usable file³
RSS de vârf1.55 GB3.7 GB8.8 GB3.6 GB

³ rustnzb a descărcat în 119 s, a marcat jobul Completed, și a livrat volumele obfuscate brute: fără redenumire, fără extragere. nzbfast a deobfuscat din metadatele PAR2 și a extras în flux, zero blocuri citite înapoi.

Scenariul 4 · coadă de trei

Menținerea liniei aprinse de-a lungul unei cozi (Coasta de Est, ~43 GB)

nzbfastrustnzbNZBGetSABnzbd
timp real al cozii122 s136 s162 s277 s
linie inactivă (<20 MB/s)2 s (2%)16 s (12%)0 s168 s (61%)

Trei forme ale aceleiași probleme: suprapunerea cozii nzbfast ține linia ocupată de la un capăt la altul; NZBGet nu stă niciodată inactiv, dar rulează cu ~35% mai lent în timp ce dezarhivează concurent; SABnzbd descarcă rapid, apoi lasă linia întunecată 61% din timp în timpul post-procesării seriale. În varianta de reziliență (un job cu antete RAR criptate), coada SABnzbd s-a înțepenit pe jobul criptat și doar 1 din 3 joburi s-a finalizat vreodată; nzbfast l-a parcat cu un mesaj clar și a terminat restul.

Coloana onestă

Probele pe care nu le câștigăm

Ambele probe care stăteau aici au fost remăsurate pe versiunea publicată și niciuna nu mai este o pierdere: postarea store-mode deteriorată ne ia acum 30 s față de 38 s la NZBGet, iar reconstrucția doar din paritate se încheie în 9 s față de 19 s, pe o probă unde NZBGet revine în același timp dar nu livrează nimic. Lăsăm secțiunea aici în loc să o ștergem: aici ajung pierderile noastre, iar următoarea rundă care găsește una o va pune la loc.

De ce să arătăm măcar o pierdere? Pentru că victoriile sunt credibile doar alături de ea. Fiecare număr de pe această pagină provine din aceleași rulări intercalate, iar o probă pe care o pierdem rămâne publicată până când o nouă rulare o înlocuiește.

Scenariul 6 · înfometează-l de RAM

Scara de memorie redusă: 190 GB în ~1.1 GB de RAM

Aceleași patru joburi, rerulate la bugete de memorie stricte de 2 GB, 1 GB și 256 MB: ce ar alege dimensionatorul automat pe o mașină de 8 GB, una de 4 GB și un NAS de 2 GB. Fiecare probă a produs un fișier corect, complet verificat și extras; RSS de vârf a urmărit bugetul, nu jobul. Timp până la fișierul utilizabil, linie de 10 GbE:

Dimensiunea jobuluisuficient RAMbuget 2 GBbuget 1 GBbuget 256 MB
7 GB15 s15 s15 s15 s
35 GB65 s70 s70 s65 s
87 GB148 s206 s196 s180 s
190 GB330 s427 s402 s411 s

Suplimentul de 20–40% la joburile mari este un artefact al 10 GbE: blocurile trecute pe disc costă timp doar când linia întrece discul. Același job de 87 GB la aceleași bugete pe o linie de ~2.4 Gbps a măsurat −1% până la +7%, zgomot. Pe o conexiune casnică tipică, un buget mic este aproape gratuit la orice dimensiune de job. Un profil de NAS (2 conexiuni, buget de 256 MB) a terminat jobul de 35 GB cu 0.4 GB RSS de vârf. Un NAS de 2 GB poate rula asta. Niciun alt client nu oferă vreun plafon de memorie.

Scenariul 7 · arhive în arhive

Zece forme imbricate: cine termină fără tine

Postările sosesc tot mai des imbricate: un RAR într-un RAR, un 7z vârât într-o arhivă store, o scară de straturi, un lanț de parole. Această rundă notează ce rămâne pe seama operatorului. auto înseamnă fiecare payload extras, identic la octet, fără nicio intervenție; manual înseamnă că clientul a raportat succes, dar a lăsat o arhivă interioară în directorul de ieșire, să o deschizi tu.

formanzbfastSABnzbdNZBGetrustnzb
RAR store într-un RAR storeautoautomanualmanual
RAR comprimat într-un RAR storeautoautomanualmanual
7z într-un RAR storeautoautomanualmanual
scară pe 5 niveluri, 6 payload-uriauto · 6/6manual · 3/6manual · 1/6manual · 1/6
lanț de parole, 3 niveluri criptateauto · 3/3cere o parolăcere o parolăa eșuat
auto-finalizare, toate cele zece forme8/106/102/102/10

Montaj loopback, corpus generat de mașină, toți cei patru clienți pe aceeași mașină, notare după hash-ul conținutului, așa că un client care redenumește payload-ul tot primește credit. Pentru că straturile interioare sunt dezimbricate din mers, nzbfast ține pe disc o singură copie de ~1.5 GB, acolo unde clienții care scriu pe disc și despachetează țin ~3 GB, și termină aceste probe în 1–2 s față de 4–8 s. La lanțul de parole, parola fiecărui strat vine într-un fișier pe care îl extrage stratul de deasupra: nzbfast îl citește și deblochează toate cele trei niveluri; ceilalți se opresc și așteaptă să o tastezi tu. Cele două forme pe care nu le auto-finalizează sunt notate dinadins cu asprime: o scară pe 10 niveluri dincolo de plafonul implicit de adâncime și o postare deteriorată la toate cele trei niveluri. Pe ambele recuperează mai multe payload-uri decât oricare alt client, dar iese cu cod diferit de zero în loc să numească succes un job parțial, așa că ambele contează aici ca eșecuri.

Dueluri pe componente

Motoarele de dezarhivare și reparare, în cursă solo

Extragerea și PAR2 sunt cod nativ propriu, așa că le punem și separat în cursă cu restul terenului, pe corpusuri identice. Un timp contează doar când ieșirea este identică la octet cu payload-ul sursă.

Extragere RAR · 8 forme de arhivă

Față de unrar 7.23, 7-Zip, bsdtar, unar și crate-ul rars din amonte, pe un Apple M3 Ultra, extractorul nzbfast câștigă sau egalează fiecare formă: 400 de fișiere mici în 0.13 s față de 0.66 s la unrar, solid 0.50 vs 0.87, criptat 0.49 vs 0.82, o arhivă RAR7 cu dicționar de 128 MB 0.71 vs 0.92. Rerulate pe un M1 Ultra cu 20 de nuclee și pe un laptop Intel cu 14 nuclee, rezultatul se menține pe fiecare formă, iar pe laptop marjele se lărgesc: căile de decodare paralelă scalează în firele suplimentare. Fiecare timp raportat a produs ieșire identică sha256.

Verificare + reparare PAR2 · set de 1 GiB

Față de clasicul par2cmdline, de fork-ul SIMD par2cmdline-turbo și de MultiPar, nzbfast are cea mai rapidă verificare și cea mai rapidă reparare pe fiecare mașină testată. Desktop cu 20 de nuclee: verificare curată 0.40 s față de 1.08 la turbo și 3.67 la clasic; repararea a 101 blocuri deteriorate 1.26 s vs 2.61 și 7.52. Laptop cu 14 nuclee: verificare 1.26 vs 1.48, reparare 2.57 vs 3.62. Fiecare fișier reparat, identic la octet. O notă onestă: nu creăm PAR2 (un program de descărcare nu are nevoie, iar proba aceea îi aparține lui ParPar).

Cât costă o sarcină

Vârf de disc pentru 1.5 GB

Promisiunea unei singure treceri ține de disc la fel de mult ca de viteză, așa că iat-o măsurată în loc de afirmată: maximul atins de directorul de lucru în timpul rulărilor imbricate, eșantionat de două ori pe secundă. O singură citire la final n-ar spune nimic, pentru că un client care își șterge volumele după extragere ar părea că nu le-a scris niciodată.

formănzbfastNZBGet 26.2rustnzb 1.3.4SABnzbd 5.0.4
RAR store în RAR store1538153817743080
strat interior comprimat1536153616743102
RAR în RAR, adâncime 21536153617143076
7z învelit într-un RAR store1503153617223102

Megaocteți, mai puțin e mai bine. NZBGet ne egalează aici și merită spus de ce: rulează cu DirectUnpack și DirectWrite activate, așa cum configurăm fiecare concurent, iar pe aceste forme e suficient pentru o singură copie pe disc. SABnzbd ține două. Diferența rămasă este cea pentru care a fost construită conducta: noi nu materializăm deloc volumele, deci vârful este chiar conținutul, nu conținutul plus arhiva care l-a purtat.

Capabilitate, nu micro-benchmark-uri

Ce poate face fiecare client

nzbfastSABnzbd 5NZBGet 26rustnzbUsenappNewsbin
NNTP cu pipeliningyesoff by defaultnoyes--
verificare completă în timpul descărcăriievery blockafterquick-checkafterafterafter
extragere în timpul descărcăriiin-stream, no volumes on diskdirect unpack⁴direct unpack⁴unreliable⁵nono
disc necesar pentru o postare de N GB~1×N~2×N~2×N~2×N~2×N~2×N
verdict de completabilitate înainte de descărcareblock-exactnohealth %noarticle checkno
memorie limitată (fără swap niciodată)budgeted9.3 GB @ 190 GBcache settingno--
verifică fișierul în orice punct în timpul descărcăriiyesnononosequentialno
indexer integrat + perete de postereyes, keylessnononosearch UIgroup browser
drop-in Sonarr/RadarrSAB API + Newznabnativenativepartialnono
telecomenzi de telefon (nzb360/LunaSea)via NZBGet RPCyesyesnonono
preluare automată watchlist + upgrade-uribuilt invia *arrvia *arrnoWatchdogrules
binar unic de sine stătătoryesPythonyesyes.app.exe
open sourceGPL⁶GPLGPLyespaidpaid
platformemac/win/linux/dockermac/win/linuxmac/win/linuxlinux/winmac onlywin only

⁴ Dezarhivarea directă tot materializează întâi volumele: 2× scrieri și 2× disc. ⁵ rustnzb a livrat volume obfuscate marcate „Completed” în runda noastră (dezarhivarea sa se și blochează cu unrar RARLab dacă nu e dezactivată). ⁶ GPL-3.0-or-later. Usenapp/Newsbin sunt cititoare comerciale mono-platformă cu funcții de descărcare; sunt listate pentru că oamenii întreabă, nu pentru că ar concura la viteză.

Dovada de transport

Motorul saturează linii reale

Regulă permanentă: fiecare afirmație de performanță citează condițiile în care a rulat, inclusiv rezultatele negative și pașii greșiți.