Cinq clients, matériel et fournisseurs identiques, essais menés en alternance pour annuler la dérive de fournisseur. La mesure est le temps jusqu’à un fichier utilisable - téléchargé, vérifié, extrait - relevé en même temps que le disque, l’espace libre et la mémoire que la tâche vous coûte. Chaque tableau nomme les versions qu’il a fait courir et le jour où il a tourné. Y compris les manches que nous ne gagnons pas.
Sur cette page
La version courte · mesuré le 23 août 2026 sur la ligne de code livrée comme nzbfast 1.2.2
Les manches les plus récentes de cette page ont tourné les 23 et 24 août 2026 - la plus récente d’entre elles sur le binaire de la release v1.2.2 elle-même - contre les versions actuelles de quatre autres clients, sur un matériel, des lignes et des fournisseurs identiques : deux formes de tâche de 6,5 à 87 GB, et des débits de ligne de 250 Mbit à 10 GbE. Sur l’ensemble de ces manches aucun client n’a été moins cher que nzbfast à la fois en processeur, en mémoire et en disque : chacun coûte plus sur au moins deux des trois, le maximum économisé par l’un d’eux sur un seul axe a été d’environ 2 pour cent - une égalité statistique, à l’intérieur de la propre dispersion de ce client d’un run à l’autre - et sur le disque chacun d’eux a déplacé au moins deux fois plus d’octets pour un résultat identique octet pour octet. Tel que livré, nzbfast a aussi tenu la mémoire la plus faible de tous les clients mesurés, sur chaque scénario, de 2,0x à 4,5x face au rival le plus proche.
Lequel vous correspond ?
La plupart des téléchargeurs écrivent votre téléchargement sur disque au moins deux fois : une fois pendant le téléchargement, et une autre fois pendant le désarchivage. nzbfast fait toute la tâche en une seule passe, donc il écrit environ moitié moins d’octets par tâche, tient moins en mémoire pendant qu’il travaille, et dépense moins de secondes processeur par GB. C’est moins de charge sur la machine pendant que vous l’utilisez et moitié moins d’écritures par tâche sur vos disques, pour les mêmes fichiers identiques octet pour octet - et parce que chaque octet traverse le disque environ une fois, votre disque n’a qu’à suivre votre ligne une seule fois.
nzbfast ne gagne pas chaque tableau de cette page, et ceux qu’il perd sont sous les manches que nous ne gagnons pas - dont une de cette même manche. Ce qui a tenu à chaque manche que nous avons mesurée, c’est la facture combinée.
La méthodologie d’abord
pipelining_requests=8 (il est livré à 1, c’est-à-dire sans pipelining, et le réglage vaut des pourcentages à deux chiffres sur les grosses tâches), NZBGet a reçu ArticleCache/DirectWrite/DirectUnpack/ParQuick, rustnzb sa configuration documentée. Depuis le 20 août 2026 chaque manche fait courir cinq fournisseurs plutôt que six - le nombre de fournisseurs n’est pas un levier de débit sur ces machines, où un seul fournisseur peut à lui seul atteindre le plafond de la ligne, et un ensemble fixe garde les manches comparables - donc un chiffre à six fournisseurs sur cette page n’est pas directement comparable à un chiffre plus récent à cinq fournisseurs, et chaque tableau dit lequel il a fait courir.La manche du 23 août 2026
Six bras sur une machine Apple Silicon 20 cœurs sur une ligne 1 Gbit : nzbfast aux réglages livrés par défaut, le même binaire avec son régulateur de connexions coupé, et les versions actuelles des quatre autres clients. Cinq fournisseurs, TLS partout, trois répétitions par client et par scénario avec l’ordre tourné à l’intérieur de chaque manche, et la sortie de chaque manche vérifiée octet par octet : 36 manches sur 36 ont produit exactement la charge utile attendue. À 1 Gbit c’est la ligne qui fixe le rythme et les temps de fin convergent par construction, donc la colonne du temps est là pour montrer cette convergence ; les colonnes de ressources sont ce que la manche existe pour mesurer.
Un seul réglage compte et il est énoncé plutôt qu’enfoui : les réglages livrés par défaut incluent désormais un régulateur de connexions sensible à la ligne, et sur cette ligne il a tenu à 25 connexions pendant que tous les autres clients tournaient à leurs centaines configurées. La ligne « régulateur coupé » règle les mêmes 360 sockets utilisés par nos manches plus anciennes, donc les deux comparaisons restent disponibles : le produit tel que le lecteur le reçoit, et l’expérience historique.
| Release nommée de 6,5 GB, extraction dans le chemin | temps jusqu’au fichier utilisable | pic de mémoire (RSS) | temps processeur | E/S disque (GiB) | sur le fil (GB) |
|---|---|---|---|---|---|
| nzbfast, réglages livrés (25 conn.) | 58 s | 143 MB | 35,7 s | 6,2 | 6,5 |
| nzbfast, régulateur coupé (360) | 60 s | 583 MB | 38,0 s | 6,1 | 6,6 |
| NZBGet 26.3-testing | 61 s | 801 MB | 40,1 s | 12,5 | 6,5 |
| SABnzbd 5.1.1 | 63 s | 1 588 MB | 69,5 s | 13,8 | 6,5 |
| rustnzb 1.4.5 | 67 s | 628 MB | 61,9 s | 13,4 | 7,2 |
| Weaver 0.7.8 | 110 s | 531 MB | 34,9 s¹ | 12,5 | 6,5 |
| Release obfusquée de 34 GB | temps jusqu’au fichier utilisable | pic de mémoire (RSS) | temps processeur | E/S disque (GiB) | sur le fil (GB) |
|---|---|---|---|---|---|
| nzbfast, réglages livrés (25 conn.) | 302 s | 191 MB | 194,0 s | 32,5 | 34,4 |
| nzbfast, régulateur coupé (360) | 302 s | 465 MB | 205,4 s | 32,9 | 34,4 |
| NZBGet 26.3-testing | 306 s | 900 MB | 221,3 s | 68,1 | 34,4 |
| SABnzbd 5.1.1 | 308 s | 1 607 MB | 356,5 s | 72,5 | 34,4 |
| rustnzb 1.4.5 | 343 s | 445 MB | 332,6 s | 69,8 | 37,8 |
| Weaver 0.7.8 | 511 s | 1 076 MB | 373,8 s | 98,0 | 34,4 |
Mesuré le 23 août 2026 contre SABnzbd 5.1.1, NZBGet 26.3-testing, rustnzb 1.4.5 et Weaver 0.7.8, médianes de trois avec chaque manche vérifiée octet par octet, cinq fournisseurs, TLS partout. Les bras nzbfast ont fait tourner un binaire de la même ligne de code, plus tôt le même jour, quelque sept heures avant le binaire de release v1.2.2, si bien que leurs lignes ne portent pas de numéro de version ; les tableaux 500 Mbit et 87 GB de cette page ont bien couru le binaire de release lui-même et le disent. ¹ La médiane de temps processeur de Weaver sur le scénario 6,5 GB est 2 % sous la nôtre (34,9 contre 35,7) avec ses trois manches à lui s’étalant de 34,1 à 56,1 s, donc lisez-y une égalité statistique ; c’est la seule cellule des deux tableaux que tient un rival, et elle est reprise sous les manches que nous ne gagnons pas. Sur le scénario 34 GB notre temps processeur est le plus bas, sans discussion. La 0.8.3 plus récente de Weaver ne livre aucun binaire ; notre propre version compilée depuis les sources a mesuré un profil processeur que nous ne pouvons pas attribuer proprement à la version plutôt qu’à la compilation, donc ce tableau fait courir l’asset de release 0.7.8 prouvé par hachage et le dit plutôt que de publier un chiffre faussé par un facteur confondant. rustnzb 1.4.5 a terminé chaque manche ici, scénario obfusqué compris.
La colonne du fil, précisément. 6,5 GB sur le scénario propre - le même chiffre que NZBGet et SABnzbd rapportent pour eux-mêmes. Le pire cas que nous connaissions est un post obfusqué renuméroté délibérément, où contourner la numérotation brouillée coûte un article de plus par contournement : mesuré à 1,10-1,20x le plan minimum sur les deux formes de ce genre que nous avons pu construire. Les cellules de 7,2 et 37,8 GB de rustnzb sont son propre excès, avec un avertissement dans son journal sur deux manches.
Ce que veut dire la colonne mémoire aux réglages par défaut : le régulateur explique l’essentiel du fait que la ligne livrée tient 143-191 MB - moins de connexions, c’est moins de choses en vol - et le couper (la seconde ligne) est le pont honnête vers tous les tableaux à 360 sockets plus anciens de cette page. Même à 360 sockets nous sommes à égalité avec le rival le plus sobre (583 MB contre les 628 de rustnzb sur le petit scénario, 465 contre ses 445 sur le grand) ; aux réglages livrés il ne reste plus aucune égalité.
Lignes plus lentes · mesuré le 24 août 2026 sur nzbfast 1.2.2
Sur une ligne assez lente, le temps de fin de chaque client n’est plus que la ligne et rien d’autre, donc une ligne lente cache beaucoup de péchés. Ce qu’elle ne peut pas cacher, c’est ce que chaque client brûle pour la remplir. Nous avons façonné le banc 1 Gbit à deux débits que de vrais plans connaissent réellement et fait courir les six bras à chacun - même machine, mêmes cinq fournisseurs, trois répétitions par client avec l’ordre tourné, chaque manche vérifiée octet par octet, 36 manches sur 36 correctes sur les deux manches. Le bras nzbfast à 500 Mbit est le binaire de la release v1.2.2 lui-même.
| Ligne 500 Mbit, release de 6,5 GB | temps jusqu’au fichier utilisable | pic de mémoire (RSS) | temps processeur | E/S disque (GiB) |
|---|---|---|---|---|
| nzbfast 1.2.2, réglages livrés | 109 s | 142 MB | 45,4 s | 6,2 |
| nzbfast 1.2.2, régulateur coupé | 115 s | 592 MB | 59,0 s | 6,2 |
| SABnzbd 5.1.1 | 125 s | 1 665 MB | 99,2 s | 14,2 |
| rustnzb 1.4.5 | 131 s | 626 MB | 92,6 s | 14,5 |
| Weaver 0.7.8 | 138 s | 564 MB | 48,5 s | 12,4 |
| NZBGet 26.3-testing | 145 s¹ | 846 MB | 64,3 s | 13,2 |
| Ligne 250 Mbit, même release | temps jusqu’au fichier utilisable | pic de mémoire (RSS) | temps processeur | E/S disque (GiB) |
|---|---|---|---|---|
| nzbfast, réglages livrés | 217 s | 144 MB | 53,3 s | 6,2 |
| nzbfast, régulateur coupé | 219 s | 651 MB | 67,9 s | 6,2 |
| NZBGet 26.3-testing | 227 s | 826 MB | 78,4 s | 13,3 |
| SABnzbd 5.1.1 | 230 s | 1 667 MB | 162,4 s | 15,2 |
| Weaver 0.7.8 | 230 s | 789 MB | 62,0 s | 12,9 |
| rustnzb 1.4.5 | 256 s | 644 MB | 122,4 s | 15,4 |
Lisez les deux tableaux comme un gradient. À 250 Mbit tout le champ tient dans 18 % sur le chronomètre et nous devançons le rival le plus proche de 4,4 % ; à 500 Mbit l’écart passe à 14,7 % ; aux débits gigabit et 10 GbE des tableaux au-dessus et en dessous il s’élargit encore. Les écarts de vitesse grandissent avec la ligne. Les colonnes de ressources n’attendent pas une ligne rapide : à chaque débit mesuré, chaque rival a tenu au moins 3,9x la mémoire, dépensé plus de processeur, et déplacé environ le double des octets de disque pour le même fichier identique octet pour octet.
Le régulateur de connexions gagne sa place sur les lignes lentes, et le compteur de pertes du façonneur dit pourquoi. Les réglages livrés ont tenu à 25 connexions là où chaque rival tournait à des centaines ; le même binaire avec le régulateur coupé a tourné à 360. Moins de flux à travers une file fixe, c’est moins de pertes et moins de renvois : le façonneur a relevé environ 4 200 pertes par manche plafonnée contre environ 155 000 non plafonnées à 500 Mbit, et le bras plafonné était plus rapide, 4,2x plus léger en mémoire et 1,3x plus léger en processeur que notre propre posture à 360 sockets. Plus de connexions n’est pas plus de vitesse ; sous le gigabit c’est mesurablement le contraire.
Mesuré le 24 août 2026, médianes de trois, sur une machine Apple Silicon 20 cœurs avec sa ligne façonnée à chaque débit (le débit façonné vérifié par une sonde indépendante avant chaque manche : 248 et 496 Mbit). Le bras nzbfast à 500 Mbit est le binaire du tag de release v1.2.2 ; la manche à 250 Mbit a tourné quelques heures plus tôt sur la même ligne de code. Les comptages d’octets sur une ligne façonnée sont lus depuis le compteur propre à chaque client, jamais depuis l’interface réseau (le façonneur laisse tomber des paquets et TCP les renvoie, donc l’interface compte les deux copies). Les chronomètres sont comparables à l’intérieur de chaque tableau, pas entre des manches façonnées différemment. ¹ Les trois manches de NZBGet à 500 Mbit se sont étalées de 114 à 158 s avec des relevés de ressources stables - une dispersion réelle, donc la médiane est citée et la dispersion énoncée plutôt que resserrée.
Le gros fichier · mesuré le 24 août 2026 sur nzbfast 1.2.2
L’autre bout de l’histoire du débit de ligne : une machine 10 GbE, cinq fournisseurs, un post de 87 GB dont la charge utile est une seule vidéo de 76,6 GB, six bras, trois répétitions tournées, et la sortie de chaque manche vérifiée octet par octet - 18 manches sur 18 ont produit le fichier identique, les six clients s’accordant sur sa somme de contrôle. Les bras nzbfast sont le binaire de la release v1.2.2.
| Post de 87 GB, 10 GbE | temps jusqu’au fichier utilisable | pic de mémoire (RSS) | temps processeur | E/S disque (GiB) | sur le fil (GB) |
|---|---|---|---|---|---|
| nzbfast 1.2.2 (50 connexions)¹ | 70 s | 415 MB | 144 s | 72,9 | 77,2 |
| nzbfast 1.2.2, régulateur de connexions actif (25) | 90 s | 336 MB | 130,5 s | 72,9 | 77,4 |
| NZBGet 26.3-testing | 93 s | 1 195 MB | 443 s | 183,7 | 77,2 |
| SABnzbd 5.1.1 | 113 s | 1 910 MB | 234 s | 235,1 | 77,2 |
| Weaver 0.7.8 | 645 s | 1 825 MB | 631 s | 435,1² | 77,3 |
| rustnzb 1.4.5 | 869 s³ | 681 MB | 2 444 s | 216,1 | 86,9 |
L’histoire du disque à sa plus grande échelle à ce jour. Notre pic de disque pendant la tâche est de 70,8 GiB - SOUS les 76,6 GB de sortie, parce que la queue de la charge utile arrive encore pendant que la tête est déjà finale - et le total d’E/S disque est 1,00x la charge utile. Les rivaux déplacent 2,5x à 6,0x plus d’octets pour le même fichier. Et le bras le plus rapide soutient environ 8,7 Gbps vérification et extraction en flux comprises ; à l’instant où la barre de téléchargement se remplit, le fichier est terminé.
¹ Chaque client sur cette page est couru à ses meilleurs réglages documentés, et sur une ligne 10 GbE les nôtres sont 50 connexions au total - 10 par serveur, un réglage que n’importe quel palier de compte atteint - le même réglage unique de mise au point que nous donnons à chaque rival (le pipelining pour SABnzbd, le cache d’articles pour NZBGet). Cinquante n’est pas un handicap : un balayage à six paliers sur ce même scénario a trouvé le mur identique de 50 connexions jusqu’aux maxima de compte de 360, pendant que le coût processeur monte de 2,3x sur cette plage pour rien, donc les maxima n’achètent rien que ce tableau montrerait. La ligne à 50 connexions a ensuite été remesurée en pleine qualité à trois répétitions le même jour, sur la même machine, contre la même somme de contrôle de sortie : 70 / 70 / 70 s, les trois vérifiées octet par octet. La ligne du régulateur est là parce que c’est la plus intéressante : à chaque débit jusqu’au gigabit ses 25 connexions sont gratuites-à-plus-rapides, et même ici, où elles coûtent environ un cinquième du chronomètre, elles achètent 336 contre 415 MB de mémoire et 130 contre 144 secondes processeur. Faire évoluer le régulateur avec le débit de ligne automatiquement - pour que le meilleur comportement soit aussi le défaut, au coude plutôt qu’aux maxima - est prévu pour la prochaine release. ² Les 435 GiB d’E/S disque de Weaver pour un téléchargement de 77 GB sont son stockage chiffré-au-repos en train de relire et réécrire presque tout à mesure que la tâche grandit - le profil superlinéaire que nos manches instrumentées de juillet ont mesuré, toujours présent sur la version actuelle. ³ rustnzb 1.4.5 termine correct octet par octet et son coût est en temps processeur et sur le fil : environ 2 444 secondes processeur pour un chronomètre de 869 s sur les trois répétitions, et 86,9 GB tirés là où le plan avide est 77,2 (il récupère l’intégralité du jeu de récupération sans condition). Mesuré le 24 août 2026, médianes de trois, toutes versions actuelles ; la répétition 3 pour les trois bras les plus rapides a tourné ~40 minutes après le reste (un garde-fou d’espace libre a mis la manche en pause ; le décalage n’a déplacé aucune médiane de plus que la dispersion des répétitions).
Depuis cette manche, la ligne du régulateur est dépassée par ce que livre la 1.2.3. Mesurée le 26 août 2026 sur le même scénario, la même machine et la même ligne 10 GbE, six manches correctes octet par octet contre la somme de contrôle de ce tableau : 71 s aux réglages livrés, 322 MB et 139,3 secondes de processeur, contre les 90 s ci-dessus. Une manche nzbfast seule sur un binaire plus récent, donc énoncée ici plutôt que courue dans le tableau : chaque ligne ci-dessus tient telle que mesurée le 24 août.
Le premier client commercial de cette page : Newsbin Pro, le client Windows payant le plus ancien, couru contre notre binaire Windows officiel sur une machine Windows native 10 GbE dont le disque système TLC soutient 0,99 GB/s d’écritures - le disque le plus lent de notre parc de test, ce qui en fait l’endroit honnête pour faire courir un client de mise en scène. Même post de 87 GB, trois répétitions entrelacées, la sortie de chaque manche vérifiée octet par octet contre la même somme de contrôle que le tableau au-dessus : 6 manches sur 6 identiques.
| Post de 87 GB, Windows, disque TLC | temps jusqu’au fichier utilisable | pic de mémoire (RSS) | temps processeur | E/S disque (GiB) | sur le fil (GB) |
|---|---|---|---|---|---|
| nzbfast 1.2.2 (50 connexions) | 105 s | 469 MB | 154 s | 84,5 | 76,7 |
| Newsbin Pro 6.90 (360 connexions) | 477 s | 881 MB | 1 862 s | 154,1 | 76,7 |
Mesuré le 24 août 2026, médianes de trois, les deux clients à jour. Newsbin a tourné à ses propres maxima de connexions par serveur configurés - 360 sockets contre nos 50 - et ses temps excluent les 90 secondes de pause que notre harnais attend avant de déclarer terminé un client surveillé, donc la comparaison penche deux fois en sa faveur et le résultat tient quand même : 4,5x le chronomètre, 12x les secondes processeur, et 1,9x la mémoire pour le fichier identique. Aucun des deux côtés n’est lié par le disque ici - le bras en une passe a besoin d’environ 0,73 GB/s des 0,99 du disque, et Newsbin en moyenne un tiers de cela tout en gardant près de quatre cœurs processeur occupés pendant huit minutes - donc l’écart, c’est le client, pas le matériel. Les deux clients ont tiré les mêmes octets sur le fil pour la charge utile. Newsbin est une marque déposée de CMCE, Inc. ; le client est publié par DJI Interprises, LLC.
Le recensement
Repesé en août 2026 sur une population bien plus large. Le recensement de juillet ci-dessous portait sur deux groupes ; l’index derrière lui tient désormais 13,2 millions de releases et 174,7 TB sur 114 groupes, et le mélange a bougé - les archives 7z sont passées de moins de 2 % des octets à une part majeure. Remesuré sur cette population, environ 95 % des octets de releases complètes passent en une seule passe (94,3 % à 96,3 % selon quatre façons de découper la population), et le qualificatif qui compte réellement n’est pas la forme d’archive mais le mot de passe : environ un tiers des octets en ont besoin d’un pour produire quoi que ce soit, quel que soit le client que vous faites tourner. L’instantané de juillet reste ci-dessous comme l’instantané qu’il est.
Pour le recensement de juillet nous avons regardé 890 852 releases, 1,6 million de fichiers et 79,6 TB sur les deux groupes films et séries les plus actifs, puis récupéré et lu les en-têtes d’archive d’un millier de posts réels pour confirmer ce que les noms de fichiers ne faisaient que laisser entendre. Compté en octets plutôt qu’en posts, parce qu’un million de petits fichiers compte moins qu’un seul gros.
Cela a reformé ce sur quoi nous travaillons. Il y a peu d’intérêt à peaufiner un chemin de compression qui porte 1,4 % des données, donc nous avons peaufiné les deux qui portent le reste.
Le chiffrement n’est pas réparti uniformément non plus. Il croît avec la taille :
| Taille de release | Part de toutes les données | Stockée | Chiffrée |
|---|---|---|---|
| 1-5 GB | 29% | 94% | 2% |
| 5-20 GB | 39% | 97% | 2% |
| 20-60 GB | 20% | 67% | 33% |
| plus de 60 GB | 12% | 51% | 49% |
Les téléchargements ordinaires sont presque toujours des archives stockées ordinaires. Les grosses sont un pile ou face entre stockées et chiffrées. La forme stockée est celle que fait courir chaque tableau actuel de cette page ; l’histoire disque de la forme chiffrée est mesurée dans sa propre section ci-dessous.
Le post endommagé · recouru le 24 août 2026, chaque version à jour
Les articles expirent, les serveurs les laissent tomber en silence, les envois arrivent incomplets - et l’endommagement est là où l’écart entre les clients est le plus large, donc ça a sa propre manche sur la version la plus récente de chaque client, nzbfast v1.2.2 compris : machine Europe 10 GbE, cinq fournisseurs, 100 connexions par client, la même release de 6,5 GB empoisonnée à trois niveaux de dégâts, trois répétitions par bras avec l’ordre alterné, chaque manche vérifiée octet par octet contre le fichier propre. 63 manches sur 65 sont revenues identiques octet pour octet ; les deux qui ne l’ont pas fait sont nommées ci-dessous, parce que ce sont des résultats.
| temps jusqu’à un fichier vérifié et utilisable (moyenne de 3) | 60 articles morts | 20 morts | 5 morts |
|---|---|---|---|
| nzbfast 1.2.2 | 13,0 s | 10,0 s | 8,7 s |
| nzbfast 1.2.2, réparation anticipée coupée | 29,3 s | 19,0 s | 12,3 s |
| NZBGet 26.3-testing | 33,0 s | 23,7 s | 23,0 s |
| SABnzbd 5.1.1 | 48,0 s¹ | 28,0 s | 24,3 s |
| rustnzb 1.4.5 | 107,3 s² | 51,3 s | 47,0 s |
| Weaver 0.7.8 | n’a pas terminé³ | n’a pas terminé³ | 194,0 s |
Pourquoi le post endommagé est rapide ici. Quand un article manque, un client demande normalement au serveur suivant, puis au suivant, jusqu’à ce que chaque serveur l’ait refusé - une marche en série dont les refus prennent de quelques dizaines de millisecondes à deux secondes chacun, pendant laquelle le téléchargement reste à zéro. nzbfast arrête de demander : dès que les données de parité déjà en main couvrent ce qui manque encore, il répare immédiatement au lieu de finir la marche. C’est la deuxième ligne - le même binaire avec ce comportement coupé est 1,4x à 2,3x plus lent selon les dégâts - et la manche a vérifié que le mécanisme s’engageait sur chaque manche activée et jamais sur une désactivée. Contre le rival le plus proche la marge est de 2,4x à 2,7x, sans chevauchement dans aucune des neuf paires de répétitions.
Le disque est là où la marge est la plus large, et ce n’est pas l’astuce de réparation. Chaque bras qui a terminé a produit le même fichier de 6,48 GB ; le nôtre a déplacé 6,2-6,8 GB d’E/S disque pour y arriver, NZBGet 12,7-18,5 GB, SABnzbd 13,9-20,3 GB et rustnzb 12,8-13,1 GB. C’est le pipeline en une passe - la ligne coupée déplace les mêmes 6,2 GB - donc ça tient sur les posts endommagés comme sur les intacts.
¹ Les trois manches de SABnzbd au dégât le plus lourd ont tourné à 43, 41 et 60 s - une vraie dispersion sur des entrées identiques, donc la moyenne est citée avec la plage énoncée. ² rustnzb 1.4.5 a livré chaque manche correcte octet par octet, et son coût se trouve dans le temps processeur plutôt que dans la fiabilité : environ 1 620 secondes processeur pour un chronomètre de 107 s au dégât le plus lourd - à peu près quinze cœurs occupés pendant toute la manche - là où la même sortie réparée nous coûte environ 50 secondes processeur. ³ Weaver a déplacé 1,5 GB et 4,9 GB des 6,5 dans notre plafond de 20 minutes aux deux niveaux de dégâts les plus lourds - le même non-achèvement dans les trois manches qui l’ont couru, sur trois nuits séparées ; le plafond est le nôtre et le non-achèvement est le résultat. À 5 articles morts il a terminé correctement les trois fois. Son coût processeur là est sa propre histoire : environ 2 325 secondes processeur pour la manche de 194 s, contre nos 20.
Mesuré le 24 août 2026, toutes versions à jour : nzbfast v1.2.2 (le tag de release lui-même), NZBGet 26.3-testing (version du 20 août), SABnzbd 5.1.1, rustnzb 1.4.5, Weaver 0.7.8. Un bras de continuité a fait courir la version nzbfast de la nuit précédente à l’intérieur de cette même manche et a atterri à moins d’une seconde de v1.2.2 sur chaque scénario, donc rien ici ne repose sur une nuit chanceuse ; et les configurations rivales ne diffèrent de celles de la manche précédente que par le chemin d’application, vérifié clé par clé avant que la manche ne tourne.
La colonne honnête
Cette section existe pour les manches qu’un rival gagne, et elle est remesurée à chaque manche plutôt que triée sur le volet : tout ce que nous perdons vient ici, nommé, à côté du tableau qui le montre. Sur la version actuelle, cette manche, elle est vide de pertes de vitesse - ce qui vaut la peine d’être pris avec prudence plutôt qu’avec satisfaction, donc les compromis qui restent sont énoncés ci-dessous à la place.
Ce qui n’a pas disparu, c’est le compromis derrière ces chiffres, donc c’est ce que cette section dit maintenant : nous dépensons plus de mémoire que les outils autonomes, et le chemin de réparation lourde rapide dépense le plus. Notre extracteur et notre réparateur sont construits pour accompagner un téléchargement en direct plutôt que pour tourner une fois en ligne de commande, et ça coûte de la mémoire résidente ; le détail est à côté des tableaux de composants. Si votre contrainte est la plus petite empreinte possible pour une tâche ponctuelle, les outils dédiés gagnent cette colonne et nous n’allons pas prétendre le contraire.
Et la manche du 23 août 2026 ajoute une entrée, que nous préférons lister ici plutôt que laisser en note de bas de page : sur le scénario 6,5 GB, la médiane processeur de Weaver est 2 % sous la nôtre - 34,9 contre 35,7 secondes processeur, avec ses trois manches à lui s’étalant de 34,1 à 56,1 s - donc nous l’appelons une égalité statistique, et elle figure dans le tableau de coût marquée comme la seule cellule que nous ne tenons pas. Sur le scénario 34 GB de la même manche notre temps processeur est le plus bas, sans discussion.
Affamez-le de RAM · mesuré le 24 août 2026 sur nzbfast 1.2.2
La même tâche de 87 GB que la manche ci-dessus, rejouée à des budgets mémoire durs de 2 GB, 1 GB et 256 MB - ce que l’auto-dimensionneur choisirait sur une machine 8 GB, une machine 4 GB, et un NAS 2 GB. Chaque manche a produit le fichier identique vérifié octet par octet, et la colonne mémoire a suivi le budget, jamais la tâche :
| Tâche de 87 GB, 10 GbE | auto | budget 2 GB | budget 1 GB | budget 256 MB |
|---|---|---|---|---|
| temps jusqu’au fichier utilisable | 94 s | 87 s | 94 s | 102 s |
| pic de mémoire (RSS) | 286 MB | 558 MB | 336 MB | 284 MB |
| E/S disque (GiB) | 73,2 | 73,2 | 72,8 | 72,7 |
Une seule manche par budget sur le binaire de release, comparée à la même somme de contrôle de sortie que la manche à six bras. Le budget le plus serré coûte environ 9 % du chronomètre, et seulement parce que cette ligne est en 10 GbE - les blocs déversés ne coûtent du temps que quand la ligne dépasse le disque, donc sur une connexion domestique typique un petit budget est proche du gratuit. Toute l’échelle, téléchargement de 87 GB compris, tient dans 0,3-0,6 GB de mémoire ; aux réglages livrés la tâche a tourné en 286 MB. Aucun autre client n’offre un budget mémoire dur à l’échelle du processus ; ce qui s’en rapproche le plus, ce sont des réglages de taille de cache, et la manche ci-dessous mesure ce qu’ils coûtent.
Le plafond couru contre les propres réglages du champ. Sur le scénario 34 GB (23 août 2026, machine 1 Gbit, cinq fournisseurs, 30 manches sur 30 correctes octet par octet), tenir NZBGet à un plafond de cache équivalent a plus que doublé son temps processeur (215,5 à 453,0 secondes processeur, 2,10x) pour acheter une réduction de 52 % de son pic de mémoire, et le plafond de SABnzbd a été presque gratuit mais n’a atteint qu’une partie de son empreinte. Le réglage de cache de rustnzb était décoratif sur le binaire couru, et Weaver n’a aucun réglage mémoire du tout, donc les deux ont tourné sans plafond comme colonnes de référence plutôt que d’être notés à un budget qu’ils ne peuvent pas tenir. Notre propre côté de cette manche est remplacé par l’échelle v1.2.2 ci-dessus, qui dit la même chose à 2,5x la taille : le budget n’est jamais la contrainte qui bloque, parce qu’une passe unique tient si peu pour commencer.
Espace libre · mesuré au mégaoctet près
Un client qui écrit puis désarchive a besoin de place pour les volumes d’archive et la charge utile désarchivée en même temps, donc une tâche ne démarrera pas sans environ le double du téléchargement en libre. La passe unique a besoin de la charge utile - et cette manche a mesuré combien de plus, en rétrécissant le volume cible jusqu’à faire échouer chaque client. La réponse de nzbfast est une constante d’environ 50 MB de marge, pas un ratio, et elle tient d’une tâche de 6,5 GB à une de 34 GB.
| Espace libre dont la tâche a besoin | tâche de 6,5 GB | tâche de 34 GB |
|---|---|---|
| nzbfast 1.2.2 | la sortie + 48,6 MB | la sortie + 51,0 MB |
| NZBGet 26.3-testing | ~2.1x la charge utile | ~2.1x (37,6 GB au-dessus de la sortie) |
| SABnzbd 5.1.1 | ~2.1x la charge utile | ~2.1x (37,6 GB au-dessus de la sortie) |
| rustnzb 1.4.5 | ~2.25x la charge utile | ~2.25x (42,7 GB au-dessus de la sortie) |
| Weaver 0.7.8 | ~2.25x la charge utile | ~2.25x (42,7 GB au-dessus de la sortie)¹ |
Mesuré sur une machine Apple Silicon 20 cœurs, ligne 1 Gbit, cinq fournisseurs, trois répétitions à chaque borne, chaque manche terminée vérifiée octet par octet - les lignes rivales les 22-23 août 2026 (cellule 34 GB de Weaver reprise le 24 août, note 1), et la ligne nzbfast recoupée sur le binaire de release v1.2.2 le 24 août, qui a reproduit les deux bornes exactement, 12 manches sur 12 unanimes sur les deux scénarios. Nos cellules sont un plancher mesuré : la tâche se termine 3 fois sur 3 avec 48,6 MB et 51,0 MB de marge, et refuse 3 fois sur 3 environ 17 MB en dessous - donc le plancher est réel dans les deux sens. Ce que la tâche tient réellement se stabilise à la sortie plus environ 3 MB ; la marge paye pour les derniers instants du pipeline, jamais pour une deuxième copie. Les cellules des rivaux sont leur plancher mesuré sur la tâche de 6,5 GB et une suffisance confirmée au même ratio sur celle de 34 GB (3 fois sur 3 correctes octet par octet exactement à ce ratio) ; nous n’avons pas descendu leur échelle plus bas à la plus grande taille, donc leur vrai plancher là-bas peut se trouver un peu sous le ratio, et nous le disons plutôt que d’arrondir en notre propre faveur.
Ce à quoi ressemble vraiment la panne compte autant que le chiffre. À 17 MB sous son plancher nzbfast se heurte au refus d’écriture du disque, s’arrête proprement avec « espace disque insuffisant », garde journalisé tout ce qui est arrivé, et une reprise reprend sans retélécharger - un partiel que vous gardez, pas une tâche ratée. ¹ La cellule du grand scénario de Weaver a été tranchée par une reprise le 24 août : trois manches sur trois correctes octet par octet au même ~2,25x, chacune plus rapide que la bonne manche de la première tentative, sur un espace libre identique à l’octet près. Lors de la première tentative, le 23 août, deux de ses trois manches avaient calé à quelques MB/s avec plus de 60 GB encore libres et atteint le plafond de 40 minutes de la manche. Ces blocages ne sont pas revenus, et l’instrumentation de blocage du banc était déployée et silencieuse sur les trois manches de la reprise, ce qui est une mesure positive et non une mesure absente. Ce qui les a causés reste inconnu, et une reprise propre n’est pas un diagnostic : il existe maintenant six manches à ce ratio, quatre terminées, et les deux échecs viennent d’une seule fenêtre de 80 minutes la première nuit.
La conséquence du multiplicateur
Pour n’importe quel disque, le débit de ligne que vous pouvez soutenir à travers le téléchargement, la vérification et le désarchivage est le débit réel du disque divisé par le multiplicateur d’E/S du client. Les tableaux de coût ci-dessus mesurent le nôtre à environ 1,0x - chaque octet traverse le disque environ une fois - et chaque rival à 2,0x à 3,0x pour une sortie identique octet pour octet. Donc le même disque soutient deux à trois fois le débit de ligne sous nzbfast qu’il ne le ferait sous un client de mise en scène. L’arithmétique, avec les multiplicateurs tirés des tableaux mesurés ci-dessus :
| ligne | débit de charge utile | disque nécessaire à notre ~1.0x | à 2,2x | à 3,0x |
|---|---|---|---|---|
| 100 Mbit | 12,5 MB/s | ~13 MB/s | ~28 MB/s | ~38 MB/s |
| 1 Gbit | 125 MB/s | ~130 MB/s | ~275 MB/s | ~375 MB/s |
| 5 Gbit | 625 MB/s | ~650 MB/s | ~1 400 MB/s | ~1 900 MB/s |
| 10 Gbit | 1,25 GB/s | ~1,3 GB/s | ~2,75 GB/s | ~3,75 GB/s |
Placez ces colonnes face à ce que les disques soutiennent vraiment. Un disque NAS 5400/5900 tr/min tient environ 100-140 MB/s sur ses pistes externes, décroissant vers 80-100 à mesure qu’il se remplit - donc le gigabit est déjà limite à 1,0x sur la classe la plus lente, ce que nous disons franchement, et hors de portée à 2-3x. Un disque 7200 tr/min tient environ 160-220 MB/s. Le ~550 MB/s d’un SSD SATA plafonne un client à 2,2x près de 2 Gbit et porte environ 3,5-4 Gbit à 1,0x. Les disques SMR, vendus dans des baies NAS depuis des années, sont le pire cas pour le motif de mise en scène spécifiquement : l’écriture soutenue avec relecture peut s’effondrer à quelques dizaines de MB/s une fois que le cache de reshingling du disque s’épuise. Et une ligne multi-gigabit, c’est le même mur plus haut : 10 Gbit à un multiplicateur de 2-3x exige 2,75-3,75 GB/s soutenus, au-delà de chaque disque SATA et au-delà de nombreux disques NVMe une fois qu’une grosse tâche dépasse leur zone de cache rapide, tandis qu’à 1,0x un SSD ~2 GB/s suit le débit de ligne avec de la marge.
Mesuré plutôt qu’affirmé, sur un disque bridé. Nous avons plafonné un disque à 150 MB/s - un débit de classe 5400 tr/min - et lancé le même téléchargement deux fois : une fois en une passe, une fois suivie du motif de mise en scène d’écriture, relecture et désarchivage. Le bras en une passe a suivi la ligne 1 Gbit à 109,9 MB/s, 0,2 % sous son propre débit non bridé ; le motif de mise en scène est tombé à 59,0 MB/s, 54 % de la ligne. Balayé paramétriquement sans limite de ligne, le bras en une passe a pris 97 % de ce que le disque offrait à chaque plafond (290,7 MB/s d’un plafond à 300 MB/s, 145,6 de 150) à une E/S disque mesurée de 1,00-1,03x, et le motif de mise en scène a pris 47-48 % à une E/S mesurée de 3,02x - le ratio constant d’un plafond à l’autre, ce qui est l’arithmétique ci-dessus reproduite comme une mesure. 32 manches, chaque sortie vérifiée octet par octet.
Et une fois sur du vrai matériel, sans bridage. Le disque le plus lent de notre parc de test est un disque système TLC sur une machine Windows native 10 GbE, soutenant 0,99 GB/s d’écritures là où notre machine de test la plus rapide en soutient 5,97. La manche Windows de 87 GB ci-dessus a tourné dessus : le bras en une passe a eu besoin d’environ 0,73 GB/s de ces 0,99 pour tenir 105 s de chronomètre - de la marge à revendre sur le pire disque du parc - ce qui est la cellule en haut à droite du tableau ci-dessus qui atterrit sur un vrai disque plutôt que sur un disque bridé. Et le bout rapide du parc referme l’argument depuis l’autre côté : la même tâche de 87 GB, à plein débit en 10 GbE, termine dans les mêmes 70-71 secondes sur un disque à 1,24 GB/s et sur un disque à 5,97 GB/s - un disque 4,8x plus rapide ne déplace le mur d’aucun instant, parce qu’à un multiplicateur de 1,0x la ligne s’épuise bien avant le disque. Pour un client de mise en scène ces deux disques sont des mondes différents.
Ce que ce banc est et n’est pas. Le disque a été plafonné avec un contrôleur d’E/S du système d’exploitation dans une machine virtuelle sur une machine Apple Silicon 32 cœurs, et le bras de mise en scène est notre propre binaire fait pour écrire, relire et réécrire à la manière d’un client de mise en scène. Aucun rival n’y a tourné - la ligne factice du banc sert des fichiers ordinaires qu’un rival gérerait aussi en une passe, donc en pointer un dessus ne démontrerait rien - ce qui veut dire que le tableau ci-dessus est de l’arithmétique ancrée par une seule paire mesurée, avec les multiplicateurs des rivaux tirés des vrais tableaux à cinq clients ci-dessus, et nous l’étiquetons ainsi délibérément. Trois notes d’honnêteté vont avec. Le contrôleur budgète lectures et écritures séparément, ce qui flatte le bras de mise en scène ; sur un disque à budget unique, ce qu’est chaque disque à plateaux, sa part serait plus faible encore. Le multiplicateur de mise en scène est d’environ 2x quand les volumes sont encore dans le cache de pages à la relecture et 3x quand ils n’y sont pas, donc une grosse tâche sur une machine normale se situe du côté du 3x. Et le coût de recherche lié à l’écriture, la relecture et la suppression de centaines de fichiers de volume - contre un seul fichier écrit une fois dans l’ordre - est un argument tiré de la forme du trafic, pas encore une mesure : il a besoin d’un disque à plateaux, et nous le citons comme un argument jusqu’à ce qu’il en ait un.
Forme deux · le pile ou face des grosses releases
La moitié de tout ce qui est publié au-dessus de 60 GB est une archive chiffrée, et c’est la forme où les clients de mise en scène payent le plus : les données verrouillées doivent être écrites, relues, déverrouillées et réécrites. nzbfast déverrouille chaque morceau à son arrivée, donc les données verrouillées n’atteignent jamais le disque du tout. Mesuré sur une vraie release chiffrée de 94 GB :
| Release chiffrée de 94 GB, une seule passe | mesuré |
|---|---|
| Écrit sur disque | 90,1 GB - environ la charge utile, une fois |
| Disque utilisé au maximum à un instant | 89,6 GB - le fichier de sortie lui-même |
| Pause après le téléchargement | 0,6 s |
Le disque utilisé au maximum à un instant est la taille du fichier que vous avez demandé. Il n’y a aucun moment pendant un téléchargement chiffré où nzbfast a besoin de place pour une deuxième copie, et aucune passe de déverrouillage après que la barre de téléchargement se remplit - un client de mise en scène paye environ le double sur ces trois lignes, ce qui est le même 2x que mesurent les tableaux de coût ci-dessus pour chaque autre forme.
Disque utilisé pendant un téléchargement, échantillonné toutes les cinq secondes. La ligne plate est nzbfast ; la ligne qui grimpe à 166 GB à la fin est le motif d’écriture-puis-déverrouillage, qui paye pour le fichier terminé pendant que la copie verrouillée est encore sur le disque - mesuré en faisant tourner les deux motifs sur la même release.
Publications emboîtées · mesuré le 28 août 2026
Une grande partie de ce qui est publié est délibérément difficile à ouvrir. Le vrai nom de fichier est enfoui dans une deuxième archive, parfois une troisième, parfois dans un format différent à chaque niveau, afin que la publication révèle le moins possible de ce qu'elle contient. À cela s'ajoutent les publications endommagées : les articles expirent, les envois arrivent incomplets, et les données de récupération doivent être utilisées avant de pouvoir extraire quoi que ce soit. Un client parcourt cette chaîne pour vous, ou bien il vous remet un dossier d'archives et s'arrête.
Nous avons donc construit dix formes qui isolent exactement cela, confronté chaque client actuel à ces formes, puis fait ce que les comparatifs omettent habituellement : là où un client s'est arrêté trop tôt, nous avons terminé le travail à la main avec les outils standard et chronométré cela aussi. Un client qui abandonne vite paraît rapide jusqu'à ce que l'on compte le travail qu'il vous laisse.
| dix formes emballées et endommagées | terminé seul | seulement après réparation manuelle | n'a jamais atteint le fichier |
|---|---|---|---|
| NZBGet 26.3 | 2 sur 10 | 8 | 0 |
| SABnzbd 5.1.2 | 5 sur 10 | 3 | 2 |
| nzbfast 1.2.4 | 10 sur 10 | 0 | 0 |
| rustnzb 1.4.5 | 7 sur 10 | 1 | 2 |
| Weaver 0.7.8 | 1 sur 10 | 1 | 8 |
nzbfast est le seul à terminer les dix sans aide. NZBGet atteint aussi le fichier sur chaque forme, mais il lui faut 16 séries de réparation et d'extraction manuelles sur huit d'entre elles. SABnzbd en termine cinq sans aide et deux restent inaccessibles même à la main. Weaver atteint le fichier sur deux.
Le schéma n'a rien d'aléatoire. Les formes que nzbfast parcourt et que les autres ne parcourent pas sont les formes emballées et les formes endommagées : une archive dans une archive, un changement de format en cours de chaîne, un enchaînement à cinq niveaux, et surtout une archive qui arrive corrompue avec ses propres données de récupération jointes. Sur cette dernière, quatre clients extraient parfaitement l'ensemble extérieur, vous remettent l'archive défectueuse accompagnée du jeu de récupération qui la réparerait, et s'arrêtent.
Là où les clients accomplissent le même travail, l'écart de coût est net. Voici les sept formes que les quatre clients principaux atteignent, réparation manuelle comprise :
| les sept formes atteintes par les quatre | délai jusqu'à un fichier utilisable | écrit sur le disque |
|---|---|---|
| NZBGet 26.3 | 51,2 s | 29,83 GB |
| SABnzbd 5.1.2 | 52,3 s | 32,27 GB |
| nzbfast 1.2.4 | 10,3 s | 11,68 GB |
| rustnzb 1.4.5 | 41,8 s | 27,75 GB |
Quatre à cinq fois plus rapide, pour moins de la moitié des octets écrits. Le chiffre du disque est celui qui compte encore après le téléchargement : chaque gigaoctet de cette colonne est un gigaoctet que votre disque a dû absorber, et les clients qui passent par une zone de transit écrivent la charge utile, la relisent et la réécrivent.
Là où nous ne sommes pas devant, et pourquoi il faut le dire. Sur quatre des dix formes, un concurrent écrit moins d'octets que nzbfast pendant le téléchargement lui-même. À chaque fois, c'est parce qu'il en a fait moins : sur la forme à archive interne corrompue, NZBGet écrit 3,29 GB contre nos 4,65, puis sa passe de réparation en écrit 2,91 de plus, pour finir à 6,20 GB contre nos 4,65. Sur les autres, le client qui a le moins écrit est un client qui n'a jamais atteint le fichier. Un petit chiffre de disque n'est pas toujours une économie.
Ce sont des tests de capacité, pas des tests de vitesse. Les charges utiles sont petites et servies depuis la mémoire sur une connexion locale, sans fournisseur ni réseau sur le trajet : rien ici n'est limité par le débit de téléchargement et les secondes absolues sont bien plus courtes que ce que les mêmes formes prendraient dans le monde réel. Le fait qu'une forme exige ou non un travail manuel est une propriété de la forme et du client, et se transpose directement. Les secondes comparent des clients effectuant un travail identique, elles ne prédisent pas la durée d'une vraie tâche.
Les résultats complets par forme, la description de chaque forme et la méthode se trouvent sur la page de données des archives emboîtées.
Pourquoi c’est important
Le stockage flash s’use en étant écrit. Une release de 94 GB coûte à votre disque environ 90 GB d’écriture sous nzbfast ; sous un client qui met en scène puis désarchive, la même release coûte à peu près le double. Sur un NAS à disques durs, la forme en une passe supprime aussi la longue passe monofil à la fin de chaque téléchargement chiffré - une pause mesurée à 20 secondes sur une station de travail 32 cœurs rapide avec déverrouillage accéléré par matériel, et proportionnellement plus longue sur les machines à faible puissance sur lesquelles la plupart des gens font vraiment tourner ça. Nous citons le petit chiffre parce que c’est celui que nous avons mesuré.
Duels de composants
La réparation (PAR2) et le désarchivage (RAR) sont notre propre code natif plutôt que des binaires tiers embarqués, donc nous les faisons aussi courir de façon autonome contre les outils dédiés sur des corpus identiques, sur quatre machines couvrant ce qu’un lecteur pourrait vraiment posséder. Un temps ne compte que quand la sortie est identique octet pour octet à la charge utile source : chaque chiffre RAR ci-dessous a été vérifié en sha256 contre la source, et chaque fichier réparé contre le jeu intact.
La manche précédente de ce tableau utilisait 100 MB à 200 MB par forme, ce qui était une erreur : environ 28 ms de lancement de processus représentaient 40 % de la manche stockée, et le classement qui en résultait ne survit pas à une taille réaliste. Cette manche est 1 GB de charge utile par forme, et ça change plusieurs réponses, y compris certaines dans l’autre sens. Les archives sont créées par le rar officiel 7.23, donc aucun outil n’est jugé sur une entrée issue de son propre encodeur, et les mêmes octets sont mis en duel sur chaque machine.
Ce qu’il y a dans la charge utile compte plus qu’il n’y paraît. Une charge utile faite de copies de blocs fait de chaque forme compressée un benchmark de copie mémoire ; une charge utile de texte pur en fait un benchmark de littéraux et de Huffman ; nous avons mesuré les deux et elles ne s’accordent pas sur le vainqueur. Donc les quatre formes compressées utilisent des tiers égaux de texte, d’enregistrements structurés et d’octets incompressibles, et les deux formes aux extrémités de cette plage sont des manches séparées exprès : store est incompressible et repetitive est presque toute en correspondances. Le générateur et le harnais sont dans le dépôt, donc le corpus peut être reconstruit octet pour octet.
Recouru le 23 août 2026 sur le moteur 1.2.2, et le balayage tient. Les trois outils qu’un lecteur pèse le plus souvent - le nôtre, unrar 7.23 et rarpar 0.2.5 - ont été recourus sur le bureau 32 cœurs sur le moteur de release (le code d’extraction en duel est identique octet pour octet au tag 1.2.2), six manches entrelacées, minimum par outil, la sortie de chaque manche vérifiée contre le manifeste de charge utile. Secondes, plus bas est meilleur :
| Charge utile de 1 GB, 32 cœurs (23 août 2026) | store | 400 petits fichiers | solid | repetitive | gros, 3 volumes | chiffré | dictionnaire 128 MiB |
|---|---|---|---|---|---|---|---|
| nzbfast 1.2.2 | 0,119 | 0,474 | 1,515 | 0,120 | 1,118 | 1,137 | 1,146 |
| unrar 7.23 | 0,190 | 2,032 | 1,784 | 0,139 | 1,655 | 1,846 | 1,420 |
| rarpar 0.2.5 | 0,206 | 2,563 | 2,395 | 0,237 | 1,852 | 1,857 | 1,725 |
Les sept formes sont toutes à nous, sur le minimum et sur la médiane, 1,16x à 4,29x contre unrar. Ces temps ne sont pas comparables cellule par cellule avec le tableau plus large ci-dessous - le harnais a été révisé depuis les manches de ce tableau et les décomptes de manches diffèrent - donc lisez chaque tableau contre lui-même. Le tableau plus large garde ses propres dates et son champ à six outils, et sa colonne nzbfast décrit le moteur que livre la 1.2.2 : la reprise ci-dessus a mesuré le niveau du moteur actuel avec la version de ce tableau sur les sept formes, tranché par des comptages d’instructions matérielles (0,14 % de moins pour le même chronomètre), donc ces cellules ne sont pas les chiffres d’une version dépassée portant une étiquette actuelle. Cette reprise est aussi là où la règle A/A dans la section protocole a été gagnée. Un passage le même jour a d’abord rapporté une forme comme une petite régression contre notre propre version précédente, et la lecture a survécu à faire tourner les deux ordres de bras. Un contrôle A/A - le même binaire couru contre une copie identique octet pour octet de lui-même - a montré le harnais imposant à quel que soit le bras qui courait en premier une pénalité d’environ 1,5 % : le binaire identique n’a gagné que 6 des 15 manches depuis la première place, et inverser les ordres n’annule pas un biais qui retombe toujours sur celui qui est premier. Les comptages d’instructions matérielles ont tranché la question que le harnais ne pouvait pas trancher - la version plus récente retire 0,14 % moins d’instructions pour le même chronomètre, donc il n’y avait pas de régression. Chaque comparaison de notre version contre notre version que nous publions maintenant porte ce contrôle.
Tout le champ, secondes, plus bas est meilleur. Meilleur sur trois, outils entrelacés à l’intérieur de chaque manche plutôt que courus en blocs, sortie vérifiée contre la charge utile source à chaque run individuel. Un outil qui produit les mauvais octets reçoit une note de correction, jamais un temps rapide. rarpar est le propre code RAR et PAR2 de Weaver, compilé depuis les sources au commit bd87611 ; nous épinglons le commit plutôt qu’une version parce que ses crates portent trois numéros de version différents.
| secondes, 1 GB par forme | store | 400 petits fichiers | solid | repetitive | gros, 4 volumes | chiffré | dictionnaire 128 MiB |
|---|---|---|---|---|---|---|---|
| Bureau haut de gamme, 32 cœurs | |||||||
| nzbfast | 0,21 | 0,47 | 1,26 | 0,14 | 1,08 | 1,09 | 1,07 |
| unrar 7.23 | 0,21 | 2,02 | 1,62 | 0,16 | 1,61 | 1,82 | 1,37 |
| rarpar | 0,23 | 2,55 | 2,22 | 0,26 | 1,75 | 1,74 | 1,64 |
| unar 1.10.7 | 0,60 | 6,40 | 5,29 | 0,69 | 5,41 | 6,88 | 4,03 |
| bsdtar | 0,34 | 13,67 | 11,48 | 1,86 | sortie erronée² | pas de chiffrement³ | pas de grand dictionnaire⁴ |
| 7-Zip | 0,30 | non pris en charge¹ | non pris en charge¹ | non pris en charge¹ | non pris en charge¹ | non pris en charge¹ | non pris en charge¹ |
| Bureau plus ancien, 20 cœurs | |||||||
| nzbfast | 0,16 | 0,57 | 1,83 | 0,15 | 1,50 | 1,51 | 1,40 |
| unrar 7.23 | 0,25 | 2,48 | 2,31 | 0,20 | 2,28 | 2,49 | 1,84 |
| rarpar | 0,28 | 3,15 | 3,00 | 0,31 | 2,26 | 2,26 | 1,97 |
| unar 1.10.7 | 0,67 | 7,49 | 6,93 | 0,85 | 6,85 | 8,49 | 5,29 |
| bsdtar | 0,33 | 15,58 | 13,97 | 2,18 | sortie erronée² | pas de chiffrement³ | pas de grand dictionnaire⁴ |
| 7-Zip | 0,33 | non pris en charge¹ | non pris en charge¹ | non pris en charge¹ | non pris en charge¹ | non pris en charge¹ | non pris en charge¹ |
| Portable, 14 cœurs / 20 threads, Windows⁵ | |||||||
| nzbfast | 0,35 | 1,05 | 2,92 | 0,32 | 2,32 | 2,22 | 2,04 |
| unrar 7.23 | 0,63 | 6,37 | 6,14 | 0,62 | 2,92 | 3,33 | 2,44 |
| rarpar | 0,74 | 11,58 | 9,76 | 0,54 | 2,72 | 2,85 | 2,38 |
| unar | pas de CLI⁵ | pas de CLI⁵ | pas de CLI⁵ | pas de CLI⁵ | pas de CLI⁵ | pas de CLI⁵ | pas de CLI⁵ |
| bsdtar | 0,81 | 16,72 | 15,14 | 1,13 | sortie erronée² | pas de chiffrement³ | pas de grand dictionnaire⁴ |
| 7-Zip | 0,76 | 5,45 | 5,79 | 0,65 | 4,21 | 4,13 | 2,51 |
| Portable, Apple M5 Max⁶ | |||||||
| nzbfast | 0,10 | 0,40 | 1,15 | 0,10 | 0,98 | 0,99 | 0,94 |
| unrar 7.22 | 0,16 | 1,94 | 1,87 | 0,15 | 1,75 | 1,91 | 1,52 |
| rarpar | 0,11 | 2,09 | 1,97 | 0,18 | 1,54 | 1,55 | 1,33 |
Où le champ n’a pas pu être en concurrence, et pourquoi. ¹ Le 7-Zip mis en duel ici est le paquet Homebrew, qui refuse chaque forme compressée avec ERROR: Unsupported Method et ne lit que la forme stockée sur macOS. Une version antérieure de cette page mettait ça sur le compte du binaire macOS de 7-Zip, ce qui était faux : Homebrew le compile sans le codec unRAR non libre, tandis que le binaire macOS que 7-zip.org livre porte le codec et décode les sept formes, comme le fait le binaire Windows. Remesuré le 14 août 2026. Si vous installez 7-Zip depuis le projet plutôt que depuis Homebrew, cette colonne ne décrit pas ce que vous avez. ² bsdtar n’a pas de support multi-volume RAR5 et a produit un fichier tronqué sans signaler d’erreur, donc cette manche est un échec de correction plutôt qu’un temps lent ; notre harnais l’a repéré en vérifiant la sortie, ce qui est pourquoi ça vaut la peine de vérifier la sortie. ³ bsdtar: Encryption is not supported. ⁴ bsdtar: Declared dictionary size is not supported. ⁵ unar ne livre aucun outil en ligne de commande pour Windows, donc le champ du portable est à cinq. ⁶ Le groupe M5 Max met en duel les trois outils qu’un lecteur macOS choisirait vraiment - unrar, rarpar et nous ; unar, bsdtar et 7-Zip n’ont pas été mis en duel sur cette machine. Son unrar est la 7.22, la version la plus récente qui y tourne sans surveillance.
Chaque forme sur chaque machine sauf une, et celle-là est une égalité. Les formes à correspondances courtes se ramènent à deux choses précises dans notre décodeur. Une correspondance de deux à trente-deux octets payait autrefois pour un appel complet dans la routine de copie mémoire de la plateforme, et l’appel coûtait plus que la copie ; copier trente-deux octets fixes via un registre à la place est pourquoi repetitive, solid et le dictionnaire 128 MiB - les trois formes construites à partir de correspondances courtes - sont toutes rapides d’un coup. Et la somme de contrôle tourne en aval du fil de l’écrivain plutôt que dessus. La seule cellule que nous ne gagnons pas franchement est la forme stockée sur le bureau 32 cœurs, où unrar et nous sommes à trois millisecondes d’écart sur une manche qui ne fait que déplacer des octets - identiques à la précision de ce tableau, donc les deux cellules sont marquées et c’est noté une égalité, pas une perte et pas une victoire.
La forme où nous gagnons le plus est celle qu’Usenet publie réellement par centaines à la fois : 400 petits fichiers, 4,3× et 4,4× contre unrar et 5,4× à 5,5× contre rarpar. C’est du parallélisme par membre, et c’est la différence entre un extracteur écrit pour une file de téléchargement et un écrit pour une ligne de commande. La forme stockée, dont le recensement ci-dessus dit qu’elle représente 84 % des octets sur le fil, est une quasi-égalité pour les trois outils sérieux, parce qu’à ce stade tout le monde ne fait que déplacer des octets.
Un choix qui vaut la peine d’être déclaré. Les archives sont empaquetées avec le compresseur épinglé à quatre threads. La découpe en blocs de RAR suit sinon le nombre de cœurs de quelle que soit la machine qui a empaqueté l’archive, donc un bureau 32 cœurs et un bureau 20 cœurs produisent des octets différents à partir de la même entrée et les machines cessent d’être comparables. L’épingler rend le corpus d’extraction identique octet pour octet partout, ce qui est le but, mais ça plafonne aussi la part du décodage qui peut tourner en parallèle - donc quand les deux formes les plus proches étaient des pertes nous les avons recourues contre des archives empaquetées avec les 32 threads, pour vérifier que l’épinglage n’en était pas la cause. Ce n’était pas le cas : solid est passé de 4,2 % en retard à 2,4 % en retard et le dictionnaire 128 MiB de 6,6 % à 6,3 %, le même classement dans les deux cas. Les deux sont maintenant des victoires sur le corpus épinglé par une marge plus large que ce que cette vérification pourrait expliquer.
Pourquoi il n’y a pas de ligne RAR4, et ce qui arrive à ces posts. Chaque forme ci-dessus est RAR5 ou RAR7, ce qu’Usenet publie aujourd’hui. Les anciennes archives RAR4 apparaissent encore, et le même moteur les lit, formes compressées et protégées par mot de passe comprises, dans la même passe unique que les plus récentes plutôt qu’en écrivant les volumes sur disque puis en les désarchivant après. Elles n’ont pas de ligne ici parce que le rar officiel 7.23 ne peut plus créer de RAR4, donc il n’y a pas de corpus neutre sur lequel mettre le champ en duel ; ce travail est vérifié contre des archives écrites par WinRAR 3.00 à la place, octet pour octet contre unrar.
Corpus : 1 GiB de charge utile aléatoire empaquetée en mode stocké dans 21 volumes RAR, puis deux jeux PAR2 à 10 % de redondance, l’un en blocs de 1 MiB et l’un en 64 KiB, puis des cartes de dégâts fixes. Chaque run utilise le même protocole : copie fraîche, lecture du corpus entier une fois pour chauffer le cache, puis chronométrage. Meilleur sur trois manches entrelacées ; chaque volume réparé est comparé au jeu intact à chaque manche. Plus bas est meilleur.
Une correction à propos du corpus, parce qu’une version antérieure de cette page l’a surestimé. Nous disions que chaque machine faisait tourner un corpus identique octet pour octet, vérifié par hachage. Hacher chaque volume de chaque jeu montre que c’est vrai du bureau 32 cœurs et du portable Windows, qui correspondent exactement, et pas du bureau 20 cœurs, qui tient un tirage aléatoire différent de la même forme : les mêmes 21 volumes aux mêmes tailles, les deux mêmes tailles de bloc, et les dégâts vérifiés aux mêmes 3, 101 et 1 500 blocs répartis sur le même nombre de fichiers. Chaque chiffre à l’intérieur d’une ligne est encore mesuré sur des octets que chaque outil de cette ligne partage, ce sur quoi repose chaque comparaison. Mais les lignes ne sont pas quatre vues d’une seule entrée, et puisque le caractère de la charge utile vaut environ 7 % pour le balayage d’un concurrent, ça vaut la peine de l’énoncer plutôt que de l’enjoliver.
Quel par2 est lequel. Le par2cmdline original est l’implémentation de référence dont tout le monde a forké. par2cmdline-turbo est le fork qui embarque les noyaux SIMD de champ de Galois écrits à la main de ParPar : c’est précisément ce que « turbo » veut dire, et c’est pourquoi turbo, plutôt que l’original, est l’outil qui vaut la peine d’être mesuré. Les deux colonnes turbo ci-dessous font tourner ces mêmes noyaux ParPar. Ce qui les sépare, ce n’est pas l’arithmétique mais la compilation et les options.
Confirmé sur la version livrée contre le rival actuel, 24 août 2026. Ces tableaux ont été mesurés avant que la 1.2.2 ne soit taguée et avant que par2cmdline-turbo ne sorte en 1.5.0 (20 août 2026), donc la colonne 20 cœurs a été recourue sur les deux : notre binaire de release 1.2.2 contre turbo 1.5.0, trois manches entrelacées par manche, chaque fichier réparé comparé au jeu intact. Les quatre manches se reproduisent - les nôtres à 0,18 / 0,30 / 0,75 / 2,02 contre les 0,19 / 0,33 / 0,74 / 2,07 imprimés ici, et turbo 1.5.0 atterrit à quelques pour cent près de la version du tableau sur chaque manche et les deux configurations. Les cellules restent telles que publiées ; les trois autres machines gardent leurs propres dates.
Donc la concurrence apparaît deux fois, et l’une de ces colonnes est son meilleur cas plutôt que son défaut. Le binaire de release que vous téléchargeriez est compilé pour un processeur générique de base et ne hache que quelques fichiers à la fois ; compiler la même source pour le processeur hôte réel et passer -T16 lui permet d’utiliser les instructions que cette machine a vraiment et de hacher seize fichiers à la fois. Sur le portable ça vaut jusqu’à 2,6x, entièrement dû à la compilation et aux options. Jugez-nous sur la colonne réglée, qui est la comparaison la plus dure ; la colonne telle que livrée est ce que vit vraiment quelqu’un qui la télécharge. par2cmdline est l’original, version 1.2.0, compilé depuis les sources sur chaque machine. rarpar est la propre implémentation PAR2 de Weaver, compilée depuis les sources avec son backend GPU Metal activé. Le par2j de MultiPar est Windows uniquement, donc il apparaît seul sur les lignes du portable Windows. Les lignes M5 Max mettent en duel les deux outils avec des binaires macOS arm64 actuels à côté des deux colonnes turbo ; par2cmdline classique n’a pas été mis en duel sur cette machine.
| secondes, jeu de 1 GiB | bureau, 32 cœurs | bureau, 20 cœurs | portable, 14 cœurs | portable, M5 Max |
|---|---|---|---|---|
| pas de dégâts - vérification propre | ||||
| nzbfast | 0,11 | 0,19 | 0,23 | 0,18 |
| par2-turbo, réglé | 0,31 | 0,38 | 0,42 | 0,28 |
| par2-turbo, tel que livré | 0,86 | 1,12 | 1,06 | 0,80 |
| par2cmdline | 3,03 | 3,84 | 3,81 | non couru |
| rarpar | 2,62 | 3,45 | 2,96 | 2,32 |
| MultiPar | Windows uniquement | Windows uniquement | 1,34 | Windows uniquement |
| 3 blocs endommagés - quelques articles morts | ||||
| nzbfast | 0,22 | 0,33 | 0,46 | 0,26 |
| par2-turbo, réglé | 0,51 | 0,66 | 0,78 | 0,48 |
| par2-turbo, tel que livré | 1,08 | 1,46 | 1,42 | 1,00 |
| par2cmdline | 3,64 | 4,58 | 4,98 | non couru |
| rarpar | 4,27 | 5,53 | 4,99 | 3,64 |
| MultiPar | Windows uniquement | Windows uniquement | 1,71 | Windows uniquement |
| 101 blocs endommagés | ||||
| nzbfast | 0,48 | 0,74 | 0,96 | 0,66 |
| par2-turbo, réglé | 0,88 | 1,17 | 1,40 | 0,85 |
| par2-turbo, tel que livré | 2,04 | 2,65 | 2,69 | 1,84 |
| par2cmdline | 5,57 | 7,57 | 11,7 | non couru |
| rarpar | 4,73 | 5,73 | 5,74 | 4,17 |
| MultiPar | Windows uniquement | Windows uniquement | 2,65 | Windows uniquement |
| 1 500 blocs endommagés - 91 % de la récupération utilisée | ||||
| nzbfast | 1,00 | 2,07 | 2,46 | 1,61 |
| par2-turbo, réglé | 3,00 | 5,52 | 6,73 | 4,07 |
| par2-turbo, tel que livré | 5,21 | 8,20 | 9,30 | 6,01 |
| par2cmdline | 67,7 | 86,1 | 403 | non couru |
| rarpar | 7,15 | 11,49 | 14,22 | 6,91 |
| MultiPar | Windows uniquement | Windows uniquement | 5,40 | Windows uniquement |
Les seize cellules nzbfast - quatre machines à quatre niveaux de dégâts - sont toutes à nous, plusieurs par plus de 2× contre la version réglée et de 2,3× à 7,7× contre celle que vous téléchargeriez réellement. Les cellules à dégâts lourds sont les plus intéressantes, et la note ci-dessous explique l’algorithme derrière elles.
L’original est de retour dans le tableau, et ça vaut la peine de voir pourquoi le fork existe. Une version antérieure de cette page avait retiré la colonne par2cmdline au motif qu’elle était plus lente que tout le reste de la manche, ce qui est vrai et n’est pas une raison suffisante : c’est l’implémentation dont presque tous les autres outils descendent, et les lecteurs méritent la référence plutôt que notre affirmation à son sujet. Au niveau de dégâts le plus lourd elle prend environ 69 s là où le fork SIMD prend 3,2 s et nous prenons 3,1 s. Ce facteur de vingt est tout l’argument pour les noyaux de champ de Galois écrits à la main, et c’est le même argument que nous faisons pour les nôtres.
Les dégâts légers sont le cas qui compte. Une poignée d’articles en échec est bien plus typique que 101 blocs morts, et rien de comparable à 1 500. La majeure partie d’une réparation légère n’est pas du tout les maths de Reed-Solomon, c’est la lecture et le MD5 d’un gigaoctet, ce qui est pourquoi la ligne à 3 blocs suit la ligne de vérification propre plutôt que les lignes de réparation.
Le niveau de dégâts le plus lourd est un genre de travail différent, et il reçoit un algorithme différent. Ce dernier niveau endommage 1 500 blocs sur les 21 volumes et consomme environ 91 % des données de récupération, ce qui est là où l’arithmétique de Reed-Solomon, plutôt que le hachage ou le disque, devient presque tout le travail. Le binaire livré calcule les réparations les plus lourdes avec une transformée en nombres théoriques plutôt que le pli classique en champ de Galois - les mêmes maths, évaluées sous une forme qui passe bien mieux à l’échelle sur un grand nombre de blocs : 2,7× devant la version réglée sur le bureau 20 cœurs, et sur le portable Windows 2,7× devant la version réglée et 2,2× devant MultiPar. Les dégâts légers font encore tourner le chemin classique, ce qui est pourquoi les autres niveaux ont à peine bougé : la transformée ne paye qu’au-delà d’environ 512 blocs endommagés, donc en dessous le répartiteur ne l’utilise pas.
Un chemin plus rapide ne vaut la peine que s’il ne peut pas se tromper. Les deux chemins calculent la même quantité et sont identiques bit à bit par construction, et chaque réparation de cette page a été vérifiée par la correspondance des fichiers reconstruits avec le jeu intact : 228 réparations chronométrées sur les machines de cette manche, zéro divergence. Le binaire livré ne se repose pas sur ce relevé. Chaque réparation vérifie sa propre sortie contre les empreintes des fichiers, et une qui échouerait serait refaite avec le chemin classique automatiquement, journaliserait la divergence, et garderait le chemin classique pour le reste de ce run. Le réglage est dans le tableau de bord sous Mode PAR rapide si vous préférez ne pas l’avoir du tout, et les machines avec trop peu de mémoire pour ça le déclinent d’elles-mêmes plutôt que d’essayer et d’échouer. Remesuré le 2 août sur la version actuelle : les deux bureaux atterrissent à quelques pour cent de ce tableau, et avec le Mode PAR rapide coupé le bureau 20 cœurs retombe exactement au temps plus lent du chemin classique, ce qui dit que la victoire tient à la méthode et non aux conditions.
La colonne du portable Windows avait besoin d’une correction, et elle va contre nous. Windows relègue le travail de fond soutenu sur ses cœurs d’efficacité après quelques secondes. Notre démon s’en exclut au démarrage et aucun des autres outils ne le peut, donc une version antérieure de cette page publiait leurs temps bridés comme s’ils étaient les temps propres des outils. Relancer cette machine avec chaque outil élevé en priorité haute déplace tout le champ : au niveau de dégâts le plus lourd par2-turbo passe de 22,4 s à 6,41 et rarpar de 59,2 s à 14,4, et pour une coupe de cette page ça a transformé la colonne de la nôtre en une que nous perdions. Toute la colonne du portable est mesurée ainsi maintenant - la correction reste même si la ligne a depuis été regagnée par le changement d’algorithme ci-dessus, parce que les temps du champ sur cette machine ne sont honnêtes qu’avec la limitation levée.
Quand PAR2 ne peut pas couvrir les dégâts, l’enregistrement de récupération à l’intérieur du RAR lui-même est la dernière ligne de défense. Jusqu’à la 1.0.8 la nôtre échouait sur toute archive au-delà d’environ 13 MB, donc cette manche ne pouvait pas être courue du tout. Les dégâts sont trois trous de 3 000 octets à 20 %, 50 % et 80 % de la région protégée. Les deux outils ont produit une sortie identique octet pour octet au fichier intact, et la nôtre est identique octet pour octet à ce que rar r écrit lui-même. Meilleur sur trois, bureau 32 cœurs, les deux outils recourus ensemble le 2 août.
| 16 MB | 32 MB | 128 MB | 512 MB | 2 GB | |
|---|---|---|---|---|---|
| nzbfast | 0,049 | 0,059 | 0,130 | 0,400 | 1,527 |
| rar 7.23 repair | 0,278 | 0,466 | 1,065 | 2,291 | 6,400 |
| avantage | 5,7× | 7,9× | 8,2× | 5,7× | 4,2× |
Une version antérieure de cette page montrait la taille 512 MB comme une perte, et l’expliquait comme le prix de traverser le volume par morceaux plutôt que de tout tenir en mémoire. Cette explication était correcte à l’époque et est maintenant obsolète : le coût était un CRC64 bit-série dans le chemin de réparation, remplacé par un tabulé, et la perte est partie avec. Il n’y a plus de croisement, et l’ensemble de travail borné a été gardé. La taille 2 GB est là parce que les volumes que rencontre vraiment un démon font 8 GB à 20 GB, pas 512 MB, et une manche qui s’arrête sous la plage réelle n’est pas un grand test.
Ce qui a bougé cette coupe, et le contrôle qui le dit. Trouver quels blocs sont endommagés était devenu la phase la plus grande de cette réparation - plus grande que l’arithmétique de réparation elle-même - et tournait sur un seul thread, lisant 64 KB de chaque groupe à travers le fichier, une fois par groupe. Ça fait maintenant une passe séquentielle unique dans l’ordre du fichier avec les sommes de contrôle par éclat calculées en parallèle, et le volume réparé est cloné plutôt que copié là où le système de fichiers peut le faire. La détection seule est tombée d’environ 300 ms à 18 ms sur l’archive 512 MB, ce qui est l’essentiel de ce qui a bougé ci-dessus. Le contrôle est la colonne à côté de la nôtre : rar r a été recouru dans les mêmes manches sur la même machine et est revenu à quelques pour cent de ses temps précédents, donc le changement dans l’écart est le nôtre et pas celui du banc.
Le M5 Max répète le motif, couru le 31 juillet avec le même corpus et les mêmes gardes : 0,050 / 0,066 / 0,171 / 0,581 s contre les 0,211 / 0,335 / 0,751 / 1,735 de rar r sur les tailles de 16 MB à 512 MB - 3,0× à 5,1× plus rapide ; la taille 2 GB n’a pas été mise en duel sur cette machine. Ces chiffres précèdent la refonte de détection décrite ci-dessus, donc ce sont ceux de la version plus ancienne, gardés ici comme la deuxième machine plutôt que comme un chiffre actuel.
Le rarpar de Weaver est absent de ce tableau seul, et pas par choix : il n’implémente pas cette réparation. Invité à réparer une de ces archives il répond « embedded Rar5 recovery record detected ... this API restores standalone .rev recovery volumes only and does not consume embedded RR/protect data », et laisse le fichier endommagé. Il apparaît dans chaque autre comparaison de cette page : les quatre manches PAR2 ci-dessus, les sept formes d’extraction avant ça, et la manche de volumes de récupération immédiatement ci-dessous, qui est le travail qu’il dit faire - et qu’il gagne.
.rev entiers manquantsL’autre moitié de l’histoire de récupération propre à RAR, et jusqu’à cette manche la plus grosse perte de cette page. Un fichier .rev est un volume de récupération autonome : trois d’entre eux à côté d’un jeu de 21 volumes peuvent reconstruire trois volumes quelconques qui ne sont jamais arrivés. Corpus : 1 GiB stocké dans 21 volumes de 50 MB avec rar rv3, puis les volumes 4, 11 et 19 supprimés - trois perdus contre trois volumes de récupération, ce qui est le pire cas que le jeu puisse encore survivre. Meilleur sur trois, chaque volume reconstruit comparé au volume intact.
| bureau, 32 cœurs | bureau, 20 cœurs | |
|---|---|---|
| nzbfast | 0,44 | 0,50 |
rar 7.23 rc | 0,46 | 0,58 |
rarpar restore-volumes | 0,48 | 0,61 |
La cellule 32 cœurs ici était à 3,12 s contre les 0,47 de rar rc dans la coupe précédente de cette page, publiée comme 6,6× plus lente et le pire chiffre qui s’y trouvait. La cause était la résolution d’effacement tournant à environ 48 MB/s de sortie reconstruite là où celle de RARLab en tenait 320 ; elle tourne maintenant sur la même arithmétique tabulée que le reste du code de récupération, ce qui est une amélioration d’un facteur sept et transforme la perte en victoire sur les deux machines. Les marges sont de 3 % et 14 %, donc c’est une victoire à énoncer platement plutôt qu’à mettre en avant, et la raison pour laquelle elle est énoncée du tout est que la perte l’a été en premier.
Cette manche existe parce que le rarpar de Weaver implémente exactement ça et a demandé à être mesuré dessus. Il gagnait confortablement quand nous l’avons publié pour la première fois, et nous l’avons publié à l’époque pour cette raison.
La correspondance de fichiers n’a jamais été le coût, ce qui vaut la peine d’être noté parce que c’était le suspect intuitif : les volumes de récupération ne portent aucun nom de fichier, donc nous identifions quels emplacements ont survécu en calculant la somme de contrôle de chaque volume sur disque plutôt qu’en faisant confiance à leur nom, et contre un jeu intact, où la correspondance est tout ce qui se passe, la passe entière prend 0,18 s.
Ce qui a bougé d’autre, et où ça ne se voit pas. Deux autres changements de moteur ont atterri que ces corpus ne peuvent pas voir, listés ici pour que les chiffres ci-dessus ne soient pas lus comme toute l’histoire : les archives RAR5 comptant des dizaines de milliers de membres résolvent chaque membre une fois plutôt que de parcourir la liste par worker, ce qui est 3× moins de temps processeur à 40 000 membres ; et le lecteur de bits RAR1.3 travaille un mot à la fois, ce qui est 2×. Aucun n’apparaît ci-dessus, parce que les formes ici ont 400 membres et pas de RAR1.3.
Ce que nous ne faisons délibérément pas : nous ne créons jamais de PAR2. Un téléchargeur n’a aucune raison de le faire, et ParPar possède cette manche. Nous achetons aussi de la vitesse avec de la mémoire sur les deux moteurs : l’extraction culmine autour de 240 MB contre les 41 MB d’unrar, et la vérification autour de 126 MB contre les 7 MB de turbo, parce que ce sont les moteurs en ligne qui accompagnent un téléchargement en direct plutôt que des exécutions autonomes ponctuelles. La forme à dictionnaire de 128 MiB est le pire cas, à environ 304 MB contre les 139 MB d’unrar. La réparation la plus lourde coûte maintenant de la mémoire aussi : la méthode plus rapide pour 512 blocs manquants et plus travaille depuis les données de récupération tenues en résidence, donc elle est autorisée jusqu’à un quart de la RAM de la machine, plafonnée à 4 GB, et une machine qui ne peut pas se le permettre prend tranquillement la méthode basse mémoire à la place - la même arithmétique et les mêmes temps que les lignes du milieu du tableau PAR2, juste pas le 3× de la dernière. Si vous voulez la plus petite empreinte résidente possible pour une tâche autonome, les outils dédiés gagnent encore cette colonne.
Des capacités, pas des micro-benchmarks
| nzbfast | SABnzbd 5 | NZBGet 26 | rustnzb | Weaver | Usenapp | Newsbin | |
|---|---|---|---|---|---|---|---|
| NNTP en pipeline | oui | désactivé par défaut | non | oui | -⁷ | - | - |
| vérification complète pendant le téléchargement | chaque bloc | après | vérif. rapide | après | après | après | après |
| extraction pendant le téléchargement | en flux, aucun volume sur disque | désarchivage direct⁴ | désarchivage direct⁴ | met en scène, puis désarchive⁵ | non | non | non |
| disque nécessaire pour un post de N GB | ~1×N | ~2×N | ~2×N | ~2×N | ~2×N | ~2×N | ~2×N |
| verdict de complétude avant téléchargement | exact au bloc près | non | % de santé | non | -⁷ | vérification d’article | non |
| mémoire bornée (jamais de swap) | budgétée | réglage de limite de cache | réglage de cache | non | non | - | - |
| relève sa propre limite de fichiers ouverts | oui, au démarrage | -⁸ | -⁸ | -⁸ | -⁸ | -⁸ | -⁸ |
| vérifier le fichier à tout moment pendant le téléchargement | oui | non | non | non | non | séquentiel | non |
| indexeur intégré + mur d’affiches | oui, sans clé | non | non | non | non | interface de recherche | navigateur de groupes |
| compatible Sonarr/Radarr | API SAB + Newznab | native | native | API compatible SAB | RPC compatible NZBGet⁷ | non | non |
| télécommandes mobiles (nzb360/LunaSea) | oui | oui | oui | non | -⁷ | non | non |
| liste de suivi : capture auto + mises à niveau | intégré | via *arr | via *arr | non | non | Watchdog | règles |
| binaire unique autonome | oui | app bundles ; Python sur Linux | oui | oui | oui | .app | .exe |
| open source | GPL⁶ | GPL | GPL | MIT | oui | payant | payant |
| plateformes | mac/win/linux (x64 + ARM)/docker/flatpak | mac/win/linux/docker/paquets NAS | mac/win/linux/docker/NAS + embarqué | linux/win (mac depuis les sources) | binaire mac ; sources ailleurs⁷ | mac uniquement | win uniquement |
⁴ Le désarchivage direct matérialise quand même les volumes d’abord : 2× écritures et 2× disque. ⁵ rustnzb 1.4.5 livre chaque scénario correct octet par octet dans la manche du 23 août 2026, et son E/S disque mesurée y est d’environ 2,1x la charge utile - donc il met en scène les volumes et désarchive après le téléchargement plutôt que d’extraire en flux (voir les tableaux de coût). Ses versions plus anciennes (1.3.4-1.3.9) livraient des volumes obfusqués marqués « Completed » sans extraire ; cet échec est corrigé en amont dans la 1.4.5. ⁶ GPL-3.0-or-later. ⁷ Weaver 0.7.8, le binaire livré le plus récent, identité prouvée par hachage (le sha256 de l’archive de release publiée et le binaire à l’intérieur correspondent tous deux à ce que nous mettons en duel) ; ses lignes mesurées viennent de la manche de coût du 23 août, ses cellules de capacité marquées « - » sont des fonctionnalités que nous n’avons pas évaluées plutôt que des absences confirmées ; il parle un RPC compatible NZBGet, ce qui est comment notre harnais le pilote, mais nous n’avons pas essayé les télécommandes mobiles contre lui. Usenapp/Newsbin sont des lecteurs commerciaux mono-plateforme avec des fonctionnalités de téléchargeur ; ils sont listés parce qu’on nous le demande, pas parce qu’ils rivalisent en vitesse.
⁸ macOS démarre un programme avec une limite de 256 fichiers ouverts, et un jeu complet de connexions sur plusieurs serveurs peut la dépasser. nzbfast relève sa propre limite au démarrage sur macOS et Linux : il demande 65 536, redescend par paliers jusqu’à ce que le système accepte, ne dépasse jamais la limite dure du système, et continue avec ce qu’il avait si chaque palier est refusé. Windows n’a aucune limite par processus de ce genre. Les autres colonnes sont non évaluées plutôt que des absences confirmées : nous n’avons lu le code de démarrage d’aucun autre client. Ça vaut la peine de le savoir à cause de la façon dont ça échoue : un programme qui manque de fichiers ouverts en cours de tâche a tendance à disparaître plutôt qu’à signaler une erreur.
Preuve de transport · mesuré sur la 1.2.2
Des coupes antérieures de cette page portaient un ensemble plus large de démonstrations de transport - runs de saturation multi-ligne, gains de pipelining par RTT, une preuve de contre-pression, des mesures de plafond de décodage - courues sur des versions que la v1.2.2 a depuis dépassées. Sous la règle de cette page elles sont retirées plutôt que laissées à vieillir, et reviennent à mesure qu’elles sont recoupées sur la release actuelle ; les trois affirmations ci-dessus sont celles déjà remesurées sur v1.2.2.