¿Qué le da a algunas memorias flash una calificación de velocidad más alta que otras memorias flash?

¿Qué le da a algunas tarjetas SD/MMC una calificación de clase de velocidad mucho más alta que otras tarjetas SD/MMC?

¿Por qué algunos "discos" de estado sólido (SSD) son mucho más rápidos que otros SSD?

Espero poder tomar al menos algunas de las ideas para almacenar datos más rápido y aplicar esas ideas a un diseño de registrador de datos en el que estoy trabajando que almacena datos (a menudo en ráfagas) en algunos chips flash.

(Las ideas que involucran el rediseño de celdas de memoria flash y la fabricación de nuevos chips flash para que funcionen más rápido son interesantes, pero no son tan útiles para mí ya que, lamentablemente, no tengo una fábrica).

relacionado: MicroSD con ECC .
Creo que es una combinación de la tecnología de memoria en sí y cuántos bits se escriben en paralelo. El segundo es algo que puede hacer por su cuenta hasta cierto punto. En otras palabras, más dispositivos que funcionan en paralelo aumentan la velocidad de escritura promedio por byte.

Respuestas (2)

Además del hecho de que algunos dispositivos flash son capaces de escribir más bits en paralelo, otro factor que afecta la velocidad es la forma en que se realiza la recolección de elementos no utilizados. Una de las mayores fuentes de ralentización en las unidades flash proviene del hecho de que la mayoría de los dispositivos flash no permiten borrar y reescribir páginas de 512 bytes; en cambio, requieren que las operaciones de borrado operen en áreas mucho más grandes (por ejemplo, 32 KB o más). Si se le pide a un dispositivo que reescriba el bloque 23, encontrará una página vacía, escribirá "Soy el bloque 23" junto con los nuevos datos, luego encontrará el antiguo bloque 23 y lo marcará como no válido. Si el número de páginas vacías es demasiado bajo, el dispositivo comprobará si hay algún bloque borrable que no contenga páginas válidas. Si no, encontrará uno que tenga muy pocas páginas válidas, y mueva cada página a una página en blanco en algún otro bloque (invalidando las antiguas a medida que avanza). Una vez que se ha encontrado un bloque que no tiene páginas válidas, ese bloque se puede borrar y todas sus páginas se vuelven a agregar al conjunto de páginas en blanco.

Se pueden usar muchos esquemas para realizar un seguimiento de cómo se asignan las páginas y determinar qué bloques se deben reciclar y cuándo. Es posible diseñar esquemas bastante simples que se pueden implementar en un pequeño micro con RAM limitada, pero el rendimiento puede no ser muy bueno (por ejemplo, puede que tenga que leer repetidamente el flash para identificar bloques para la recolección de basura, y puede colocar bloques de datos sin tener en cuenta para saber si es probable que se vuelvan "obsoletos" pronto). Por el contrario, si el controlador tiene una cantidad generosa de RAM disponible, es posible que pueda hacer un mejor trabajo al identificar qué bloques se deben recolectar basura y cuándo, y también puede almacenar bloques de datos con otros bloques que tendrán una utilidad similar. vidas

Por cierto, considero desafortunado que las unidades de estado sólido no se hayan estandarizado en algún tipo de sistema de archivos a nivel del controlador (lo que significa que en lugar de solicitar el bloque n.º 1951331825, el software solicitaría los bloques 4-8 del archivo n.º 1934129). Una unidad flash que supiera cómo se almacena la información en los archivos podría tomar decisiones mucho mejores sobre qué datos deben colocarse juntos que uno que simplemente tiene que lidiar con escrituras aparentemente independientes en varios sectores, y también podría hacer un trabajo más efectivo para garantizar que los datos integridad en condiciones adversas.

Estoy bastante seguro de que Olin lo tiene claro en su comentario allí: la idea es que puede aumentar la velocidad accediendo a más bits en paralelo o disminuir el número de pines y acceder a los bits en serie, pero estas cosas suceden internamente. La forma en que obtiene un dispositivo de clase 10 es que el controlador interno toma el comando de escritura y accede a suficientes celdas flash en paralelo para que el borrado y la reescritura puedan ocurrir a 10 MB/s. El problema aquí es que, en general, esto hace que apilar celdas flash sea más costoso porque necesita más líneas entre cada capa, razón por la cual las tarjetas micro-SD son mucho más caras en las clases más altas.

La otra forma en que puede aumentar las velocidades es mediante el borrado previo de celdas. El problema es que solo puede cambiar bits individuales en una dirección (no recuerdo si esto es de mayor a menor o de menor a mayor), y la otra dirección requiere que borre toda la celda. Entonces, en general, cuando intenta escribir 512 bytes, la tarjeta SD borrará el bloque en el que está tratando de escribir y luego escribirá los nuevos datos. Esto ralentiza la transacción, pero si marca esa celda para borrarla más tarde y luego escribe en una celda diferente que se había borrado previamente, sucedería mucho más rápido. Luego, el IC de control puede pasar y borrar previamente las celdas marcadas cuando está inactivo.

Aaaa y escribí todo este blob como si estuvieras hablando con tarjetas SD, pero dijiste que estabas escribiendo con chips flash. ¡Vaya! El consejo para el borrado previo de celdas debería seguir siendo válido si tiene ese nivel de control sobre los chips flash. Cualquiera puede sentirse libre de corregirme si me equivoco, ¡y espero que eso ayude!


Editar: mirando las etiquetas, parece que en realidad podría estar preguntando acerca de las tarjetas SD, en cuyo caso, lo único que realmente podría hacer sería la paralelización externa. Esencialmente, estaría implementando un RAID 0 donde el primer byte va a la primera tarjeta SD, el segundo byte a la segunda tarjeta SD, etc. En teoría, podría aumentar su rendimiento N veces, donde N es la cantidad de tarjetas, siempre que los datos llegaron a una velocidad en la que cabría esperar que la primera tarjeta hubiera terminado de escribirse cuando terminó de enviar el comando de escritura a la tarjeta N.

La desventaja de esto es que necesitaría N interfaces de tarjeta SD en funcionamiento, y sería un poco molesto obtener datos dentro y fuera de ella.

De hecho, estoy preguntando sobre el control directo de los chips flash. Me encantaría aprender alguna otra forma de almacenar en flash y leer desde flash realmente rápido, incluso si ninguna tarjeta SD usa ese método. +1 por un par de ideas de aceleración.
Sí, creo que las partes más importantes serán los métodos de estilo SSD en los que reasignas las celdas y borras previamente (como dijo Supercat para la reasignación). Entonces, como estaba diciendo para las tarjetas SD, cuanto más escribas en paralelo, más rápido serás. La única otra cosa es que si el chip flash le permite escribir un bloque completo simultáneamente, también querrá intentarlo (es decir, si se almacena en búfer y luego espera un comando de confirmación para hacerlo). ¡Buena suerte!