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

4

¿Qué es lo que otorga a algunas tarjetas SD / MMC una clasificació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 al diseño de un registrador de datos en el que estoy trabajando que almacena datos (a menudo en ráfagas) en unos pocos 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, desgraciadamente, no tengo una fab.).

    
pregunta davidcary

2 respuestas

3

Además del hecho de que algunos dispositivos flash pueden escribir más bits en paralelo, otro factor que afecta la velocidad es la forma en que se realiza la recolección de basura. Una de las principales fuentes de desaceleración en las unidades flash se debe al hecho de que la mayoría de los dispositivos flash no permiten que las páginas de 512 bytes se borren y se vuelvan a escribir; 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, escriba "Soy el bloque 23" junto con los nuevos datos, luego encuentre el bloque viejo 23 y márquelo como no válido. Si el número de páginas vacías es demasiado bajo, el dispositivo verificará si hay algún bloque borrable que no contenga páginas válidas. Si no, encontrará una que tenga muy pocas páginas válidas y moverá 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 pueden volver a agregar al grupo 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 cuando. Es posible diseñar esquemas bastante simples que se pueden implementar en un micro pequeño con RAM limitada, pero el rendimiento puede no ser excelente (por ejemplo, puede tener que leer repetidamente el flash para identificar bloques para la recolección de basura, y puede colocar bloques de datos sin tener en cuenta) por si es probable que se vuelvan "obsoletos" pronto). A la inversa, si el controlador tiene una cantidad generosa de RAM disponible, puede hacer un mejor trabajo para identificar qué bloques deben recolectarse en la basura y también puede almacenar bloques de datos con otros bloques que tendrán otros recursos útiles. tiempos de vida.

Por cierto, considero desafortunado que las unidades de estado sólido no se hayan estandarizado en algún tipo de sistema de archivos en el nivel del controlador (lo que significa que en lugar de solicitar el bloque # 1951331825, el software solicitaría los bloques 4-8 del archivo # 1934129) . Una unidad flash que sabía cómo se almacenaba la información en los archivos podría tomar decisiones mucho mejores sobre qué datos se deberían colocar juntos que una 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 los datos. integridad bajo condiciones adversas.

    
respondido por el supercat
3

Estoy bastante seguro de que Olin lo tiene clavado 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 los bits de acceso en serie, pero estas cosas ocurren 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 realizarse a 10 MB / s. El problema aquí es que, en general, esto hace que las celdas flash sean más caras porque necesita más líneas entre cada capa, por lo que 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 los bits individuales en una dirección (no recuerdo si esto es alto a bajo o bajo a alto), 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 intenta escribir y luego escribirá los nuevos datos. Esto ralentiza la transacción, pero si en cambio marcó esa celda para borrar más tarde y luego escribió en una celda diferente que había sido borrada 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 estás escribiendo en flash chips. Whoops! 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 podría hacer sería una 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. Teóricamente podría aumentar su rendimiento N veces donde N es el número de tarjetas, siempre que los datos llegaron a una velocidad en la que podía esperar que la primera tarjeta terminara de escribirse en el momento en que terminara de enviar el comando de escritura a la tarjeta N.

La desventaja de esto es que necesitarías N interfaces de tarjeta SD que funcionen, y sería un poco molesto tener datos dentro y fuera de él.

    
respondido por el Kit Scuzz

Lea otras preguntas en las etiquetas