Cinco clientes, o mesmo hardware e os mesmos provedores, execuções intercaladas para que a deriva do provedor se cancele. A métrica é tempo até um arquivo utilizável - baixado, verificado, extraído - medida junto com o disco, o espaço livre e a memória que o trabalho custa a você. Cada tabela nomeia os builds contra os quais correu e o dia em que rodou. Inclui os legs que não vencemos.
Nesta página
A versão curta · medido em 23 de agosto de 2026 na linha de código que saiu como nzbfast 1.2.2
As rodadas mais recentes desta página correram em 23 e 24 de agosto de 2026 - a mais recente delas no próprio build de lançamento v1.2.2 - contra os builds atuais de outros quatro clientes no mesmo hardware, linhas e provedores: duas formas de trabalho de 6,5 a 87 GB, e taxas de linha de 250 Mbit a 10 GbE. Nessas rodadas nenhum cliente foi mais barato que o nzbfast em processador, memória e disco juntos: cada um custa mais em pelo menos dois dos três, o máximo que qualquer um deles economizou em qualquer eixo isolado foi cerca de 2 por cento - um empate estatístico, dentro da própria variação entre execuções desse cliente - e em disco cada um deles moveu pelo menos o dobro dos bytes para um resultado byte a byte idêntico. Como distribuído, o nzbfast também segurou a menor memória de todo cliente medido, em cada fixture, por 2,0x a 4,5x contra o rival mais próximo.
Qual desses é você?
A maioria dos downloaders escreve seu download no disco pelo menos duas vezes: uma enquanto baixa, outra enquanto desempacota. O nzbfast faz o trabalho inteiro em uma passagem única, então escreve cerca de metade dos bytes por trabalho, retém menos em memória enquanto trabalha, e gasta menos segundos de processador por GB. Isso é menos carga na máquina enquanto você a usa e metade das escritas por trabalho nos seus discos, para os mesmos arquivos byte a byte idênticos - e porque cada byte cruza o disco cerca de uma vez, seu disco só precisa acompanhar sua linha uma vez.
O nzbfast não vence toda tabela desta página, e as que perde estão em os legs que não vencemos - incluindo um desta mesma rodada. O que se manteve em toda rodada que medimos foi a conta combinada.
Metodologia primeiro
pipelining_requests=8 (ele é distribuído com 1, ou seja, sem pipelining, e o ajuste vale porcentagens de dois dígitos em trabalhos grandes), o NZBGet recebeu ArticleCache/DirectWrite/DirectUnpack/ParQuick, o rustnzb sua configuração documentada. Desde 20 de agosto de 2026 cada rodada corre com cinco provedores em vez de seis - o número de provedores não é uma alavanca de throughput nessas máquinas, onde um único provedor sozinho já alcança o teto da linha, e um conjunto fixo mantém as rodadas comparáveis - então um número de seis provedores nesta página não é diretamente comparável com um número mais novo de cinco provedores, e cada tabela diz qual dos dois rodou.A rodada de 23 de agosto de 2026
Seis braços em uma máquina Apple Silicon de 20 núcleos em uma linha de 1 Gbit: o nzbfast nas predefinições de fábrica, o mesmo binário com seu regulador de conexões desligado, e os builds atuais dos outros quatro clientes. Cinco provedores, TLS em todo lugar, três repetições por cliente por fixture com a ordem alternada dentro de cada rodada, e a saída de cada leg verificada byte a byte: 36 de 36 legs produziram o payload exato. A 1 Gbit a linha dita o ritmo e os tempos de término convergem por definição, então a coluna de tempo está lá para mostrar essa convergência; as colunas de recursos são o que a rodada existe para medir.
Um ajuste importa e é declarado em vez de escondido: as predefinições de fábrica agora incluem um regulador de conexões sensível à linha, e nessa linha ele segurou 25 conexões enquanto cada outro cliente rodou suas centenas configuradas. A linha "regulador desligado" liga os mesmos 360 sockets que nossas rodadas mais antigas usavam, então as duas comparações permanecem disponíveis: o produto como o leitor o recebe, e o experimento histórico.
| release nomeado de 6,5 GB, extração no caminho | tempo até arquivo utilizável | memória de pico (RSS) | tempo de CPU | E/S de dispositivo (GiB) | rede (GB) |
|---|---|---|---|---|---|
| nzbfast, distribuído (25 conexões) | 58 s | 143 MB | 35,7 s | 6,2 | 6,5 |
| nzbfast, regulador desligado (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 ofuscado de 34 GB | tempo até arquivo utilizável | memória de pico (RSS) | tempo de CPU | E/S de dispositivo (GiB) | rede (GB) |
|---|---|---|---|---|---|
| nzbfast, distribuído (25 conexões) | 302 s | 191 MB | 194,0 s | 32,5 | 34,4 |
| nzbfast, regulador desligado (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 |
Medido em 23 de agosto de 2026 contra SABnzbd 5.1.1, NZBGet 26.3-testing, rustnzb 1.4.5 e Weaver 0.7.8, medianas de três com cada leg verificado byte a byte, cinco provedores, tudo TLS. Os braços do nzbfast rodaram um build da mesma linha de código, feito mais cedo naquele dia, cerca de sete horas antes do build de lançamento v1.2.2, por isso suas linhas não trazem número de versão; as tabelas de 500 Mbit e 87 GB desta página correram de fato o build de lançamento e dizem isso. ¹ A mediana de CPU do Weaver no fixture de 6,5 GB é 2% abaixo da nossa (34,9 contra 35,7) com seus próprios três legs variando de 34,1 a 56,1 s, então leia como um empate estatístico; é a única célula em qualquer uma das duas tabelas que um rival segura, e ela é repetida em os legs que não vencemos. No fixture de 34 GB nosso CPU é o mais baixo de forma absoluta. O 0.8.3 mais novo do Weaver não distribui binário; nosso build a partir do código-fonte dele mediu um padrão de processador que não conseguimos atribuir com clareza à versão em vez de ao build, então esta tabela corre o release 0.7.8 comprovado por hash e diz isso em vez de publicar um número confundido. O rustnzb 1.4.5 completou cada leg aqui, incluindo o fixture ofuscado.
A coluna de rede, com precisão. 6,5 GB no fixture limpo - o mesmo número que o NZBGet e o SABnzbd informam para si mesmos. O pior caso que conhecemos é um post ofuscado deliberadamente renumerado, onde contornar a numeração embaralhada custa um artigo extra por desvio: medido em 1,10-1,20x o plano mínimo nas duas formas assim que conseguimos construir. As células de 7,2 e 37,8 GB do rustnzb são o excesso dele mesmo, com um aviso em seu log em dois legs.
O que a coluna de memória significa nas predefinições: o regulador é a maior parte do motivo pelo qual a linha distribuída segura 143-191 MB - menos conexões é menos coisa em trânsito - e desligá-lo (a segunda linha) é a ponte honesta para toda tabela mais antiga de 360 sockets nesta página. Mesmo a 360 sockets estamos no mesmo nível do rival mais enxuto (583 MB contra os 628 do rustnzb no fixture pequeno, 465 contra seus 445 no grande); nas predefinições de fábrica não sobra empate nenhum.
Linhas mais lentas · medido em 24 de agosto de 2026 no nzbfast 1.2.2
Em uma linha lenta o suficiente, o tempo de término de cada cliente é o fio da rede e nada mais, então uma linha lenta esconde muitos pecados. O que ela não consegue esconder é o que cada cliente queima para preenchê-la. Moldamos o equipamento de 1 Gbit para duas taxas que planos reais realmente têm e corremos os seis braços em cada uma - a mesma máquina, os mesmos cinco provedores, três repetições por cliente com a ordem alternada, cada leg verificado byte a byte, 36 de 36 corretos nas duas rodadas. O braço do nzbfast a 500 Mbit é o próprio build de lançamento v1.2.2.
| linha de 500 Mbit, release de 6,5 GB | tempo até arquivo utilizável | memória de pico (RSS) | tempo de CPU | E/S de dispositivo (GiB) |
|---|---|---|---|---|
| nzbfast 1.2.2, distribuído | 109 s | 142 MB | 45,4 s | 6,2 |
| nzbfast 1.2.2, regulador desligado | 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 |
| linha de 250 Mbit, o mesmo release | tempo até arquivo utilizável | memória de pico (RSS) | tempo de CPU | E/S de dispositivo (GiB) |
|---|---|---|---|---|
| nzbfast, distribuído | 217 s | 144 MB | 53,3 s | 6,2 |
| nzbfast, regulador desligado | 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 |
Leia as duas tabelas como um gradiente. A 250 Mbit o campo inteiro fica dentro de 18% no relógio e lideramos o rival mais próximo por 4,4%; a 500 Mbit o intervalo abre para 14,7%; nas taxas de gigabit e 10 GbE nas tabelas acima e abaixo ele abre mais ainda. As diferenças de velocidade crescem com a linha. As colunas de recursos não esperam por uma linha rápida: em cada taxa medida, cada rival segurou pelo menos 3,9x a memória, gastou mais processador, e moveu cerca do dobro dos bytes de disco para o mesmo arquivo byte a byte idêntico.
O regulador de conexões se paga em linhas lentas, e o próprio contador de descartes do formatador de linha diz por quê. As predefinições de fábrica seguraram 25 conexões onde cada rival rodou centenas; o mesmo binário com o regulador desligado rodou 360. Menos fluxos por uma fila fixa significa menos perda e menos reenvio: o formatador registrou cerca de 4.200 descartes por leg limitado contra cerca de 155.000 sem limite a 500 Mbit, e o braço limitado foi mais rápido, 4,2x mais leve em memória e 1,3x mais leve em CPU que nossa própria postura de 360 sockets. Mais conexões não é mais velocidade; abaixo de um gigabit é mensuravelmente o oposto.
Medido em 24 de agosto de 2026, medianas de três, em uma máquina Apple Silicon de 20 núcleos com sua linha moldada para cada taxa (a taxa moldada verificada por uma sonda independente antes de cada rodada: 248 e 496 Mbit). O braço nzbfast de 500 Mbit é o build da tag de lançamento v1.2.2; a rodada de 250 Mbit rodou horas antes na mesma linha de código. Contagens de bytes em uma linha moldada são lidas do próprio contador de cada cliente, nunca da interface de rede (o formatador descarta e o TCP reenvia, então a interface conta as duas cópias). Os relógios são comparáveis dentro de cada tabela, não entre rodadas moldadas de formas diferentes. ¹ Os três legs do NZBGet a 500 Mbit variaram de 114-158 s com leituras de recursos estáveis - uma variação genuína, então a mediana é citada e a variação é declarada em vez de reduzida.
O arquivo grande · medido em 24 de agosto de 2026 no nzbfast 1.2.2
O outro extremo da história de taxa de linha: uma máquina 10 GbE, cinco provedores, um post de 87 GB cujo payload é um único vídeo de 76,6 GB, seis braços, três repetições alternadas, e a saída de cada leg verificada byte a byte - 18 de 18 legs produziram o arquivo idêntico, todos os seis clientes concordando quanto ao seu checksum. Os braços do nzbfast são o build de lançamento v1.2.2.
| post de 87 GB, 10 GbE | tempo até arquivo utilizável | memória de pico (RSS) | tempo de CPU | E/S de dispositivo (GiB) | rede (GB) |
|---|---|---|---|---|---|
| nzbfast 1.2.2 (50 conexões)¹ | 70 s | 415 MB | 144 s | 72,9 | 77,2 |
| nzbfast 1.2.2, regulador de conexões ligado (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 |
A história do disco na sua maior escala até agora. Nosso pico de disco durante o trabalho é 70,8 GiB - ABAIXO da saída de 76,6 GB, porque a cauda do payload ainda está chegando enquanto a cabeça já está finalizada - e a E/S de dispositivo total é 1,00x o payload. Os rivais movem de 2,5x a 6,0x os bytes para o mesmo arquivo. E o braço mais rápido sustenta cerca de 8,7 Gbps incluindo a verificação e a extração em fluxo; no momento em que a barra de download se enche, o arquivo está pronto.
¹ Cada cliente nesta página é corrido em seus ajustes documentados como melhores, e em uma linha 10 GbE o nosso é 50 conexões totais - 10 por servidor, um ajuste que qualquer nível de conta alcança - o mesmo ajuste de um único parâmetro que damos a cada rival (o pipelining do SABnzbd, o cache de artigos do NZBGet). Cinquenta não é uma desvantagem: uma varredura de seis degraus neste mesmo fixture encontrou o teto idêntico de 50 conexões até o máximo das contas de 360, enquanto o custo de processador sobe 2,3x nesse intervalo sem ganhar nada, então os máximos não compram nada que esta tabela mostraria. A linha de 50 conexões foi então remedida com qualidade completa de três repetições no mesmo dia, na mesma máquina, contra o mesmo checksum de saída: 70 / 70 / 70 s, todos os três verificados byte a byte. A linha do regulador está aqui porque é a mais interessante: em qualquer taxa até um gigabit suas 25 conexões são de graça-para-mais-rápido, e mesmo aqui, onde custam cerca de um quinto do relógio, elas compram 336 contra 415 MB de memória e 130 contra 144 segundos de CPU. Escalar o regulador com a taxa da linha automaticamente - para que o melhor comportamento também seja o padrão, no joelho da curva em vez do máximo - está na fila para o próximo lançamento. ² Os 435 GiB de E/S de dispositivo do Weaver para um download de 77 GB são o armazenamento criptografado em repouso dele relendo e reescrevendo quase tudo à medida que o trabalho cresce - o padrão superlinear que nossas rodadas instrumentadas de julho mediram, ainda presente no build atual. ³ O rustnzb 1.4.5 completa com bytes corretos e seu custo é tempo de processador e rede: cerca de 2.444 segundos de CPU contra um relógio de 869 s nas três repetições, e 86,9 GB puxados onde o plano ávido é 77,2 (ele busca o conjunto de recuperação completo incondicionalmente). Medido em 24 de agosto de 2026, medianas de três, cada build atual; a repetição 3 dos três braços mais rápidos rodou ~40 minutos depois do resto (uma proteção de espaço livre pausou a rodada; o deslocamento não moveu nenhuma mediana mais do que a variação entre repetições).
Desde esta rodada, a linha do regulador foi superada pelo que a 1.2.3 entrega. Medida em 26 de agosto de 2026 no mesmo fixture, na mesma máquina e na mesma linha de 10 GbE, seis legs corretos byte a byte contra a soma de verificação desta tabela: 71 s nos ajustes de fábrica, 322 MB e 139,3 segundos de processador, contra os 90 s acima. Foi uma rodada só de nzbfast sobre um build posterior, então é declarada aqui em vez de corrida na tabela: cada linha acima vale como foi medida em 24 de agosto.
O primeiro cliente comercial nesta página: Newsbin Pro, o cliente pago mais antigo ainda ativo no Windows, corrido contra nosso build oficial do Windows em uma máquina Windows nativa de 10 GbE cujo disco de sistema TLC sustenta 0,99 GB/s de escritas - o disco mais lento da nossa frota de testes, o que a torna o lugar honesto para correr contra um cliente de estágios. O mesmo post de 87 GB, três repetições intercaladas, a saída de cada leg verificada byte a byte contra o mesmo checksum da tabela acima: 6 de 6 idênticos.
| post de 87 GB, Windows, disco TLC | tempo até arquivo utilizável | memória de pico (RSS) | tempo de CPU | E/S de dispositivo (GiB) | rede (GB) |
|---|---|---|---|---|---|
| nzbfast 1.2.2 (50 conexões) | 105 s | 469 MB | 154 s | 84,5 | 76,7 |
| Newsbin Pro 6.90 (360 conexões) | 477 s | 881 MB | 1.862 s | 154,1 | 76,7 |
Medido em 24 de agosto de 2026, medianas de três, os dois clientes atuais. O Newsbin rodou em seu próprio máximo de conexões por servidor configurado - 360 sockets contra nossos 50 - e seus tempos excluem o acomodamento de 90 segundos que nosso harness espera antes de declarar um cliente observado como terminado, então a comparação pende a favor dele duas vezes e o resultado se sustenta mesmo assim: 4,5x o relógio, 12x os segundos de CPU, e 1,9x a memória para o arquivo idêntico. Nenhum dos lados está limitado por disco aqui - o braço de passagem única precisa de cerca de 0,73 GB/s dos 0,99 do disco, e o Newsbin faz a média de um terço disso enquanto mantém quase quatro núcleos de processador ocupados por oito minutos - então a diferença é o cliente, não o hardware. Os dois clientes puxaram os mesmos bytes de rede para o payload. Newsbin é uma marca registrada da CMCE, Inc.; o cliente é publicado pela DJI Interprises, LLC.
O censo
Repesado em agosto de 2026 sobre uma população muito maior. O censo de julho abaixo olhou dois grupos; o índice por trás dele agora tem 13,2 milhões de releases e 174,7 TB em 114 grupos, e a mistura mudou - os arquivos 7z cresceram de menos de 2% dos bytes para uma parcela relevante. Remedido sobre essa população, cerca de 95% dos bytes de release completo passam em uma passagem única (94,3% a 96,3% em quatro formas diferentes de cortar a população), e o qualificador que realmente importa não é a forma do arquivo mas a senha: cerca de um terço dos bytes precisam de uma para produzir alguma saída, seja qual for o cliente que você rodar. O instantâneo de julho fica abaixo como o instantâneo que é.
Para o censo de julho olhamos 890.852 releases, 1,6 milhão de arquivos e 79,6 TB nos dois grupos mais movimentados de filmes e séries, depois buscamos e lemos os cabeçalhos de arquivo de mil posts reais para confirmar o que os nomes de arquivo só sugeriam. Contado em bytes em vez de em posts, porque um milhão de arquivos pequenos importa menos que um grande.
Isso remodelou no que trabalhamos. Não há muito sentido em ajustar um caminho de compressão que carrega 1,4% dos dados, então ajustamos os dois que carregam o resto.
A criptografia também não está distribuída uniformemente. Ela escala com o tamanho:
| Tamanho do release | Parcela de todos os dados | Armazenado | Criptografado |
|---|---|---|---|
| 1-5 GB | 29% | 94% | 2% |
| 5-20 GB | 39% | 97% | 2% |
| 20-60 GB | 20% | 67% | 33% |
| acima de 60 GB | 12% | 51% | 49% |
Downloads comuns são quase sempre arquivos armazenados simples. Os grandes são cara ou coroa entre armazenado e criptografado. A forma armazenada é a que toda tabela atual nesta página corre; a história de disco da forma criptografada é medida em sua própria seção abaixo.
O post danificado · recorrido em 24 de agosto de 2026, cada build atual
Artigos expiram, servidores os descartam silenciosamente, uploads chegam incompletos - e o dano é onde a diferença entre clientes é maior, então ganha sua própria rodada no build mais novo de cada cliente, incluindo o nzbfast v1.2.2: máquina 10 GbE Europa, cinco provedores, 100 conexões por cliente, o mesmo release de 6,5 GB envenenado em três níveis de dano, três repetições por braço com a ordem alternada, cada leg verificado byte a byte contra o arquivo limpo. 63 de 65 legs voltaram byte a byte idênticos; os dois que não voltaram estão nomeados abaixo, porque são resultados.
| tempo até um arquivo verificado e utilizável (média de 3) | 60 artigos mortos | 20 mortos | 5 mortos |
|---|---|---|---|
| nzbfast 1.2.2 | 13,0 s | 10,0 s | 8,7 s |
| nzbfast 1.2.2, reparo antecipado desligado | 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ão terminou³ | não terminou³ | 194,0 s |
Por que o post danificado é rápido aqui. Quando um artigo está faltando, um cliente normalmente pergunta ao próximo servidor, depois ao próximo, até que todo servidor tenha recusado - uma caminhada serial cujas recusas levam de dezenas de milissegundos a alguns segundos cada, durante a qual o download fica em zero. O nzbfast para de perguntar: assim que os dados de paridade já em mãos cobrem o que ainda está faltando, ele repara imediatamente em vez de terminar a caminhada. Essa é a segunda linha - o mesmo binário com esse comportamento desligado é de 1,4x a 2,3x mais lento dependendo do dano - e a rodada verificou que o mecanismo engatou em cada leg habilitado e nunca em um desabilitado. Contra o rival mais próximo a margem é de 2,4x a 2,7x, sem sobreposição em nenhum dos nove pares de repetição.
Disco é onde a margem é maior, e não é o truque do reparo. Cada braço que completou produziu o mesmo arquivo de 6,48 GB; o nosso moveu 6,2-6,8 GB de E/S de disco fazendo isso, o NZBGet 12,7-18,5 GB, o SABnzbd 13,9-20,3 GB e o rustnzb 12,8-13,1 GB. Isso é o pipeline de passagem única - a linha desligada move os mesmos 6,2 GB - então ele se mantém tanto em posts danificados quanto intactos.
¹ Os três legs do SABnzbd no dano mais pesado rodaram 43, 41 e 60 s - uma variação genuína em entradas idênticas, então a média é citada com o intervalo declarado. ² O rustnzb 1.4.5 entregou cada leg com bytes corretos, e seu custo está no tempo de processador e não na confiabilidade: cerca de 1.620 segundos de CPU contra um relógio de 107 s no dano mais pesado - cerca de quinze núcleos ocupados durante todo o leg - onde a mesma saída reparada nos custa cerca de 50 segundos de CPU. ³ O Weaver moveu 1,5 GB e 4,9 GB dos 6,5 dentro do nosso corte de 20 minutos nos dois níveis de dano mais pesados - o mesmo não-término nas três rodadas que já o correram, em três noites separadas. Nos 5 artigos mortos ele completou corretamente as três vezes. Seu custo de processador ali é sua própria história: cerca de 2.325 segundos de CPU para o leg de 194 s, contra os nossos 20.
Medido em 24 de agosto de 2026, todos os builds atuais: nzbfast v1.2.2 (a própria tag de lançamento), NZBGet 26.3-testing (build de 20 de agosto), SABnzbd 5.1.1, rustnzb 1.4.5, Weaver 0.7.8. Um braço de continuidade correu o build do nzbfast da noite anterior dentro desta mesma rodada e caiu a menos de um segundo da v1.2.2 em cada fixture, então nada aqui depende de uma noite de sorte; e as configurações dos rivais diferem das da rodada anterior apenas no caminho do aplicativo, verificadas parâmetro por parâmetro antes de a rodada rodar.
A coluna honesta
Esta seção existe para os legs que um rival vence, e é remedida a cada rodada em vez de curada: qualquer coisa que percamos vai aqui, nomeada, ao lado da tabela que mostra isso. No build atual, nesta rodada, ela está vazia de perdas de velocidade - o que vale a pena tratar com cautela em vez de com satisfação, então as trocas que restam estão declaradas abaixo.
O que não desapareceu é a troca por trás desses números, então é isso que esta seção diz agora: gastamos mais memória do que as ferramentas independentes gastam, e o caminho rápido de reparo pesado gasta a mais. Nosso extrator e reparador são construídos para acompanhar um download ao vivo em vez de rodar uma única vez a partir de uma linha de comando, e isso custa memória residente; o detalhe está ao lado das tabelas de componentes. Se sua restrição é a menor pegada possível para um trabalho único, as ferramentas dedicadas vencem essa coluna e não vamos fingir o contrário.
E a rodada de 23 de agosto de 2026 acrescenta uma entrada, que preferimos listar aqui do que deixar em uma nota de rodapé: no fixture de 6,5 GB, a mediana de processador do Weaver está 2% abaixo da nossa - 34,9 contra 35,7 segundos de CPU, com seus próprios três legs variando de 34,1 a 56,1 s - então chamamos de empate estatístico, e ela fica em a tabela de custo marcada como a única célula que não seguramos. No fixture de 34 GB na mesma rodada nosso CPU é o mais baixo de forma absoluta.
Privado de RAM · medido em 24 de agosto de 2026 no nzbfast 1.2.2
O mesmo trabalho de 87 GB da rodada acima, executado novamente com orçamentos fixos de memória de 2 GB, 1 GB e 256 MB - o que o dimensionador automático escolheria em uma máquina de 8 GB, uma de 4 GB, e um NAS de 2 GB. Cada leg produziu o arquivo idêntico verificado byte a byte, e a coluna de memória seguiu o orçamento, nunca o trabalho:
| trabalho de 87 GB, 10 GbE | automático | orçamento de 2 GB | orçamento de 1 GB | orçamento de 256 MB |
|---|---|---|---|---|
| tempo até arquivo utilizável | 94 s | 87 s | 94 s | 102 s |
| memória de pico (RSS) | 286 MB | 558 MB | 336 MB | 284 MB |
| E/S de disco (GiB) | 73,2 | 73,2 | 72,8 | 72,7 |
Um único leg por orçamento no build de lançamento, contido contra o mesmo checksum de saída da rodada de seis braços. O orçamento mais apertado custa cerca de 9% do relógio, e só porque essa linha é 10 GbE - blocos derramados custam tempo só quando a linha ultrapassa o disco, então em uma conexão doméstica típica um orçamento pequeno é praticamente de graça. A escada inteira, incluindo um download de 87 GB, cabe em 0,3-0,6 GB de memória; nas predefinições de fábrica o trabalho rodou em 286 MB. Nenhum outro cliente oferece um orçamento de memória rígido para o processo inteiro; o mais próximo disso são ajustes de tamanho de cache, e a rodada abaixo mede o que esses custam.
O limitador corrido contra os próprios ajustes do campo. No fixture de 34 GB (23 de agosto de 2026, máquina de 1 Gbit, cinco provedores, 30 de 30 legs com bytes corretos), limitar o NZBGet a um limite de cache equivalente mais que dobrou seu CPU (215,5 para 453,0 segundos de CPU, 2,10x) para comprar um corte de 52% em seu pico de memória, e o limite do SABnzbd foi quase de graça mas alcançou só parte de sua pegada. O ajuste de cache do rustnzb era decorativo no build corrido, e o Weaver não tem nenhum ajuste de memória, então os dois rodaram sem limite como colunas de referência em vez de serem avaliados em um orçamento que não conseguem manter. Nosso próprio lado dessa rodada foi superado pela escada v1.2.2 acima, que diz a mesma coisa a 2,5x o tamanho: o orçamento nunca é a restrição limitante, porque a passagem única já retém tão pouco de início.
Espaço livre · medido até o megabyte
Um cliente que escreve e depois desempacota precisa de espaço para os volumes do arquivo e o payload desempacotado ao mesmo tempo, então um trabalho não começa sem aproximadamente o dobro do download livre. A passagem única precisa do payload - e esta rodada mediu quanto a mais, encolhendo o volume de destino até cada cliente falhar. A resposta do nzbfast é uma constante de cerca de 50 MB de folga, não uma proporção, e ela se mantém de um trabalho de 6,5 GB a um de 34 GB.
| espaço livre que o trabalho precisa | trabalho de 6,5 GB | trabalho de 34 GB |
|---|---|---|
| nzbfast 1.2.2 | a saída + 48,6 MB | a saída + 51,0 MB |
| NZBGet 26.3-testing | ~2,1x o payload | ~2,1x (37,6 GB acima da saída) |
| SABnzbd 5.1.1 | ~2,1x o payload | ~2,1x (37,6 GB acima da saída) |
| rustnzb 1.4.5 | ~2,25x o payload | ~2,25x (42,7 GB acima da saída) |
| Weaver 0.7.8 | ~2,25x o payload | ~2,25x (42,7 GB acima da saída)¹ |
Medido em uma máquina Apple Silicon de 20 núcleos, linha de 1 Gbit, cinco provedores, três repetições em cada limite, cada leg completado verificado byte a byte - as linhas rivais em 22-23 de agosto de 2026 (célula de 34 GB do Weaver repetida em 24 de agosto, nota 1), e a linha do nzbfast recortada de novo no build de lançamento v1.2.2 em 24 de agosto, que reproduziu os dois limites exatamente, 12 de 12 legs unânimes nos dois fixtures. Nossas células são um piso medido: o trabalho completa 3 de 3 com 48,6 MB e 51,0 MB de folga, e recusa 3 de 3 cerca de 17 MB abaixo disso - então o piso é real nas duas direções. O que o trabalho realmente retém se estabiliza na saída mais cerca de 3 MB; a folga paga pelos últimos momentos do pipeline, nunca por uma segunda cópia. As células dos rivais são seu piso medido no trabalho de 6,5 GB e uma suficiência confirmada na mesma proporção no de 34 GB (3 de 3 corretos byte a byte exatamente nessa proporção); não descemos a escada deles mais fundo no tamanho maior, então o piso real deles ali pode estar um pouco abaixo da proporção, e dizemos isso em vez de arredondar a nosso favor.
O que ficar sem espaço realmente parece importa tanto quanto o número. A 17 MB abaixo do seu piso o nzbfast bate na recusa do disco em uma escrita, para de forma limpa com "sem espaço em disco", mantém tudo o que chegou registrado em diário, e uma nova tentativa retoma sem baixar de novo - um parcial que você mantém, não um trabalho falho. ¹ A célula do fixture grande do Weaver foi resolvida por uma repetição em 24 de agosto: três de três legs corretos byte a byte na mesma proporção de ~2,25x, cada um mais rápido que o leg bom da primeira tentativa, com o espaço livre idêntico até o byte. Na primeira tentativa, em 23 de agosto, dois de seus três legs tinham travado a velocidades de um único dígito de MB/s com mais de 60 GB ainda livres e bateram no corte de 40 minutos da rodada. Essas travadas não voltaram, e a instrumentação de travamento da bancada estava ativa e silenciosa nos três legs da repetição, o que é uma medida positiva e não a ausência de uma. O que as causou continua desconhecido, e uma repetição limpa não é um diagnóstico: existem agora seis legs nessa proporção, quatro completos, e as duas falhas vêm de uma única janela de 80 minutos na primeira noite.
A consequência do multiplicador
Para qualquer disco, a velocidade de linha que você consegue sustentar durante download, verificação e desempacotamento é a taxa real do disco dividida pelo multiplicador de E/S do cliente. As tabelas de custo acima medem o nosso em cerca de 1,0x - cada byte cruza o disco cerca de uma vez - e cada rival em 2,0x a 3,0x para a mesma saída byte a byte idêntica. Então o mesmo disco sustenta de duas a três vezes a velocidade de linha sob o nzbfast que sustentaria sob um cliente de estágios. A aritmética, com os multiplicadores tirados das tabelas medidas acima:
| linha | taxa do payload | disco necessário no nosso ~1,0x | a 2,2x | a 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 |
Compare essas colunas com o que discos realmente sustentam. Um disco de NAS de 5400/5900 rpm segura cerca de 100-140 MB/s em suas trilhas externas, decaindo para 80-100 conforme enche - então o gigabit já está no limite a 1,0x na classe mais lenta, o que dizemos abertamente, e fora de alcance a 2-3x. Um disco de 7200 rpm segura cerca de 160-220 MB/s. Os ~550 MB/s de um SSD SATA limitam um cliente a 2,2x perto de 2 Gbit e carregam cerca de 3,5-4 Gbit a 1,0x. Discos SMR, vendidos em bays de NAS há anos, são o pior caso para o padrão de estágios especificamente: escrita sustentada com releitura pode cair para dezenas de MB/s assim que o cache de reshingling do disco se esgota. E uma linha multi-gig é a mesma parede mais alto: 10 Gbit em um multiplicador de 2-3x exige 2,75-3,75 GB/s sustentados, além de todo disco SATA e além de muitos discos NVMe assim que um trabalho grande ultrapassa sua zona de cache rápido, enquanto a 1,0x um SSD de ~2 GB/s acompanha a velocidade da linha com folga de sobra.
Medido em vez de presumido, em um disco limitado. Limitamos um disco a 150 MB/s - uma taxa de classe 5400 rpm - e rodamos o mesmo download duas vezes: uma em passagem única, outra seguindo a escrita, releitura e desempacotamento do padrão de estágios. O braço de passagem única acompanhou a linha de 1 Gbit a 109,9 MB/s, 0,2% abaixo de sua própria taxa sem limite; o padrão de estágios caiu para 59,0 MB/s, 54% da linha. Varrido parametricamente sem limite de linha, o braço de passagem única tomou 97% do que o disco oferecia em cada limite (290,7 MB/s de um limite de 300 MB/s, 145,6 de 150) a uma E/S de dispositivo medida de 1,00-1,03x, e o padrão de estágios tomou 47-48% a 3,02x medido - a proporção constante entre os limites, o que é a aritmética acima reproduzida como medição. 32 legs, cada saída verificada byte a byte.
E uma vez em hardware real, sem limite. O disco mais lento em nossa frota de testes é um disco de sistema TLC em uma máquina Windows nativa de 10 GbE, sustentando 0,99 GB/s de escritas onde nossa máquina de teste mais rápida sustenta 5,97. A rodada Windows de 87 GB acima rodou nele: o braço de passagem única precisou de cerca de 0,73 GB/s dos 0,99 disponíveis para segurar 105 s de relógio - folga de sobra no disco mais fraco da frota - que é a célula superior direita da tabela acima caindo em um disco real em vez de um limitado. E o extremo rápido da frota fecha o argumento pelo outro lado: o mesmo trabalho de 87 GB, em taxa plena a 10 GbE, termina nos mesmos 70-71 segundos em um disco de 1,24 GB/s e em um de 5,97 GB/s - um disco 4,8x mais rápido não move o relógio nem um pouco, porque a um multiplicador de 1,0x a linha se esgota muito antes do disco. Para um cliente de estágios esses dois discos são mundos diferentes.
O que esse equipamento é e não é. O disco foi limitado com um controlador de E/S do sistema operacional dentro de uma máquina virtual em uma máquina Apple Silicon de 32 núcleos, e o braço de estágios é nosso próprio binário feito para escrever, reler e reescrever da forma como um cliente de estágios faz. Nenhum rival rodou nele - a linha simulada do equipamento serve arquivos simples que um rival também trataria em uma passagem única, então apontar um para lá não demonstraria nada - o que significa que a tabela acima é aritmética ancorada por um par medido, com os multiplicadores dos rivais tirados das tabelas reais de cinco clientes acima, e rotulamos assim de propósito. Três notas de honestidade acompanham isso. O controlador orça leituras e escritas separadamente, o que favorece o braço de estágios; em um dispositivo de orçamento único, que é todo disco rígido, sua parcela seria ainda menor. O multiplicador de estágios é cerca de 2x quando os volumes ainda estão no cache de página na releitura e 3x quando não estão, então um trabalho grande em uma máquina normal fica no extremo do 3x. E o custo de busca de escrever, reler e apagar centenas de arquivos de volume - contra um arquivo escrito uma vez em ordem - é um argumento a partir da forma do tráfego, ainda não uma medição: ele precisa de um disco rígido, e o citamos como argumento até que tenha um.
Forma dois · a moeda ao ar dos releases grandes
Metade de tudo o que é publicado acima de 60 GB é um arquivo criptografado, e é a forma onde os clientes de estágios pagam mais: os dados trancados têm que ser escritos, relidos, destrancados e escritos de novo. O nzbfast destranca cada pedaço à medida que chega, então os dados trancados nunca chegam ao disco de jeito nenhum. Medido em um release real de 94 GB criptografado:
| release criptografado de 94 GB, passagem única | medido |
|---|---|
| Escrito no disco | 90,1 GB - cerca do payload, uma vez |
| Mais disco usado ao mesmo tempo | 89,6 GB - o próprio arquivo de saída |
| Pausa após o download | 0,6 s |
O mais disco usado ao mesmo tempo é o tamanho do arquivo que você pediu. Não existe um momento durante um download criptografado em que o nzbfast precise de espaço para uma segunda cópia, e nenhuma passagem de destrancamento depois que a barra de download se enche - um cliente de estágios paga aproximadamente o dobro nas três dessas linhas, o mesmo 2x que as tabelas de custo acima medem em toda outra forma.
Disco em uso durante um download, amostrado a cada cinco segundos. A linha plana é o nzbfast; a linha que sobe a 166 GB no final é o padrão de escrever-e-destrancar, pagando pelo arquivo terminado enquanto a cópia trancada ainda está no disco - medido rodando os dois padrões sobre o mesmo release.
Publicações aninhadas · medido a 28 de agosto de 2026
Muito do que é publicado é deliberadamente difícil de abrir. O nome real do ficheiro está enterrado dentro de um segundo arquivo, por vezes um terceiro, por vezes num formato diferente em cada nível, para que a publicação revele o menos possível sobre o que contém. A isso junta-se o facto de as publicações chegarem danificadas: os artigos expiram, os envios chegam incompletos e os dados de recuperação têm de ser usados antes de se poder extrair fosse o que fosse. Um cliente percorre essa cadeia por si, ou entrega-lhe uma pasta de arquivos e para.
Construímos então dez formas que isolam exatamente isso, pusemos cada cliente atual à prova contra elas e depois fizemos o que as comparações costumam saltar: onde um cliente parou cedo, terminámos o trabalho à mão com as ferramentas habituais e cronometrámos isso também. Um cliente que desiste depressa parece rápido até se contar o trabalho que lhe deixa.
| dez formas embrulhadas e danificadas | concluído sozinho | só após reparação manual | nunca chegou ao ficheiro |
|---|---|---|---|
| NZBGet 26.3 | 2 de 10 | 8 | 0 |
| SABnzbd 5.1.2 | 5 de 10 | 3 | 2 |
| nzbfast 1.2.4 | 10 de 10 | 0 | 0 |
| rustnzb 1.4.5 | 7 de 10 | 1 | 2 |
| Weaver 0.7.8 | 1 de 10 | 1 | 8 |
O nzbfast é o único que termina as dez sem ajuda. O NZBGet também chega ao ficheiro em todas as formas, mas precisa de 16 rondas de reparação e extração manuais em oito delas. O SABnzbd conclui cinco sem ajuda e duas ficam inalcançáveis mesmo à mão. O Weaver chega ao ficheiro em duas.
O padrão não é aleatório. As formas que o nzbfast percorre e as outras não são as embrulhadas e as danificadas: um arquivo dentro de um arquivo, uma mudança de formato a meio da cadeia, uma cadeia de cinco níveis e, sobretudo, um arquivo que chega corrompido com os seus próprios dados de recuperação ao lado. Nesta última, quatro clientes extraem o conjunto exterior na perfeição, entregam-lhe o arquivo defeituoso juntamente com o conjunto de recuperação que o repararia, e param.
Onde os clientes fazem o mesmo trabalho, a diferença não é pequena. Estas são as sete formas que os quatro clientes principais alcançam, contando a reparação manual de que cada um precisou:
| as sete formas que os quatro alcançam | tempo até um ficheiro utilizável | escrito no disco |
|---|---|---|
| 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 |
Quatro a cinco vezes mais rápido, com menos de metade dos bytes escritos. O valor do disco é o que continua a contar depois da transferência: cada gigabyte dessa coluna é um gigabyte que o seu disco teve de absorver, e os clientes que usam uma zona intermédia escrevem o conteúdo, voltam a lê-lo e escrevem-no outra vez.
Onde não estamos à frente, e porque vale a pena dizê-lo. Em quatro das dez formas um concorrente escreve menos bytes do que o nzbfast durante a própria transferência. Em todos os casos é porque fez menos: na forma com arquivo interno corrompido, o NZBGet escreve 3,29 GB contra os nossos 4,65, e depois a sua passagem de reparação escreve mais 2,91, terminando em 6,20 GB contra os nossos 4,65. Nas restantes, o cliente que menos escreveu é um que nunca chegou ao ficheiro. Um número baixo de disco nem sempre é poupança.
Estes são testes de capacidade, não testes de velocidade. Os conteúdos são pequenos e servidos a partir da memória por uma ligação local, sem fornecedor nem rede pelo meio, por isso nada aqui é limitado pela velocidade de transferência e os segundos absolutos são muito mais curtos do que as mesmas formas levariam no mundo real. Se uma forma exige ou não trabalho manual é uma propriedade da forma e do cliente, e transfere-se diretamente. Os segundos comparam clientes a fazer trabalho idêntico, não preveem quanto demora uma tarefa real.
Os resultados completos por forma, o que é cada forma e o método estão na página de dados de arquivos aninhados.
Por que isso importa
Armazenamento flash desgasta ao ser escrito. Um release de 94 GB custa ao seu disco cerca de 90 GB de escrita sob o nzbfast; sob um cliente que faz estágio e desempacota, o mesmo release custa aproximadamente o dobro. Em um NAS com discos rígidos a forma de passagem única também remove a longa passagem de thread única no final de cada download criptografado - uma pausa medida em 20 segundos em uma estação de trabalho rápida de 32 núcleos com destrancamento acelerado por hardware, e correspondentemente mais longa nas máquinas de baixa potência que a maioria das pessoas realmente usa para isso. Citamos o número pequeno porque é o que medimos.
Shootouts de componentes
Reparo (PAR2) e desempacotamento (RAR) são código nativo nosso e não binários de terceiros empacotados, então também os corremos de forma independente contra as ferramentas dedicadas em corpora idênticos, em quatro máquinas cobrindo o que um leitor poderia realmente possuir. Um tempo só conta quando a saída é byte a byte idêntica ao payload de origem: cada número de RAR abaixo foi verificado com sha256 contra a origem, e cada arquivo reparado contra o conjunto pristino.
A rodada anterior desta tabela usava de 100 MB a 200 MB por forma, o que foi um erro: cerca de 28 ms de lançamento de processo eram 40% do leg de armazenamento, e a ordenação que isso produziu não se sustenta em um tamanho realista. Esta rodada usa 1 GB de payload por forma, e isso muda várias respostas, incluindo algumas na direção contrária. Os arquivos são criados com o rar 7.23 oficial, então nenhuma ferramenta é julgada com entrada do seu próprio codificador, e os mesmos bytes são corridos em cada máquina.
O que está no payload importa mais do que parece. Um payload construído com cópias de blocos torna cada forma comprimida um benchmark de cópia de memória; um payload de texto puro torna isso um benchmark de literal-e-Huffman; medimos os dois e eles não concordam sobre quem vence. Então as quatro formas comprimidas usam terços iguais de texto, registros estruturados e bytes incompressíveis, e as duas formas nos extremos dessa faixa são legs separados de propósito: store é incompressível e repetitive é quase tudo correspondências. O construtor e o harness estão no repositório, então o corpus pode ser reconstruído byte a byte.
Recorrido em 23 de agosto de 2026 no motor 1.2.2, e a varredura se mantém. As três ferramentas que um leitor mais frequentemente considera - a nossa, unrar 7.23 e rarpar 0.2.5 - foram recorridas no desktop de 32 núcleos no motor de lançamento (o código de extração corrido é byte a byte idêntico à tag 1.2.2), seis rodadas intercaladas, mínimo por ferramenta, a saída de cada leg verificada contra o manifesto do payload. Segundos, quanto menor melhor:
| payload de 1 GB, 32 núcleos (23 ago 2026) | store | 400 arquivos pequenos | solid | repetitive | grande, 3 volumes | criptografado | dicionário 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 |
Todas as sete formas nossas, na mínima e na mediana, de 1,16x a 4,29x contra o unrar. Esses tempos não são comparáveis célula a célula com a tabela mais ampla abaixo - o harness foi revisado desde as rodadas dessa tabela e o número de rodadas difere - então leia cada tabela contra si mesma. A tabela mais ampla mantém suas próprias datas e seu campo de seis ferramentas, e sua coluna nzbfast descreve o motor que a 1.2.2 distribui: a nova corrida acima mediu o motor atual nivelado com o build daquela tabela nas sete formas, resolvido por contagens de instruções de hardware (0,14% menos para o mesmo relógio), então essas células não são os números de um build superado usando um rótulo atual. Esta nova corrida é também onde a regra A/A na seção de configuração foi conquistada. Uma passagem no mesmo dia primeiro relatou uma forma como uma pequena regressão contra nosso próprio build anterior, e a leitura sobreviveu rodando as duas ordens de braço. Um controle A/A - o mesmo binário corrido contra uma cópia byte a byte idêntica de si mesmo - mostrou o harness dando a quem quer que corresse primeiro um pênalti de cerca de 1,5%: o binário idêntico venceu só 6 das 15 rodadas na primeira posição, e trocar as ordens não cancela um viés que sempre recai sobre quem está primeiro. Contagens de instruções de hardware resolveram a questão que o harness não conseguia - o build mais novo aposenta 0,14% menos instruções para o mesmo relógio, então não houve regressão. Cada comparação de nosso build contra nosso build que publicamos agora carrega esse controle.
O campo inteiro, segundos, quanto menor melhor. Melhor de três, ferramentas intercaladas dentro de cada rodada em vez de corridas em blocos, saída verificada contra o payload de origem em cada execução isolada. Uma ferramenta que produziu os bytes errados recebe uma nota de correção, nunca um tempo rápido. rarpar é o código próprio de RAR e PAR2 do Weaver, construído a partir do código-fonte em bd87611; fixamos o commit em vez de uma versão porque suas crates carregam três números de versão diferentes.
| segundos, 1 GB por forma | store | 400 arquivos pequenos | solid | repetitive | grande, 4 volumes | criptografado | dicionário 128 MiB |
|---|---|---|---|---|---|---|---|
| Desktop de ponta, 32 núcleos | |||||||
| 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 | saída errada² | sem cripto³ | sem dicionário grande⁴ |
| 7-Zip | 0,30 | sem suporte¹ | sem suporte¹ | sem suporte¹ | sem suporte¹ | sem suporte¹ | sem suporte¹ |
| Desktop mais antigo, 20 núcleos | |||||||
| 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 | saída errada² | sem cripto³ | sem dicionário grande⁴ |
| 7-Zip | 0,33 | sem suporte¹ | sem suporte¹ | sem suporte¹ | sem suporte¹ | sem suporte¹ | sem suporte¹ |
| Laptop, 14 núcleos / 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 | sem CLI⁵ | sem CLI⁵ | sem CLI⁵ | sem CLI⁵ | sem CLI⁵ | sem CLI⁵ | sem CLI⁵ |
| bsdtar | 0,81 | 16,72 | 15,14 | 1,13 | saída errada² | sem cripto³ | sem dicionário grande⁴ |
| 7-Zip | 0,76 | 5,45 | 5,79 | 0,65 | 4,21 | 4,13 | 2,51 |
| Laptop, 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 |
Onde o campo não conseguiu competir, e por quê. ¹ O 7-Zip corrido aqui é o pacote Homebrew, que recusa toda forma comprimida com ERROR: Unsupported Method e só lê a forma armazenada no macOS. Uma versão anterior desta página atribuiu isso ao build do 7-Zip para macOS, o que estava errado: o Homebrew o compila sem o codec unRAR não livre, enquanto o build de macOS que a 7-zip.org distribui carrega o codec e decodifica as sete formas, como o build do Windows faz. Remedido em 14 de agosto de 2026. Se você instala o 7-Zip a partir do projeto em vez do Homebrew, esta coluna não descreve o que você tem. ² O bsdtar não tem suporte a múltiplos volumes RAR5 e produziu um arquivo truncado sem relatar erro, então esse leg é uma falha de correção e não um tempo lento; nosso harness capturou isso verificando a saída, o que é por que vale a pena verificar a saída. ³ bsdtar: Encryption is not supported. ⁴ bsdtar: Declared dictionary size is not supported. ⁵ o unar não distribui ferramenta de linha de comando para Windows, então o campo do laptop é cinco. ⁶ O grupo M5 Max corre as três ferramentas que um leitor de macOS realmente buscaria - unrar, rarpar e nós; unar, bsdtar e 7-Zip não foram corridos nessa máquina. O unrar dela é o 7.22, o build mais novo que roda sem supervisão ali.
Cada forma em cada máquina exceto uma, e essa é um empate. As formas de correspondência curta se resumem a duas coisas específicas em nosso decodificador. Uma correspondência de dois a trinta e dois bytes costumava pagar por uma chamada completa à rotina de cópia de memória da plataforma, e a chamada custava mais que a cópia; copiar trinta e dois bytes fixos por meio de um registrador em vez disso é por que repetitive, solid e o dicionário de 128 MiB - as três formas construídas com correspondências curtas - são todas rápidas de uma vez. E o checksum roda a jusante da thread do escritor em vez de nela. A única célula que não vencemos de forma clara é a forma armazenada no desktop de 32 núcleos, onde o unrar e nós ficamos a três milissegundos de diferença em um leg que é puramente mover bytes - idêntico na precisão desta tabela, então as duas células são marcadas e isso é pontuado como empate, não como derrota e não como vitória.
A forma que vencemos por mais margem é a que a usenet realmente publica às centenas de cada vez: 400 arquivos pequenos, 4,3× e 4,4× contra o unrar e 5,4× a 5,5× contra o rarpar. Isso é paralelismo por membro, e é a diferença entre um extrator escrito para uma fila de download e um escrito para uma linha de comando. A forma armazenada, que o censo acima diz ser 84% dos bytes na rede, é um quase empate para as três ferramentas sérias, porque nesse ponto todo mundo está só movendo bytes.
Uma escolha que vale a pena declarar. Os arquivos são empacotados com o compressor fixado em quatro threads. Sem isso, a divisão de blocos do RAR segue o número de núcleos de qualquer máquina que empacotou o arquivo, então um desktop de 32 núcleos e um de 20 núcleos produzem bytes diferentes a partir da mesma entrada e as máquinas deixam de ser comparáveis. Fixar isso torna o corpus de extração byte a byte idêntico em todo lugar, que é o objetivo, mas também limita quanto da decodificação pode rodar em paralelo - então quando as duas formas mais próximas eram derrotas, nós as recorremos contra arquivos empacotados com todas as 32 threads, para verificar que a fixação não era a causa. Não era: solid foi de 4,2% atrás para 2,4% atrás e o dicionário de 128 MiB de 6,6% para 6,3%, a mesma ordem de qualquer forma. Ambas agora são vitórias no corpus fixado por uma margem mais ampla do que essa verificação poderia explicar.
Por que não há linha RAR4, e o que acontece a esses posts. Cada forma acima é RAR5 ou RAR7, que é o que a usenet publica hoje. Arquivos RAR4 mais antigos ainda aparecem, e o mesmo motor os lê, incluindo as formas comprimidas e protegidas por senha, na mesma passagem única que os mais recentes em vez de escrever os volumes no disco e desempacotá-los depois. Eles não têm linha aqui porque o rar 7.23 oficial não consegue mais criar RAR4, então não existe um corpus neutro para correr o campo; esse trabalho é verificado contra arquivos escritos pelo WinRAR 3.00, byte a byte contra o unrar.
Corpus: 1 GiB de payload aleatório empacotado em modo armazenado em 21 volumes RAR, depois dois conjuntos PAR2 a 10% de redundância, um com blocos de 1 MiB e um com 64 KiB, depois mapas de dano fixos. Cada execução usa o mesmo protocolo: cópia nova, ler o corpus inteiro uma vez para aquecer o cache, depois cronometrar. Melhor de três rodadas intercaladas; cada volume reparado é comparado com o conjunto pristino em cada rodada. Quanto menor melhor.
Uma correção sobre o corpus, porque uma versão anterior desta página exagerou isso. Dissemos que cada máquina corria um corpus byte a byte idêntico, verificado por hash. Fazer o hash de cada volume de cada conjunto mostra que isso é verdade para o desktop de 32 núcleos e o laptop Windows, que coincidem exatamente, e não para o desktop de 20 núcleos, que tem um sorteio aleatório diferente da mesma forma: os mesmos 21 volumes nos mesmos tamanhos, os mesmos dois tamanhos de bloco, e o dano verificado nos mesmos 3, 101 e 1.500 blocos espalhados pelo mesmo número de arquivos. Cada número dentro de uma linha ainda é medido em bytes que cada ferramenta naquela linha compartilha, que é no que cada comparação se apoia. Mas as linhas não são quatro visões de uma entrada, e como o caráter do payload vale cerca de 7% para uma ferramenta concorrente na varredura, isso vale a pena declarar em vez de disfarçar.
Qual par2 é qual. O par2cmdline original é a implementação de referência da qual todo mundo fez fork. O par2cmdline-turbo é o fork que traz embutido os kernels SIMD de Galois escritos à mão do ParPar: é exatamente isso que "turbo" significa, e é por isso que o turbo, e não o original, é a ferramenta que vale a pena medir. As duas colunas turbo abaixo rodam esses mesmos kernels ParPar. O que as separa não é a aritmética mas o build e os parâmetros.
Confirmado no build distribuído contra o rival atual, 24 de agosto de 2026. Essas tabelas foram medidas antes de a 1.2.2 ser lançada e antes de o par2cmdline-turbo lançar a 1.5.0 (20 de agosto de 2026), então a coluna de 20 núcleos foi recorrida nos dois: nosso build de lançamento 1.2.2 contra o turbo 1.5.0, três rodadas intercaladas por leg, cada arquivo reparado comparado com o conjunto pristino. Os quatro legs se reproduzem - o nosso 0,18 / 0,30 / 0,75 / 2,02 contra o 0,19 / 0,33 / 0,74 / 2,07 impresso aqui, e o turbo 1.5.0 fica dentro de poucos por cento do build da tabela em cada leg e nas duas configurações. As células permanecem como publicadas; as outras três máquinas mantêm suas próprias datas.
Então a concorrência aparece duas vezes, e uma dessas colunas é o melhor caso dela e não o padrão. O binário distribuído que você baixaria é compilado para uma CPU genérica de referência e faz hash de só alguns arquivos por vez; compilar o mesmo código-fonte para a CPU real da máquina e passar -T16 deixa usar as instruções que essa máquina realmente tem e fazer hash de dezesseis arquivos de uma vez. No laptop isso vale até 2,6x, inteiramente do build e dos parâmetros. Julgue-nos pela coluna ajustada, que é a comparação mais difícil; a coluna distribuída é o que alguém que baixa o programa realmente experimenta. par2cmdline é o original, versão 1.2.0, compilado a partir do código-fonte em cada máquina. rarpar é a implementação própria de PAR2 do Weaver, compilada a partir do código-fonte com seu backend Metal de GPU habilitado. O par2j do MultiPar é exclusivo do Windows, então aparece só nas linhas do laptop Windows. As linhas do M5 Max correm as duas ferramentas com builds atuais de macOS arm64 ao lado das duas colunas turbo; o par2cmdline clássico não foi corrido nessa máquina.
| segundos, conjunto de 1 GiB | desktop, 32 núcleos | desktop, 20 núcleos | laptop, 14 núcleos | laptop, M5 Max |
|---|---|---|---|---|
| sem dano - verificação limpa | ||||
| nzbfast | 0,11 | 0,19 | 0,23 | 0,18 |
| par2-turbo, ajustado | 0,31 | 0,38 | 0,42 | 0,28 |
| par2-turbo, distribuído | 0,86 | 1,12 | 1,06 | 0,80 |
| par2cmdline | 3,03 | 3,84 | 3,81 | não corrido |
| rarpar | 2,62 | 3,45 | 2,96 | 2,32 |
| MultiPar | só Windows | só Windows | 1,34 | só Windows |
| 3 blocos danificados - poucos artigos mortos | ||||
| nzbfast | 0,22 | 0,33 | 0,46 | 0,26 |
| par2-turbo, ajustado | 0,51 | 0,66 | 0,78 | 0,48 |
| par2-turbo, distribuído | 1,08 | 1,46 | 1,42 | 1,00 |
| par2cmdline | 3,64 | 4,58 | 4,98 | não corrido |
| rarpar | 4,27 | 5,53 | 4,99 | 3,64 |
| MultiPar | só Windows | só Windows | 1,71 | só Windows |
| 101 blocos danificados | ||||
| nzbfast | 0,48 | 0,74 | 0,96 | 0,66 |
| par2-turbo, ajustado | 0,88 | 1,17 | 1,40 | 0,85 |
| par2-turbo, distribuído | 2,04 | 2,65 | 2,69 | 1,84 |
| par2cmdline | 5,57 | 7,57 | 11,7 | não corrido |
| rarpar | 4,73 | 5,73 | 5,74 | 4,17 |
| MultiPar | só Windows | só Windows | 2,65 | só Windows |
| 1.500 blocos danificados - 91% da recuperação usada | ||||
| nzbfast | 1,00 | 2,07 | 2,46 | 1,61 |
| par2-turbo, ajustado | 3,00 | 5,52 | 6,73 | 4,07 |
| par2-turbo, distribuído | 5,21 | 8,20 | 9,30 | 6,01 |
| par2cmdline | 67,7 | 86,1 | 403 | não corrido |
| rarpar | 7,15 | 11,49 | 14,22 | 6,91 |
| MultiPar | só Windows | só Windows | 5,40 | só Windows |
Todas as dezesseis células do nzbfast - quatro máquinas em quatro níveis de dano - são nossas, várias por mais de 2× contra o build ajustado e por 2,3× a 7,7× contra o que você realmente baixaria. As células de dano pesado são as interessantes, e a nota abaixo explica o algoritmo por trás delas.
O original está de volta na tabela, e vale a pena ver por que o fork existe. Uma versão anterior desta página tirou a coluna par2cmdline com o argumento de que era mais lento que tudo o mais na rodada, o que é verdade e não é motivo suficiente: é a implementação da qual quase toda outra ferramenta descende, e os leitores merecem a referência em vez da nossa afirmação sobre ela. No nível de dano mais pesado ele leva cerca de 69 s onde o fork SIMD leva 3,2 s e nós levamos 3,1 s. Esse fator de vinte é o argumento inteiro para os kernels de Galois escritos à mão, e é o mesmo argumento que fazemos pelos nossos.
Dano leve é o caso que importa. Um punhado de artigos falhos é muito mais comum que 101 blocos mortos, e nada como 1.500. A maior parte de um reparo leve não é a matemática de Reed-Solomon de jeito nenhum, é ler e fazer MD5 de um gigabyte, o que é por que a linha de 3 blocos acompanha a linha de verificação limpa em vez das linhas de reparo.
O nível de dano mais pesado é um tipo diferente de trabalho, e recebe um algoritmo diferente. Aquele último nível danifica 1.500 blocos em todos os 21 volumes e consome cerca de 91% dos dados de recuperação, onde a aritmética de Reed-Solomon, e não o hash ou o disco, se torna quase todo o trabalho. O build distribuído calcula os reparos mais pesados com uma transformada numérico-teórica em vez da dobra clássica de campo de Galois - a mesma matemática, avaliada em uma forma que escala muito melhor em contagens altas de blocos: 2,7× à frente do build ajustado no desktop de 20 núcleos, e no laptop Windows 2,7× à frente do build ajustado e 2,2× à frente do MultiPar. Dano leve ainda roda o caminho clássico, o que é por que os outros níveis quase não se moveram: a transformada só se paga acima de cerca de 512 blocos danificados, então abaixo disso o despachante não a usa.
Um caminho mais rápido só vale a pena se não puder estar errado. Os dois caminhos calculam a mesma quantidade e são idênticos bit a bit por construção, e cada reparo nesta página foi condicionado a que os arquivos reconstruídos batessem com o conjunto pristino: 228 reparos cronometrados nas máquinas desta rodada, zero divergências. O build distribuído não depende só desse histórico. Cada reparo verifica sua própria saída contra os hashes dos arquivos, e um que falhasse seria refeito com o caminho clássico automaticamente, registraria a divergência, e manteria o caminho clássico pelo resto daquela execução. O ajuste está no painel como modo PAR rápido se você preferir não usá-lo de jeito nenhum, e máquinas com pouca memória para isso o recusam sozinhas em vez de tentar e falhar. Remedido em 2 de agosto no build atual: os dois desktops ficam a poucos por cento desta tabela, e com o modo PAR rápido desligado o desktop de 20 núcleos volta a exatamente o tempo mais lento do caminho clássico, o que diz que a vitória é o método e não as condições.
A coluna do laptop Windows precisou de uma correção, e ela vai contra nós. O Windows rebaixa trabalho contínuo em segundo plano para os núcleos de eficiência depois de alguns segundos. Nosso daemon opta por sair disso na inicialização e nenhuma das outras ferramentas consegue, então uma versão anterior desta página publicou os tempos limitados delas como se fossem os tempos próprios das ferramentas. Rodar de novo essa máquina com cada ferramenta elevada a prioridade alta move o campo inteiro: no nível de dano mais pesado o par2-turbo vai de 22,4 s para 6,41 e o rarpar de 59,2 s para 14,4, e para um corte desta página isso transformou a coluna de nossa vitória em uma que perdemos. A coluna do laptop inteira é medida assim agora - a correção permanece mesmo que a linha tenha sido reconquistada pela mudança de algoritmo acima, porque os tempos do campo naquela máquina só são honestos com o limitador removido.
Quando o PAR2 não consegue cobrir o dano, o registro de recuperação dentro do próprio RAR é a última linha de defesa. Até a 1.0.8 o nosso falhava em qualquer arquivo acima de cerca de 13 MB, então esse leg não podia rodar de jeito nenhum. O dano é três buracos de 3.000 bytes a 20%, 50% e 80% da região protegida. As duas ferramentas produziram saída byte a byte idêntica ao arquivo pristino, e a nossa é byte a byte idêntica ao que o próprio rar r escreve. Melhor de três, desktop de 32 núcleos, as duas ferramentas recorridas juntas em 2 de agosto.
| 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 |
| vantagem | 5,7× | 7,9× | 8,2× | 5,7× | 4,2× |
Uma versão anterior desta página mostrava o tamanho de 512 MB como uma derrota, e explicava isso como o preço de percorrer o volume em pedaços em vez de segurar tudo em memória. Essa explicação estava correta na época e agora está obsoleta: o custo era um CRC64 bit a bit no caminho de reparo, substituído por um baseado em tabela, e a derrota foi junto. Não há mais um cruzamento, e o conjunto de trabalho limitado foi mantido. O tamanho de 2 GB está aqui porque os volumes que um daemon realmente encontra vão de 8 GB a 20 GB, não 512 MB, e um leg que para abaixo da faixa real não é muito de um teste.
O que mudou este corte, e o controle que confirma isso. Encontrar quais blocos estão danificados tinha se tornado a maior fase deste reparo - maior que a própria aritmética de reparo - e rodava em uma única thread, lendo 64 KB de cada grupo pelo arquivo, uma vez por grupo. Agora faz uma única passagem sequencial em ordem de arquivo com os checksums por fragmento calculados em paralelo, e o volume reparado é clonado em vez de copiado onde o sistema de arquivos consegue fazer isso. A detecção sozinha caiu de cerca de 300 ms para 18 ms no arquivo de 512 MB, o que é a maior parte do que mudou acima. O controle é a coluna ao lado da nossa: o rar r foi recorrido nas mesmas rodadas na mesma máquina e voltou a poucos por cento de seus tempos anteriores, então a mudança no intervalo é nossa e não do benchmark.
O M5 Max repete o padrão, corrido em 31 de julho com o mesmo corpus e os mesmos filtros: 0,050 / 0,066 / 0,171 / 0,581 s contra os 0,211 / 0,335 / 0,751 / 1,735 do rar r nos tamanhos de 16 MB a 512 MB - 3,0× a 5,1× mais rápido; o tamanho de 2 GB não foi corrido nessa máquina. Esses números são anteriores à reescrita de detecção descrita acima, então são de um build mais antigo, mantidos aqui como a segunda máquina em vez de como um número atual.
O rarpar do Weaver está ausente desta tabela sozinha, e não por escolha: ele não implementa esse reparo. Pedido para consertar um desses arquivos ele responde "embedded Rar5 recovery record detected ... this API restores standalone .rev recovery volumes only and does not consume embedded RR/protect data", e deixa o arquivo danificado. Ele aparece em toda outra comparação nesta página: os quatro legs de PAR2 acima, as sete formas de extração acima disso, e o leg de volumes de recuperação logo abaixo, que é o trabalho que ele diz que faz - e que ele vence.
.rev ausentes por inteiroA outra metade da própria história de recuperação do RAR, e até esta rodada a maior derrota desta página. Um arquivo .rev é um volume de recuperação independente: três deles ao lado de um conjunto de 21 volumes conseguem reconstruir quaisquer três volumes que nunca chegaram. Corpus: 1 GiB armazenado em 21 volumes de 50 MB com rar rv3, depois os volumes 4, 11 e 19 apagados - três perdidos contra três volumes de recuperação, que é o pior caso que o conjunto ainda consegue sobreviver. Melhor de três, cada volume reconstruído comparado com o pristino.
| desktop, 32 núcleos | desktop, 20 núcleos | |
|---|---|---|
| nzbfast | 0,44 | 0,50 |
rar 7.23 rc | 0,46 | 0,58 |
rarpar restore-volumes | 0,48 | 0,61 |
A célula de 32 núcleos aqui era 3,12 s contra os 0,47 do rar rc no corte anterior desta página, publicada como 6,6× mais lenta e o pior número nela. A causa era a resolução de apagamento rodando a cerca de 48 MB/s de saída reconstruída onde a RARLab administrava 320; agora roda na mesma aritmética baseada em tabela do resto do código de recuperação, o que é uma melhoria de sete vezes e transforma a derrota em vitória nas duas máquinas. As margens são 3% e 14%, então é uma vitória para declarar com clareza e não para destacar como manchete, e o motivo de ser declarada de jeito nenhum é que a derrota foi declarada primeiro.
Este leg existe porque o rarpar do Weaver implementa exatamente isso e pediu para ser medido nisso. Estava vencendo com folga quando o publicamos pela primeira vez, e o publicamos naquela época por esse motivo.
A correspondência de arquivos nunca foi o custo, o que vale a pena registrar porque era o suspeito intuitivo: volumes de recuperação não carregam nomes de arquivo, então identificamos quais posições sobreviveram fazendo o checksum de cada volume em disco em vez de confiar em como são chamados, e contra um conjunto intacto, onde a correspondência é tudo que acontece, a passagem inteira leva 0,18 s.
O que mais mudou, e onde isso não aparece. Duas outras mudanças de motor entraram que esses corpora não conseguem ver, listadas aqui para que os números acima não sejam lidos como a história inteira: arquivos RAR5 com dezenas de milhares de membros resolvem cada membro uma vez em vez de percorrer a lista por worker, o que é 3× menos tempo de processador em 40.000 membros; e o leitor de bits do RAR1.3 trabalha uma palavra por vez, o que é 2×. Nenhum dos dois aparece acima, porque as formas aqui têm 400 membros e nenhum RAR1.3.
O que deliberadamente não fazemos: nunca criamos PAR2. Um downloader não tem motivo para isso, e o ParPar é dono desse leg. Também compramos velocidade com memória nos dois motores: a extração atinge um pico de cerca de 240 MB contra os 41 MB do unrar, e a verificação cerca de 126 MB contra os 7 MB do turbo, porque esses são os motores embutidos que acompanham um download ao vivo em vez de execuções únicas independentes. A forma de dicionário de 128 MiB é o pior caso disso, com cerca de 304 MB contra os 139 MB do unrar. O reparo mais pesado agora também custa memória: o método mais rápido para 512 ou mais blocos ausentes trabalha a partir dos dados de recuperação mantidos residentes, então tem permissão para usar até um quarto da RAM da máquina, limitado a 4 GB, e uma máquina que não pode ceder isso silenciosamente usa o método de pouca memória em vez disso - a mesma aritmética e os mesmos tempos das linhas do meio da tabela PAR2, só não o 3× da última. Se você quer o menor conjunto residente possível para um trabalho independente, as ferramentas dedicadas ainda vencem essa coluna.
Capacidade, não micro-benchmarks
| nzbfast | SABnzbd 5 | NZBGet 26 | rustnzb | Weaver | Usenapp | Newsbin | |
|---|---|---|---|---|---|---|---|
| NNTP com pipelining | sim | desligado por padrão | não | sim | -⁷ | - | - |
| verificação completa durante o download | cada bloco | depois | verificação rápida | depois | depois | depois | depois |
| extração durante o download | em fluxo, nenhum volume no disco | desempacotamento direto⁴ | desempacotamento direto⁴ | faz estágio, depois desempacota⁵ | não | não | não |
| disco necessário para um post de N GB | ~1×N | ~2×N | ~2×N | ~2×N | ~2×N | ~2×N | ~2×N |
| veredito de completude antes do download | exato por bloco | não | % de saúde | não | -⁷ | verificação de artigo | não |
| memória limitada (nunca troca para disco) | com orçamento | ajuste de limite de cache | ajuste de cache | não | não | - | - |
| eleva seu próprio limite de arquivos abertos | sim, na inicialização | -⁸ | -⁸ | -⁸ | -⁸ | -⁸ | -⁸ |
| verificar o arquivo a qualquer momento durante o download | sim | não | não | não | não | sequencial | não |
| indexador embutido + mural de posters | sim, sem chave | não | não | não | não | interface de busca | navegador de grupos |
| integração Sonarr/Radarr | API SAB + Newznab | nativa | nativa | API compatível com SAB | RPC compatível com NZBGet⁷ | não | não |
| controles remotos de celular (nzb360/LunaSea) | sim | sim | sim | não | -⁷ | não | não |
| lista de observação com captura e upgrades automáticos | embutido | via *arr | via *arr | não | não | Watchdog | regras |
| binário único e autocontido | sim | pacotes de app; Python no Linux | sim | sim | sim | .app | .exe |
| código aberto | GPL⁶ | GPL | GPL | MIT | sim | pago | pago |
| plataformas | mac/win/linux (x64 + ARM)/docker/flatpak | mac/win/linux/docker/pacotes NAS | mac/win/linux/docker/NAS + embarcado | linux/win (mac a partir do código-fonte) | binário mac; código-fonte em outro lugar⁷ | só mac | só win |
⁴ O desempacotamento direto ainda materializa os volumes primeiro: 2× escritas e 2× disco. ⁵ O rustnzb 1.4.5 entrega cada fixture com bytes corretos na rodada de 23 de agosto de 2026, e sua E/S de dispositivo medida ali é cerca de 2,1x o payload - então ele faz estágio dos volumes e desempacota depois do download em vez de extrair em fluxo (veja as tabelas de custo). Seus builds mais antigos (1.3.4-1.3.9) distribuíam volumes ofuscados marcados "Completed" sem extrair; essa falha foi corrigida a montante na 1.4.5. ⁶ GPL-3.0-or-later. ⁷ Weaver 0.7.8, o binário distribuído mais novo, identidade provada por hash (o sha256 do tarball do release publicado e do binário dentro dele batem com o que corremos); suas linhas medidas vêm da rodada de custo de 23 de agosto, suas células de capacidade marcadas "-" são recursos que não avaliamos em vez de ausências confirmadas; ele fala um RPC compatível com NZBGet, que é como nosso harness o conduz, mas não tentamos os controles remotos de celular contra ele. Usenapp/Newsbin são leitores comerciais de plataforma única com recursos de downloader; eles estão listados porque as pessoas perguntam, não porque competem em velocidade.
⁸ O macOS inicia um programa com um limite de 256 arquivos abertos, e um conjunto completo de conexões em vários servidores pode ultrapassar isso. O nzbfast eleva seu próprio limite na inicialização no macOS e no Linux: pede 65.536, reduz até o sistema concordar, nunca passa do limite rígido do sistema, e continua com o que tinha se todo passo for recusado. O Windows não tem um limite por processo desse tipo. As outras colunas são não avaliadas em vez de ausências confirmadas: não lemos o código de inicialização de nenhum outro cliente. Vale saber por causa de como isso falha: um programa que fica sem arquivos abertos no meio de um trabalho tende a desaparecer em vez de relatar um erro.
Prova de transporte · medido na 1.2.2
Cortes anteriores desta página traziam um conjunto mais amplo de demonstrações de transporte - execuções de saturação multi-linha, ganhos de pipelining por RTT, uma prova de contrapressão, medições de teto de decodificação - corridas em builds que a v1.2.2 desde então superou. Sob a regra desta página elas são retiradas em vez de deixadas envelhecer, e voltam conforme são recortadas de novo no build atual; as três afirmações acima são as que já foram remedidas na v1.2.2.