¿Por qué la velocidad de mi unidad flash disminuye al copiar?

¿Por qué la velocidad de mi unidad flash disminuye al copiar?

Después de unos minutos de copiar, se vuelve cada vez más lento. ¿Por qué?

Por ejemplo, comienza con 20 MByte/seg y cuando termina, es @10 MByte/s.

Varios archivos, grandes, pequeños, etc.

ACTUALIZACIÓN: la pregunta se refiere a varios sistemas operativos, por lo que es una "pregunta general"

Respuesta1

Este comportamiento no es específico de su unidad flash; también puede verlo en los discos duros. Tiene que ver con el mecanismo de almacenamiento en caché que emplean la mayoría de los sistemas operativos y discos para acelerar las escrituras pequeñas.

Los 20 MB/s que ves son los datos que se escriben en la memoria caché del disco (normalmente memoria rápida pero pequeña). Una vez que este caché esté lleno, debe vaciarse en el disco, y ahora el disco más lento lo obstaculizará.

Ejemplo 1: El efecto es realmente pronunciado cuando se tiene un controlador con un caché grande (como un buen controlador RAID5) donde se pueden almacenar en caché ~500 MB de datos rápidamente antes de que deban vaciarse en el disco.

Ejemplo 2: Puede ver el caché en funcionamiento si extrae la unidad flash al mismo tiempo que "termina" la copia del archivo. En este momento, su archivo está dividido entre el disco y el caché, por lo que la copia está "terminada" en lo que respecta al sistema operativo, pero el controlador del disco aún necesita escribir lo que queda en el caché en el disco. Si vuelve a colocar la unidad flash e inspecciona el archivo, verá que no está todo allí.

Descargo de responsabilidad: estos ejemplos no funcionarán si no tiene habilitado el almacenamiento en caché de escritura en su sistema operativo/en el disco.

Además, si esnoalmacenamiento en caché de disco en funcionamiento, es probable que lo que esté viendo sea un efecto de fragmentación. A medida que el disco se llena cada vez más, hay menos espacio libre contiguo disponible y el sistema de archivos tiene que trabajar más para encontrar lugares donde colocar sus archivos.

Respuesta2

Si bien el almacenamiento en caché causa algo de esto, no es el único factor. Si el almacenamiento en caché fuera el único factor, entonces esperaríamos que la velocidad de escritura cayera rápidamente de varios cientos de MB/s a la velocidad de escritura real de la unidad muy rápidamente y permaneciera allí durante el resto de la escritura. Sin embargo, esto no es lo que he observado al realizar grandes transferencias hacia y desde el disco (por ejemplo, grabar imágenes de arranque). En cambio, lo que observo es que la velocidad disminuye gradualmente a lo largo de toda la operación.

Esta desaceleración se debe a la remanencia de datos en los chips flash utilizados para almacenar los datos, lo que requiere que algunos de los bloques se escriban más de una vez.

Dentro de un chip flash, hay un bloque de datos en los que se puede escribir. Al escribir, sólo hay dos cosas que la computadora puede hacer: puede borrar un bloque completo o cambiar algunos (o todos) los bits de un bloque de 0 a 1.

Sin embargo, algunos de esos bloques son mejores que otros, especialmente en unidades flash de menor calidad y, como resultado, al escribir nuevos datos en ellos, algunos de los bits a veces pueden volver a 0 por sí solos inmediatamente después de escribirse, y no No cambia. Por lo tanto, al escribir en un bloque, el sistema operativo debe verificar que todos los datos se escribieron correctamente y, si no fue así, debe rehacer el bloque escribiendo los mismos datos en el mismo bloque dos o tres veces. hasta que los datos se queden.

Entonces, cuando su computadora escribe una gran cantidad de datos en la unidad flash, aquí hay una explicación (no completamente precisa, pero sí lo suficientemente buena) de cómo lo hace:

  1. Tome el primer conjunto de bloques que desea escribir y escríbalos todos.
  2. Vuelve a leer todos los bloques que acabamos de escribir y haz una lista de los que no coinciden.
  3. Escribe el siguiente conjunto de bloques, junto con los que no se escribieron correctamente la última vez.
  4. Repita 2-3 hasta que todos los bloques se hayan escrito correctamente.

Cuando la computadora escribe en la unidad, informa la velocidad a la que escribe bloques en la unidad por primera vez. Dado que también tendrá que reescribir bloques anteriores al mismo tiempo, el rendimiento total que se puede utilizar para bloques vírgenes disminuye a medida que aumenta el número de reescrituras que también deben realizarse. Por tanto, la velocidad de escritura aparente disminuye con el tiempo.

Respuesta3

Estaba sufriendo esto en OSX y logré mejorar las cosas significativamente. Primero, impidí que Spotlight Index intentara indexar la unidad de destino. Luego detuve la generación de miniaturas en la unidad de destino (copiando imágenes de 55K)

Y finalmente dejé de usar la GUI y cambié a la línea de comando usando rsync -a source target

Probablemente haya cosas similares que puedas hacer con otros sistemas operativos en este sentido.

Respuesta4

Cuando se escribe un archivo en una unidad, ya sea una unidad flash USB o un disco duro, los datos NO/NUNCA se vuelven a leer para ver si coinciden. Eso llevaría una eternidad. La verificación de la escritura la realiza el hardware (verificación de redundancia cíclica) y, si se produce un error, se envía a la aplicación desde el hardware que detectó un error. El estancamiento que se produce y se ralentiza (incluso hasta una pausa) se debe a que la CPU escribe más rápido de lo que el dispositivo puede manejar. No encontrará que esto suceda con los discos duros internos. Nunca verás lo que realmente está sucediendo en un sistema operativo Windows, pero en Linux puedes ver que la CPU se detiene hasta que el hardware USB dice OK para continuar.

información relacionada