Memorias USB: la carga no se puede ignorar





En Internet, hubo un motín llamado "¿Por qué cargar una unidad flash USB?". A primera vista, es gracioso, pero me propongo pensar de nuevo y comprender el problema. Después de leer este artículo, también comenzará a cargar sus unidades flash.



Personalmente, el diseñador jefe de una de las empresas de la industria radioelectrónica eliminó el enlace al artículo con la frase "¿quieres relinchar?"



Un par de enlaces relacionados:





Por supuesto, me reí, pero no por lo que pensabas. Tuve que participar en el desarrollo de unidades de estado sólido basadas en memoria flash NAND, incluso para memorias USB. A primera vista, para una persona experta en tecnología, parece obvio que conectar la unidad al cargador no tiene sentido, ya que además de suministrar energía, no se realizan otras acciones con la unidad, por lo tanto, no obtendremos nada más que disipación de calor. En Internet hay muchas "revelaciones" diferentes, risas e incluso bromas sobre los pobres humanitarios que preguntan si vale la pena cargar unidades flash. Puede que se rían, pero vi con mis propios ojos cómo los desarrolladores de unidades flash "cargaron" sus productos instalándolos en cargadores durante un tiempo.



Una unidad flash USB es un dispositivo de almacenamiento en bloque: todo el espacio de direcciones se divide en sectores de 512 bytes. El sistema operativo puede acceder a la dirección de un sector específico (LBA) y leerlo o sobrescribirlo, todo es simple.



Ahora echemos un vistazo debajo del capó de nuestra unidad flash ...



La unidad flash incluye microcircuitos:



  • controlador;
  • Memoria flash NAND.


Los microcircuitos de memoria están organizados de una manera bastante específica en términos de direccionamiento, escritura y almacenamiento de datos, que está dictado por su arquitectura (y debemos amarlo como es). Las siguientes reglas están definidas para NAND-flash:



  • La memoria se divide en bloques del orden de Megabytes;
  • Antes de escribir en un bloque de memoria, debe borrarse. Al borrar, todos los bytes de datos del bloque se establecen en 0xFF;
  • El bloque consta de páginas, de decenas de kilobytes de tamaño;
  • , ;
  • ;
  • .


Aquí, este conjunto de reglas convierte una acción tan simple (desde el punto de vista del usuario) como escribir un sector en una unidad flash USB en un verdadero rompecabezas para el desarrollador del controlador de esta misma unidad flash.







Intenta imaginar cómo solucionarías este problema y verás similitudes con el juguete Tower of Hanoi .



Con el fin de "hacer amigos" el direccionamiento en bloque fácil de usar de la unidad y el direccionamiento amigable para los sádicos de la memoria flash NAND, un procesador gira dentro del controlador de la unidad flash, que implementa el algoritmo de traducción de direcciones, también conocido como FTL (Flash Translation Layer). Las tareas del algoritmo FTL incluyen:



  • construir y mantener una tabla de mapeo de páginas;
  • Recolección de basura;
  • nivelación de desgaste de bloques de memoria flash NAND.


Las personas conocedoras dirán que también hay otras tareas, como rastrear bloques defectuosos de memoria flash NAND (administración de bloques defectuosos), pero no quiero hablar de esto ahora, porque no se aplica al caso actual ...



Un pequeño programa educativo sobre los puntos indicados :



Mapeo de páginas



Bueno, aquí, tal vez, todo está claro ... El espacio de direcciones lógicas de la unidad (LBA) se traduce en las direcciones de bloques y páginas de memoria flash NAND (dirección física) a través de una matriz enorme, cuyo índice significa LBA, y el valor del elemento es la dirección física. Si es necesario reescribir una página, los datos de esta página se escriben en un bloque libre en orden y luego, en la matriz, el número de página se reemplaza por el recién escrito. Cuando un alumno compra una unidad flash de 32 GB y descubre que solo tiene 29 GB, el alumno aún no sabe que no fueron los chinos quienes robaron el espacio faltante en la fábrica, sino los desarrolladores del algoritmo FTL. Para poder escribir datos en la unidad.







Recolección de basura



¿Y qué pasará con la página que ha perdido su relevancia? Los datos escritos en él ya no son necesarios, pero no podemos borrarlos, porque el borrado solo está permitido en bloques, y en el mismo bloque puede que todavía haya páginas reales. Tarde o temprano, se desarrollará una situación en la que ya no tengamos bloques libres en los que podamos escribir páginas. Pero, en los bloques restantes, aquí y allá habrá páginas irrelevantes. Para evitar que esto suceda, las unidades ejecutan la funcionalidad de un "recolector de basura", que se ocupa de encontrar bloques "con fugas", que tienen el menor número de páginas relevantes, y transfiere las páginas reales a un nuevo bloque. Por lo tanto, el bloque "con fugas" se libera por completo de las páginas reales y se puede borrar ... Y en el nuevo bloque, todas las páginas siguen siendo relevantes. Con reminiscencias de la desfragmentación.







Nivelación de desgaste



Nada dura para siempre bajo la luna, especialmente el flash NAND. Dio la casualidad de que la memoria flash NAND tiene un recurso limitado, que se expresa mediante un número limitado de ciclos de borrado de bloques (antigüedad del bloque). Los bloques que se han borrado más veces (bloques viejos) tienen más probabilidades de fallar que los menos gastados (bloques jóvenes).



¿Alguna vez ha pensado en mover la tabla FAT de las direcciones cero de la unidad a otro lugar para no hacer un agujero en el espacio de direcciones de la unidad flash? Esto es poco probable y no debe pensarse en ello. Porque un mecanismo de nivelación del desgaste del bloque funciona en la unidad flash. Su esencia es que los bloques jóvenes se ven obligados a intercambiar lugares con los viejos, de modo que el desgaste de todos los bloques sea uniforme durante el funcionamiento del variador. Por lo tanto, la unidad tiene la oportunidad de vivir feliz para siempre hasta que todos sus bloques mueran en un día.







Y ahora lo principal: ¿por qué "cargar" la unidad flash?



1) ¿Alguna vez has tenido una situación en la que te vas a lavar los calcetines todos los días, pero todas las noches resulta que no estás a la altura? ¡Y luego llega un momento en el que simplemente no quedan calcetines limpios para mañana! Y luego tienes que sacrificar el sueño para lavarte los calcetines. Es incluso peor si tienes que llegar tarde al trabajo con un secador de pelo en la mano.



Lo mismo sucede con el algoritmo de recolección de basura en FTL. El usuario a menudo usa una unidad flash USB para transferir algunos datos de una computadora a otra. En este caso, el escenario de acciones es el siguiente: conecte la unidad flash USB a la computadora - escriba archivos rápidamente - extraiga la unidad flash USB - ejecute a otra computadora - conecte la unidad flash USB - lea los archivos. Después de un tiempo, el usuario comienza a notar que su disco es lento. Por lo general, en tales casos, pecan en el hecho de que “bueno, es solo una unidad flash vieja y barata. ¡Aquí, compraré uno nuevo, volará! " ¡Y realmente lo será! Pero ella, muy probablemente, sufrirá la misma suerte después de algún tiempo. El hecho es que el escenario de tales "cortometrajes" no permite que el algoritmo de recolección de basura libere bloques para escribir, lo que tarde o temprano conducirá al hecho de que simplemente no habrá más bloques libres.Y luego el controlador se ve obligado a lidiar primero con la liberación de bloques y luego solo escribir sus archivos en ellos, de ahí la pérdida de velocidad. Para estar listo para recibir sus datos a toda velocidad, la unidad necesita tiempo libre para "lavar calcetines" de antemano. Como puede imaginar, "cargar" la unidad flash elimina este problema, lo que le da al controlador suficiente tiempo para restaurar el orden en los datos.







2) El problema de la falta de "tiempo personal" del controlador también es relevante para el algoritmo de nivelación del desgaste. El algoritmo de nivelación de desgaste lo realiza el controlador cuando la unidad está inactiva, mientras que no hay tareas para escribir o leer datos de usuario. Si la unidad funciona en el modo "cortometrajes", entonces simplemente no hay tiempo para nivelar el desgaste del bloque. El desgaste desigual de los bloques conduce al hecho de que los bloques viejos fallan. Al mismo tiempo, el número de bloques disponibles para escribir disminuye hasta que llega un momento crítico en el que simplemente no habrá ningún bloque libre para escribir, aunque la memoria flash NAND en su conjunto aún no está agotada y podría funcionar durante mucho tiempo.







3) La evolución nos ha enseñado a enterrar los objetos valiosos en algún lugar alejado de los pasajes. Esto funciona bien para tesoros e islas deshabitadas. Pero lo contrario es cierto para los datos digitales y NAND. Seguramente, ha tenido casos en los que lanzó algunas fotos de la boda de un amigo en una unidad flash, la unidad flash estuvo en un cajón durante un año (como le pareció, sano y salvo), y luego algunas de las fotos solo se leyeron a medias. El hecho es que la información una vez registrada en la memoria flash NAND puede "pudrirse" con el tiempo. El fabricante de la memoria no garantiza la retención de datos al 100%, sino que simplemente anuncia la probabilidad de errores de bits.



Por supuesto, el controlador de la unidad resuelve el problema de eliminar los errores de bits agregando código redundante a los datos, pero no importa cuán grande sea este código, con el tiempo, la carga en las celdas de memoria NAND se disuelve y el número de errores de bits puede exceder cualquier capacidad de corrección. No puede dejar datos durante mucho tiempo solos en la memoria flash NAND, debe cuidarlos. Es decir, sobrescribir periódicamente. El controlador correcto lee periódicamente los datos, verifica el número de errores de bit y reescribe los datos si es necesario (hasta que el número de errores de bit excede el valor permitido). Por supuesto, el controlador también necesita "tiempo libre" para ello.



De todo lo anterior, voy a resumir: no dudes en "cargar" las unidades flash, esto tiene un efecto beneficioso en su velocidad y confiabilidad. Y si los técnicos te golpean, solo dales un enlace a este artículo.



All Articles