Perché la velocità della mia unità flash rallenta durante la copia?


27

Dopo alcuni minuti di copia, diventa sempre più lento. Perché?

es. inizia con 20 MByte / sec e quando finisce con esso è @ 10 MByte / s.

Vari file, grandi, piccoli, ecc.

AGGIORNAMENTO: la domanda riguarda vari sistemi operativi, quindi è una "domanda generale"


Quanto stai copiando rispetto a quanta memoria libera hai nel tuo computer?
KCotreau,

PC -> USB-FLASH drive: diverse centinaia di GBytes gratuiti -> pochi GBytes gratuiti
LanceBaynes

1
Ho il sospetto che all'inizio hai dei file memorizzati nella cache in modo che si trasferiscano rapidamente, quindi una volta che iniziano a essere spostati dal disco rigido, questo rallenta. Non posso essere sicuro nel tuo caso però.
KCotreau,

quindi mi stai consigliando di usare il comando "sync" più spesso?
LanceBaynes,

Non capisco cosa intendi per comando di sincronizzazione. Non hai dato alcun contesto alla domanda. Non sono nemmeno sicuro di quale sistema operativo.
KCotreau,

Risposte:


25

Questo comportamento non è specifico per la tua unità flash, puoi vederlo anche con i dischi rigidi. Ha a che fare con il meccanismo di memorizzazione nella cache che la maggior parte dei sistemi operativi e dei dischi impiega per accelerare le piccole scritture.

I 20 MB / s che vedi sono i dati che vengono scritti nella cache del disco (di solito memoria veloce ma piccola). Una volta che questa cache è piena, deve essere scaricata sul disco e ora il collo più lento viene bloccato.

Esempio 1: L'effetto è davvero pronunciato quando si dispone di un controller con una cache di grandi dimensioni (come un buon controller RAID5) in cui è possibile memorizzare rapidamente nella cache ~ 500 MB di dati prima di scaricarli sul disco.

Esempio 2: è possibile visualizzare la cache in riproduzione se si estrae l'unità flash contemporaneamente la copia del file "terminata". A questo punto il tuo file viene diviso tra il disco e la cache - quindi la copia è "finita" per quanto riguarda il sistema operativo, ma il controller del disco deve ancora scrivere ciò che è rimasto nella cache sul disco. Se rimetti l'unità flash e controlli il file, vedrai che non è tutto lì.

Dichiarazione di non responsabilità: questi esempi non funzioneranno se la cache di scrittura non è abilitata nel sistema operativo / sul disco.

Inoltre, se è non è la cache del disco al lavoro, allora è probabile che quello che stiamo vedendo è un effetto di frammentazione. Man mano che il disco diventa sempre più pieno, è disponibile uno spazio libero meno contiguo e il file system deve lavorare di più per trovare i luoghi in cui inserire i file.


Ricorda inoltre che si tratta di un'unità flash. L'hardware non è mai stato ottimizzato per la velocità, ma piuttosto accessibile.
surfasb,

Non penso che ciò spiegherebbe perché le prestazioni diminuiscano durante le lunghe copie dei file. Piuttosto le prestazioni diminuirebbero durante la vita dell'unità, sì?
ta.speot.is il

Ha perfettamente senso. Sono ottimizzati per velocità di scoppio, non per operazioni prolungate. Pensa alla dimensione media dei file caricati su unità flash. Ottimizzeresti per un trasferimento di file di 30 secondi o ottimizzeresti per un trasferimento di 2 secondi? Aggiungilo a uno dei tuoi due esempi e questo spiega molto.
surfasb,

È come quando provi a stipare due persone attraverso una porta media alla volta. All'inizio puoi calcolare. Wow, sono passato da zero persone attraverso quella porta a due alla volta. La mia velocità è ottima. Quindi la linea si allunga e il campionamento migliora e finalmente ti rendi conto che piccolo campione = cattiva matematica. . .
surfasb,

@ ta.speot.is Suppongo che questa cache del disco menzionata sia gestita dal sistema operativo sul disco rigido ed è diversa dalla cache hardware che i dischi rigidi hanno internamente, giusto?
sepehr,

1

Sebbene la memorizzazione nella cache causi in parte questo, non è l'unico fattore. Se la memorizzazione nella cache fosse l'unico fattore, ci aspetteremmo che la velocità di scrittura scenda rapidamente da diverse centinaia di MB / s alla velocità di scrittura effettiva dell'unità e rimanga lì per il resto della scrittura. Tuttavia, questo non è ciò che ho osservato durante l'esecuzione di trasferimenti di grandi dimensioni da e verso il disco (ad esempio, la masterizzazione di immagini di avvio). Invece, ciò che osservo è che la velocità diminuisce gradualmente nel corso dell'intera operazione.

Questo rallentamento è causato dalla rimanenza dei dati sui chip flash utilizzati per memorizzare i dati che richiedono la scrittura di alcuni blocchi su più di una volta.

All'interno di un chip flash, ci sono blocchi di dati su cui è possibile scrivere. Durante la scrittura, il computer può fare solo due cose: può cancellare un intero blocco o modificare alcuni (o tutti) i bit in un blocco da 0 a 1.

Tuttavia, alcuni di questi blocchi sono migliori di altri, specialmente nelle unità flash di qualità inferiore e, di conseguenza, quando si scrivono nuovi dati su di esso, alcuni dei bit possono talvolta tornare a 0 da soli subito dopo la scrittura, e don non cambia. Pertanto, quando si scrive su un blocco, il sistema operativo deve verificare che tutti i dati siano stati scritti correttamente e, in caso contrario, è necessario ripetere il blocco scrivendo gli stessi dati nello stesso blocco due o tre volte fino a quando i dati si attaccano.

Quindi, quando il tuo computer sta scrivendo un sacco di dati sull'unità flash, ecco una spiegazione (non completamente accurata, ma abbastanza buona) per come funziona:

  1. Prendi il primo set di blocchi da scrivere e scrivili tutti.
  2. Leggi tutti i blocchi che abbiamo appena scritto e crea un elenco di quelli che non corrispondono
  3. Scrivi la prossima serie di blocchi, insieme a quelli che non sono stati scritti correttamente l'ultima volta.
  4. Ripeti 2-3 finché tutti i blocchi non sono stati scritti correttamente.

Quando il computer sta scrivendo sull'unità, sta segnalando la velocità con cui sta scrivendo blocchi sull'unità per la prima volta. Dal momento che dovrà anche riscrivere i blocchi precedenti contemporaneamente, il throughput totale che può essere utilizzato per i blocchi vergini diminuisce con l'aumentare del numero di riscritture che devono avvenire. Pertanto, la velocità di scrittura apparente diminuisce nel tempo.


Sto scrivendo un file 7zip da 12 Gig su una nuovissima unità flash USB 3.0 formattata come NTFS. Stava andando a circa 100 MB / s per il primo minuto, quindi è sceso a 25ish MB / s per circa un minuto, quindi è sceso a 11 o giù di lì per circa 10 minuti. Non era una pendenza graduale verso il basso, erano 3 altipiani distinti.
Eric,

Stavo copiando l'archivio dal mio vecchio laptop i7 con 16 GB di RAM. La copia di questo stesso archivio 7zip dallo stesso thumbdrive sul mio nuovo laptop Xeon con 32 GB di RAM ha richiesto 2 minuti e non si è verificato alcun calo di velocità.
Eric,

0

Quando il file viene scritto su un'unità, sia essa un'unità flash USB o un disco rigido, i dati NON vengono / MAI riletti per vedere se corrispondono. Ci vorrebbe per sempre. la verifica della scrittura viene eseguita dall'hardware (controllo di ridondanza ciclica) e se si verifica un errore, viene registrato nuovamente nell'applicazione dall'hardware rilevato un errore. Lo stallo che si verifica e rallenta (anche fino a una pausa) è causato dalla scrittura della CPU più veloce di quanto il dispositivo possa gestirla. Non è possibile che ciò accada sui dischi rigidi interni. Non vedrai mai cosa sta realmente accadendo su un sistema operativo Windows ma su Linux puoi effettivamente vedere che la CPU si mette in pausa fino a quando l'hardware USB non dice OK per continuare


La differenza nelle velocità di scrittura di diversi dispositivi di archiviazione può essere estrema, ad esempio confrontare la velocità di scrittura di una vecchia scheda SD con la velocità di scrittura di un SSD SATA III.
karel

3
Si prega di astenersi da insulti personali. Sebbene il tuo post possa essere corretto, devi modificarlo per renderlo conforme ai nostri standard della community.
Ben N
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.