2010-01-20 55 views
22

Qual è la differenza tra scrittura sequenziale e scrittura casuale in caso di: - 1) sistemi a disco basati 2) SSD [Dispositivo Flash] sistemi basatiDifferenza tra scrittura sequenziale e scrittura casuale

Quando l'applicazione scrive qualcosa e le informazioni/dati devono essere modificati sul disco, quindi come sappiamo se si tratta di una scrittura sequenziale o di una scrittura casuale. Fino a questo punto una scrittura non può essere distinta come "sequenziale" o "casuale". La scrittura è solo bufferizzato e quindi applicato al disco quando svuoteremo il buffer.

Per favore correggimi se sbaglio.

risposta

59

Quando si parla di sequenziale vs casuale scrive in un file, sono generalmente una distinzione tra la scrittura senza cerca intermedia ("sequenziale"), contro un modello di cerca-write-cerca-write -seek-write, ecc. ("random").

La distinzione è molto importante nei tradizionali sistemi basati su disco, in cui ogni ricerca del disco richiederà circa 10 ms. La scrittura sequenziale dei dati su quello stesso disco richiede circa 30ms per MB. Quindi se si scrivono sequenzialmente 100 MB di dati su un disco, ci vorranno circa 3 secondi. Ma se si eseguono 100 scritture casuali di 1 MB ciascuna, ci vorranno un totale di 4 secondi (3 secondi per la scrittura effettiva e 10 ms * 100 == 1 secondo per tutta la ricerca).

Come ogni scrittura casuale si riduce, si paga sempre di più una penalità per la ricerca del disco. Nel caso estremo in cui esegui 100 milioni di scritture a 1 byte casuali, sarai comunque al netto di 3 secondi per tutte le scritture effettive, ma ora avresti il ​​valore di 11.57 giorni da cercare! Quindi chiaramente il grado in cui le tue scritture sono sequenziali o casuali può davvero influenzare il tempo necessario per portare a termine il tuo compito.

La situazione è un po 'diversa quando si tratta di flash. Con il flash, non hai una testina del disco fisica che devi spostare. (Questo è il punto in cui i 10ms cercano il costo per un disco tradizionale). Tuttavia, i dispositivi flash tendono ad avere grandi dimensioni di pagina (la più piccola dimensione di pagina "tipica" è di circa 512 byte in base allo wikipedia e anche le dimensioni di pagina 4K sono comuni). Quindi, se stai scrivendo un piccolo numero di byte, il flash ha ancora un sovraccarico in quanto devi leggere un'intera pagina, modificare i byte che stai scrivendo e quindi riscrivere l'intera pagina. Non conosco i numeri caratteristici del flash in cima alla mia testa. Ma la regola generale è che su flash se ognuna delle tue scritture è generalmente paragonabile in termini di dimensioni alle dimensioni della pagina del dispositivo, quindi non vedrai molta differenza di prestazioni tra le scritture casuali e sequenziali. Se ognuna delle tue scritture è piccola rispetto alle dimensioni della pagina del dispositivo, vedrai un sovraccarico quando scriverò a caso.

Ora per tutto quanto sopra, è vero che a livello di applicazione molto è nascosto da voi. Ci sono dei livelli nel kernel, nel controller disco/flash, ecc. Che potrebbero, ad esempio, interpreire ricerche non ovvie nel mezzo della tua scrittura "sequenziale". Ma nella maggior parte dei casi, la scrittura che "sembra" sequenziale a livello di applicazione (senza ricerca, molti I/O continui) avrà prestazioni di scrittura sequenziale mentre si scrive che "sembra" casuale a livello di applicazione avrà (in genere peggiore) prestazioni di scrittura casuale.