Spiegazioni · uno

Come funziona lo scaricamento a passata unica

Gran parte di ciò che rende veloce questo client non è un percorso di rete più rapido. È che i dati si muovono una volta sola. Ecco cosa significa in pratica, perché è una cosa diversa dallo scompattamento diretto, quali forme di archivio le sopravvivono, e quanto vale davvero, su una macchina reale, eliminare il ciclo scrivi-e-rileggi.

Il punto di partenza

Cosa fa tradizionalmente uno scaricamento Usenet

Un post è fatto di migliaia di piccoli articoli codificati che insieme formano un insieme di volumi d'archivio, i quali a loro volta contengono il file che vuoi davvero. Passare dall'uno all'altro sono tradizionalmente quattro lavori distinti, ciascuno concluso prima che inizi il successivo.

  1. Scaricare e decodificare. Recuperare ogni articolo, decodificarlo, e scrivere su disco i volumi d'archivio ricomposti. Per un rilascio da 60 GB sono 60 GB scritti.
  2. Verificare. Rileggere tutti i 60 GB dal disco per controllarli contro i dati di parità, e ripararli se qualcosa non va.
  3. Scompattare. Rileggere i volumi, e scrivere il contenuto estratto accanto a essi. Ora sul disco ci sono 120 GB.
  4. Pulire. Cancellare i volumi, lasciando il contenuto.

Ogni fase è corretta, e il risultato è giusto. Ma il contenuto è stato scritto due volte, letto almeno due volte, e al colmo il disco ha dovuto tenere due copie complete di un lavoro di cui volevi una copia sola. Il cronometro che vivi sono tutte e quattro le fasi in sequenza, ed è per questo che un client può dichiarare uno scaricamento veloce e tenerti comunque in attesa.

Il cambiamento

Farlo una volta sola, invece

Passata unica significa che i byte vanno dalla rete alla loro destinazione finale senza mai diventare un file d'archivio sul tuo disco. Non esistono la fase due e la fase tre, perché il lavoro di entrambe avviene mentre la fase uno è ancora in corso.

In pratica, ogni articolo appena arriva viene decodificato in memoria e consegnato subito a due cose insieme. Il verificatore lo controlla immediatamente contro i dati di parità, così la correttezza si stabilisce mentre i dati atterrano anziché rileggendoli dopo. L'estrattore tratta i byte in arrivo come una posizione dentro l'archivio, calcola a quale parte di quale file di contenuto appartengono, e li scrive lì.

I volumi d'archivio non vengono mai assemblati. Esistono come una struttura che l'estrattore comprende mentre lo scaricamento è in volo, e l'unica cosa che raggiunge il tuo disco è il file che volevi. Quando arriva l'ultimo articolo non resta praticamente nulla da fare, ed è per questo che i nostri tempi di arrivo stanno vicini al tempo di scaricamento stesso anziché a uno scaricamento più una coda.

La conseguenza misurabile: per lo stesso lavoro scriviamo circa la metà, rileggiamo molto meno, e ci serve all'incirca la dimensione del contenuto in spazio libero anziché il doppio. Su un rilascio da 190 GB sono circa 157 GB di spazio libero contro circa 313 GB, e all'incirca un terzo del traffico su disco.

Due cose rendono la faccenda più difficile di quanto sembri, e sono il motivo per cui è raro. Gli articoli non arrivano in ordine, quindi l'estrattore deve cavarsela con byte che atterrano in posizioni arbitrarie anziché come flusso dall'inizio. E un archivio compresso non si può decomprimere dal mezzo, perciò ogni parte del lavoro che richiede davvero l'ordine va riconosciuta e trattata in altro modo anziché data per scontata.

Il confronto che ci chiedono

Perché questo non è scompattamento diretto

Lo scompattamento diretto è una buona funzione e i client che ce l'hanno ne guadagnano. Risolve però un'altra parte del problema, e la differenza salta fuori esattamente dove conta.

Lo scompattamento diretto comincia a estrarre prima che lo scaricamento sia finito, così la fase tre si sovrappone alla fase uno invece di seguirla. Quello che non fa è eliminare la fase uno. I volumi d'archivio vengono comunque scritti per intero sul tuo disco, perché lo scompattatore è uno convenzionale che legge file convenzionali; lo scompattamento diretto si limita ad avviarlo prima. Le due copie esistono ancora, le due scritture avvengono ancora, e il fabbisogno di spazio libero è immutato.

scrivere i volumi su discospazio libero necessarioquante volte il contenuto viene scritto
Scaricare, poi scompattaresì, poi rilettura~2× il lavoro2
Scompattamento direttosì, riletto prima~2× il lavoro2
Passata unicamai scritti~1× il lavoro1

La seconda differenza è cosa succede quando la forma non è semplice. Poiché lo scompattamento diretto passa il lavoro a uno scompattatore convenzionale via via che i volumi compaiono, gli serve che la situazione sia lineare: volumi presenti in un ordine utilizzabile, nessuna riparazione in sospeso, niente da sbloccare prima, e un archivio i cui contenuti non siano a loro volta archivi. Quando una di queste cose viene a mancare, la cosa sensata da fare è ritirarsi e ripiegare sullo scompattamento alla fine, ed è quello che accade. Ottieni un risultato corretto e i tempi ordinari.

Poiché il nostro estrattore è costruito fin dall'inizio attorno a byte fuori ordine, quelle situazioni non sono eccezioni per lui. È questa la vera distinzione: non che partiamo prima, ma che non ci affidiamo a condizioni che spesso non si verificano.

Cosa le sopravvive davvero

Le forme che regge

Un progetto così vale la pena solo se si applica ai post che incontri davvero, e non a un caso ideale pulito. La posizione attuale: nessun formato contenitore viene gestito solo su disco. RAR, 7z e zip passano tutti per il percorso a passata unica.

formapassata unicanote
RAR, memorizzato (senza compressione)il caso comune per i rilasci multimediali
RAR, compressocompreso un archivio compresso come strato esterno
RAR 1.5, 3, 4 e 5tutte e quattro le generazioni del formato
7zcompresi i contenuti compressi con deflate
zipcompresi i contenuti bzip2 e LZMA
Contenuti cifraticon una password, compreso lo zip cifrato
Intestazioni cifratequando anche i nomi dei file sono nascosti
Catene di passwordla password di ogni strato riposta in quello sopra
Archivi annidatidisannidati al volo, fino a una profondità configurabile
Danneggiato su più stratiriparazione a ogni livello, sempre in una passata
Insiemi divisi numericamentedivisioni in stile name.001
Archivi autoestraentipassata su discol'archivio non comincia all'inizio del file
Zip suddiviso (.z01)passata su discoe alcune varianti di zip più rare
Lavori ripresipassata su discoun lavoro proseguito dopo un riavvio finisce in modo convenzionale

I tre rifiuti sono onesti e si comportano tutti allo stesso modo: il lavoro si conclude correttamente, per la via convenzionale, e per quello scaricamento ottieni i tempi ordinari a due copie. Nulla fallisce; smette soltanto di essere veloce nel modo descritto nel resto di questa pagina. Gli archivi autoestraenti vengono rifiutati per un motivo strutturale e non per scarso impegno: identificare un archivio dai suoi primi byte non può funzionare quando i primi byte sono un programma.

Le righe annidato e cifrato sono quelle da prendere sul serio, perché è lì che la maggior parte dei client ti restituisce il lavoro. Su un corpus generato di dieci forme annidate, valutato per hash del contenuto così che un client che rinomina il contenuto riceva comunque il credito, ne abbiamo completate 9 su 10 senza intervento; il client successivo ne ha completate 5, e altri due ne hanno completate 2. Quella che non completiamo automaticamente è una scala a dieci livelli, che si chiude pulita al limite di profondità predefinito di cinque lasciando lo strato più profondo come archivio sano, e si completa del tutto se alzi il limite. Quelle prove sono nella pagina dei benchmark con la griglia completa.

Perché vale la pena farlo

Cosa porta davvero eliminare il viaggio di ritorno

È più veloce, per un motivo poco affascinante. Scrivere 60 GB e rileggerli non è gratis nemmeno su un disco a stato solido veloce, e su qualsiasi cosa più lenta è spesso il vero collo di bottiglia anziché la rete. Togliere una scrittura e due letture toglie quel tempo dal tuo cronometro per intero. Il guadagno è massimo esattamente dove più si nota: lavori grandi, e macchine il cui disco non è la loro parte più veloce.

Dimezza l'usura. I dischi a stato solido hanno dentro un numero finito di scritture, e uno scaricatore che scrive ogni contenuto due volte consuma quel budget a velocità doppia senza alcun beneficio per te. Su qualche centinaio di terabyte scaricati, che è un anno ordinario per un utente attivo, la differenza è una frazione significativa della vita di un disco.

Cambia cosa ci sta. Lo spazio libero non è una caratteristica di prestazione, è un sì o un no. Un lavoro che richiede il doppio della propria dimensione come margine o gira o non gira. Averne bisogno all'incirca quanto il contenuto significa che i lavori si concludono su macchine e volumi dove l'approccio convenzionale semplicemente si ferma, ed è per questo che un rilascio da 190 GB qui sta in circa 157 GB di spazio libero anziché in circa 313 GB.

Costa meno tempo di processore. Non far passare i dati due volte per il disco elimina il lavoro necessario a farlo, e verificare durante lo scaricamento significa nessuna seconda passata sul contenuto per controllarlo. Il nostro costo di processore resta piatto a circa 1.7 secondi di processore per gigabyte, da un lavoro da 35 GB a uno da 190 GB, ed è questa la proprietà utile: il costo per gigabyte non cresce al crescere del lavoro.

Gira con meno memoria, e con memoria limitata. Poiché i byte vengono consumati appena arrivano anziché accumulati, l'insieme di lavoro è un budget che imposti tu e non una funzione della dimensione del lavoro. È questo che permette di elaborare un rilascio da 190 GB su una macchina con all'incirca 1.1 GB disponibili. La distinzione che conta non è il numero ma la forma: una memoria che cresce col lavoro prima o poi incontrerà un lavoro che la tua macchina non può finire, e fallisce con lo scambio su disco o venendo uccisa anziché avvisandoti.

Nell'insieme queste cose riguardano meno il vincere un benchmark che il dove il software può girare del tutto. Un progetto che richiede metà dello spazio libero, metà delle scritture e una quantità limitata di memoria funziona su un piccolo server domestico, un portatile più vecchio o un NAS, ed è proprio lì che vive buona parte di questo software.

Ogni cifra di questa pagina è misurata e pubblicata con la build e la data accanto nella pagina dei benchmark, comprese le prove che perdiamo. Il contrappeso onesto, dichiarato anche lì: un estrattore e un riparatore costruiti per accompagnare uno scaricamento in corso tengono più memoria residente di uno strumento a sé stante lanciato una volta da riga di comando, quindi se il tuo vincolo è l'impronta più piccola possibile per un lavoro singolo su un file che hai già, gli strumenti dedicati vincono quella colonna.