La amplificación de escritura ( WA ) es un fenómeno indeseable asociado con la memoria flash y las unidades de estado sólido (SSD) donde la cantidad real de información escrita físicamente en el medio de almacenamiento es un múltiplo de la cantidad lógica que se pretende escribir.
Debido a que la memoria flash debe borrarse antes de poder reescribirse, con una granularidad mucho más gruesa de la operación de borrado en comparación con la operación de escritura, [a] el proceso para realizar estas operaciones da como resultado mover (o reescribir) datos y metadatos del usuario más de una vez. . Por lo tanto, reescribir algunos datos requiere leer, actualizar y escribir una parte de la memoria flash ya utilizada en una nueva ubicación, además de borrar inicialmente la nueva ubicación si se usó anteriormente. Debido a la forma en que funciona la memoria flash, se deben borrar y reescribir porciones de memoria flash mucho mayores de las que realmente requiere la cantidad de datos nuevos. Este efecto multiplicador aumenta la cantidad de escrituras necesarias durante la vida útil del SSD, lo que acorta el tiempo que puede operar de manera confiable. El aumento de escrituras también consume ancho de banda en la memoria flash, lo que reduce el rendimiento de escritura en el SSD. [1] [3] Muchos factores afectarán el WA de un SSD; algunos pueden ser controlados por el usuario y otros son el resultado directo de los datos escritos y el uso del SSD.
Intel y SiliconSystems (adquirida por Western Digital en 2009) utilizaron el término amplificación de escritura en sus artículos y publicaciones en 2008. [4] WA generalmente se mide por la proporción de escrituras comprometidas en la memoria flash con respecto a las escrituras provenientes del sistema host. Sin compresión , WA no puede caer por debajo de uno. Usando compresión, SandForce ha afirmado lograr una amplificación de escritura de 0,5, [5] con valores en el mejor de los casos tan bajos como 0,14 en el controlador SF-2281. [6]
Debido a la naturaleza del funcionamiento de la memoria flash, los datos no se pueden sobrescribir directamente como ocurre en una unidad de disco duro . Cuando los datos se escriben por primera vez en un SSD, todas las celdas comienzan en un estado borrado para que los datos se puedan escribir directamente usando páginas a la vez (a menudo de 4 a 8 kilobytes (KB) [actualizar]de tamaño). El controlador SSD del SSD, que administra la memoria flash y las interfaces con el sistema host, utiliza un sistema de mapeo lógico a físico conocido como direccionamiento de bloques lógicos (LBA) que forma parte de la capa de traducción flash (FTL). [7] Cuando nuevos datos reemplazan los datos más antiguos ya escritos, el controlador SSD escribirá los nuevos datos en una nueva ubicación y actualizará la asignación lógica para que apunte a la nueva ubicación física. Los datos de la ubicación anterior ya no son válidos y deberán borrarse antes de poder volver a escribir en esa ubicación. [1] [8]
La memoria flash se puede programar y borrar sólo un número limitado de veces. Esto a menudo se conoce como el número máximo de ciclos de programación/borrado (ciclos P/E) que puede sostener durante la vida útil de la memoria flash. El flash de celda de un solo nivel (SLC), diseñado para un mayor rendimiento y una mayor resistencia, normalmente puede funcionar entre 50.000 y 100.000 ciclos. A partir de 2011 [actualizar], la memoria flash de celda multinivel (MLC) está diseñada para aplicaciones de menor costo y tiene un recuento de ciclos muy reducido, normalmente entre 3000 y 5000. Desde 2013, la memoria flash de celda de triple nivel (TLC) (por ejemplo, 3D NAND) está disponible, y el recuento de ciclos se reduce a 1000 ciclos de borrado de programa (P/E). Es más deseable una amplificación de escritura menor, ya que corresponde a un número reducido de ciclos P/E en la memoria flash y, por lo tanto, a una mayor vida útil del SSD. [1] El desgaste de la memoria flash también puede causar una degradación del rendimiento, como una degradación de la velocidad de E/S.
La amplificación de escritura siempre estuvo presente en los SSD antes de que se definiera el término, pero fue en 2008 que tanto Intel [4] [9] como SiliconSystems comenzaron a utilizar el término en sus artículos y publicaciones. [10] Todos los SSD tienen un valor de amplificación de escritura y se basa tanto en lo que se está escribiendo actualmente como en lo que se escribió anteriormente en el SSD. Para medir con precisión el valor de un SSD específico, la prueba seleccionada debe ejecutarse durante el tiempo suficiente para garantizar que la unidad haya alcanzado una condición de estado estable . [3]
Una fórmula sencilla para calcular la amplificación de escritura de un SSD es: [1] [11] [12]
Las dos cantidades utilizadas para el cálculo se pueden obtener mediante estadísticas SMART (ATA F7/F8; [13] ATA F1/F9).
Muchos factores afectan la amplificación de escritura de un SSD. La siguiente tabla enumera los factores principales y cómo afectan la amplificación de escritura. Para los factores que son variables, la tabla indica si tiene una relación directa o una relación inversa . Por ejemplo, a medida que aumenta la cantidad de sobreaprovisionamiento, la amplificación de escritura disminuye (relación inversa). Si el factor es una función de alternancia ( activada o desactivada ), entonces tiene una relación positiva o negativa . [1] [7] [14]
Los datos se escriben en la memoria flash en unidades llamadas páginas (compuestas por varias celdas). Sin embargo, la memoria sólo se puede borrar en unidades más grandes llamadas bloques (compuestas por varias páginas). [2] Si los datos de algunas de las páginas del bloque ya no son necesarios (también llamadas páginas obsoletas), solo las páginas con buenos datos en ese bloque se leen y se reescriben en otro bloque vacío previamente borrado. [3] Luego, las páginas libres que quedan al no mover los datos obsoletos están disponibles para datos nuevos. Este es un proceso llamado recolección de basura (GC). [1] [11] Todos los SSD incluyen algún nivel de recolección de basura, pero pueden diferir en cuándo y qué tan rápido realizan el proceso. [11] La recolección de basura es una parte importante de la amplificación de escritura en el SSD. [1] [11]
Las lecturas no requieren un borrado de la memoria flash, por lo que generalmente no están asociadas con la amplificación de escritura. En la limitada posibilidad de que se produzca un error de perturbación de lectura , los datos de ese bloque se leen y se reescriben, pero esto no tendría ningún impacto material en la amplificación de escritura de la unidad. [15]
El proceso de recolección de basura implica leer y reescribir datos en la memoria flash. Esto significa que una nueva escritura desde el host requerirá primero una lectura de todo el bloque, una escritura de las partes del bloque que aún incluyen datos válidos y luego una escritura de los nuevos datos. Esto puede reducir significativamente el rendimiento del sistema. [16] Muchos controladores SSD implementan recolección de basura en segundo plano ( BGC ), a veces llamada recolección de basura inactiva o recolección de basura en tiempo de inactividad ( ITGC ), donde el controlador usa el tiempo de inactividad para consolidar bloques de memoria flash antes de que el host necesite escribir nuevos datos. Esto permite que el rendimiento del dispositivo se mantenga alto. [17]
Si el controlador recolectara basura en segundo plano todos los bloques de repuesto antes de que fuera absolutamente necesario, se podrían escribir nuevos datos escritos desde el host sin tener que mover ningún dato por adelantado, permitiendo que el rendimiento funcione a su máxima velocidad. La desventaja es que el host no necesita algunos de esos bloques de datos y eventualmente se eliminarán, pero el sistema operativo no le dijo esta información al controlador (hasta que se introdujo TRIM). El resultado es que los datos que pronto se eliminarán se reescriben en otra ubicación de la memoria flash, lo que aumenta la amplificación de escritura. En algunos de los SSD de OCZ, la recolección de basura en segundo plano limpia solo una pequeña cantidad de bloques y luego se detiene, lo que limita la cantidad de escrituras excesivas. [11] Otra solución es tener un sistema de recolección de basura eficiente que pueda realizar los movimientos necesarios en paralelo con las escrituras del host. Esta solución es más efectiva en entornos con mucha escritura donde el SSD rara vez está inactivo. [18] Los controladores SandForce SSD [16] y los sistemas de Violin Memory tienen esta capacidad. [14]
En 2010, algunos fabricantes (en particular Samsung) introdujeron controladores SSD que ampliaron el concepto de BGC para analizar el sistema de archivos utilizado en el SSD, para identificar archivos eliminados recientemente y espacio no particionado . Samsung afirmó que esto garantizaría que incluso los sistemas (sistemas operativos y hardware de controlador SATA) que no son compatibles con TRIM puedan lograr un rendimiento similar. El funcionamiento de la implementación de Samsung parecía asumir y requerir un sistema de archivos NTFS . [19] No está claro si esta característica todavía está disponible en los SSD que se venden actualmente de estos fabricantes. Se ha informado de corrupción de datos sistémicos en estas unidades si no están formateadas correctamente con MBR y NTFS. [ cita necesaria ]
TRIM es un comando SATA que permite al sistema operativo indicarle a un SSD qué bloques de datos previamente guardados ya no son necesarios como resultado de la eliminación de archivos o el formateo de volúmenes. Cuando el sistema operativo reemplaza un LBA, como ocurre con la sobrescritura de un archivo, el SSD sabe que el LBA original puede marcarse como obsoleto o no válido y no guardará esos bloques durante la recolección de basura. Si el usuario o el sistema operativo borra un archivo (no solo elimina partes del mismo), el archivo normalmente se marcará para su eliminación, pero el contenido real del disco nunca se borrará. Debido a esto, el SSD no sabe que puede borrar los LBA ocupados previamente por el archivo, por lo que el SSD seguirá incluyendo dichos LBA en la recolección de basura. [20] [21] [22]
La introducción del comando TRIM resuelve este problema para los sistemas operativos que lo admiten como Windows 7 , [21] Mac OS (últimas versiones de Snow Leopard, Lion y Mountain Lion, parcheadas en algunos casos), [23] FreeBSD desde la versión 8.1 , [24] y Linux desde la versión 2.6.33 de la línea principal del kernel de Linux . [25] Cuando un archivo se elimina permanentemente o se formatea la unidad, el sistema operativo envía el comando TRIM junto con los LBA que ya no contienen datos válidos. Esto informa al SSD que los LBA en uso se pueden borrar y reutilizar. Esto reduce la necesidad de mover los LBA durante la recolección de basura. El resultado es que el SSD tendrá más espacio libre, lo que permitirá una menor amplificación de escritura y un mayor rendimiento. [20] [21] [22]
El comando TRIM también necesita el soporte del SSD. Si el firmware del SSD no es compatible con el comando TRIM, los LBA recibidos con el comando TRIM no se marcarán como no válidos y la unidad continuará recolectando datos basura asumiendo que aún son válidos. Solo cuando el sistema operativo guarde datos nuevos en esos LBA, el SSD sabrá marcar el LBA original como no válido. [22] Los fabricantes de SSD que originalmente no incorporaron soporte TRIM en sus unidades pueden ofrecer una actualización de firmware al usuario o proporcionar una utilidad separada que extrae la información sobre los datos no válidos del sistema operativo y TRIM por separado del SSD. El beneficio se obtendría sólo después de cada ejecución de esa utilidad por parte del usuario. El usuario podría configurar esa utilidad para que se ejecute periódicamente en segundo plano como una tarea programada automáticamente. [dieciséis]
El hecho de que un SSD admita el comando TRIM no significa necesariamente que podrá funcionar a la máxima velocidad inmediatamente después de un comando TRIM. El espacio que se libera después del comando TRIM puede estar en ubicaciones aleatorias repartidas por todo el SSD. Se necesitarán varias pasadas de escritura de datos y recolección de basura antes de que esos espacios se consoliden para mostrar un rendimiento mejorado. [22]
Incluso después de que el sistema operativo y el SSD estén configurados para admitir el comando TRIM, otras condiciones pueden impedir cualquier beneficio de TRIM. A principios de 2010 [actualizar], las bases de datos y los sistemas RAID aún no son compatibles con TRIM y, en consecuencia, no sabrán cómo pasar esa información al SSD. En esos casos, el SSD continuará guardando y recolectando basura esos bloques hasta que el sistema operativo use esos LBA para nuevas escrituras. [22]
El beneficio real del comando TRIM depende del espacio libre para el usuario en el SSD. Si la capacidad del usuario en el SSD fuera de 100 GB y el usuario realmente guardara 95 GB de datos en el disco, cualquier operación TRIM no agregaría más de 5 GB de espacio libre para la recolección de basura y la nivelación del desgaste. En esas situaciones, aumentar la cantidad de sobreaprovisionamiento en 5 GB permitiría que el SSD tuviera un rendimiento más consistente porque siempre tendría 5 GB adicionales de espacio libre adicional sin tener que esperar a que llegue el comando TRIM del sistema operativo. [22]
El sobreaprovisionamiento (a veces escrito como OP, sobreaprovisionamiento o sobreaprovisionamiento) es la diferencia entre la capacidad física de la memoria flash y la capacidad lógica presentada a través del sistema operativo (SO) como disponible para el usuario. Durante las operaciones de recolección de basura, nivelación de desgaste y mapeo de bloques defectuosos en el SSD, el espacio adicional proveniente del sobreaprovisionamiento ayuda a reducir la amplificación de escritura cuando el controlador escribe en la memoria flash. [4] [26] [27] La región de sobreaprovisionamiento también se utiliza para almacenar datos de firmware como tablas FTL . El sobreaprovisionamiento se representa como una relación porcentual entre la capacidad adicional y la capacidad disponible para el usuario: [28]
El exceso de aprovisionamiento normalmente proviene de tres fuentes:
El controlador SSD utilizará bloques libres en el SSD para la recolección de basura y la nivelación del desgaste. La parte de la capacidad del usuario que está libre de datos del usuario (ya sea TRIMed o nunca escrita en primer lugar) tendrá el mismo aspecto que el aprovisionamiento excesivo de espacio (hasta que el usuario guarde nuevos datos en el SSD). Si el usuario guarda datos que consumen solo la mitad de la capacidad total del usuario de la unidad, la otra mitad de la capacidad del usuario parecerá un sobreaprovisionamiento adicional (siempre que el sistema admita el comando TRIM). [22] [32]
El comando ATA Secure Erase está diseñado para eliminar todos los datos del usuario de una unidad. Con un SSD sin cifrado integrado, este comando devolverá la unidad a su estado original. Inicialmente, esto restaurará su rendimiento al nivel más alto posible y a la mejor amplificación de escritura posible (el número más bajo), pero tan pronto como la unidad comience a recolectar basura nuevamente, el rendimiento y la amplificación de escritura comenzarán a regresar a los niveles anteriores. [33] [34] Muchas herramientas utilizan el comando ATA Secure Erase para restablecer la unidad y también proporcionar una interfaz de usuario. Una herramienta gratuita a la que se hace referencia comúnmente en la industria se llama HDDerase . [34] [35] Los Live CD de GParted y Ubuntu proporcionan un sistema Linux de arranque con utilidades de disco que incluyen borrado seguro. [36]
Las unidades que cifran todas las escrituras sobre la marcha pueden implementar ATA Secure Erase de otra manera. Simplemente ponen a cero y generan una nueva clave de cifrado aleatoria cada vez que se realiza un borrado seguro. De esta manera, los datos antiguos ya no se pueden leer, ya que no se pueden descifrar. [37] Algunas unidades con cifrado integrado también borrarán físicamente todos los bloques después de eso, mientras que otras unidades pueden requerir que se envíe un comando TRIM a la unidad para devolverla a su estado original (de lo contrario es posible que no se maximice su rendimiento). [38]
Si un bloque en particular se programara y borrara repetidamente sin escribir en ningún otro bloque, ese bloque se desgastaría antes que todos los demás bloques, terminando así prematuramente con la vida útil del SSD. Por esta razón, los controladores SSD utilizan una técnica llamada nivelación de desgaste para distribuir las escrituras de la manera más uniforme posible entre todos los bloques flash del SSD.
En un escenario perfecto, esto permitiría escribir cada bloque hasta su vida máxima para que todos fallen al mismo tiempo. Desafortunadamente, el proceso para distribuir uniformemente las escrituras requiere que se muevan datos previamente escritos y que no cambian (datos fríos), de modo que los datos que cambian con más frecuencia (datos calientes) se puedan escribir en esos bloques. Cada vez que los datos se reubican sin que el sistema host los cambie, esto aumenta la amplificación de escritura y, por lo tanto, reduce la vida útil de la memoria flash. La clave es encontrar un algoritmo óptimo que maximice ambos. [39]
La separación de datos estáticos (fríos) y dinámicos (calientes) para reducir la amplificación de escritura no es un proceso simple para el controlador SSD. El proceso requiere que el controlador SSD separe los LBA con datos que cambian constantemente y requieren reescritura (datos dinámicos) de los LBA con datos que rara vez cambian y no requieren reescritura (datos estáticos). Si los datos se mezclan en los mismos bloques, como ocurre con casi todos los sistemas actuales, cualquier reescritura requerirá que el controlador SSD reescriba tanto los datos dinámicos (que causaron la reescritura inicialmente) como los datos estáticos (que no requirieron ninguna reescritura). Cualquier recolección de basura de datos que de otro modo no habría requerido ser movido aumentará la amplificación de escritura. Por lo tanto, separar los datos permitirá que los datos estáticos permanezcan en reposo y, si nunca se reescriben, tendrán la amplificación de escritura más baja posible para esos datos. El inconveniente de este proceso es que de alguna manera el controlador SSD aún debe encontrar una manera de desgastar los datos estáticos porque los bloques que nunca cambian no tendrán la oportunidad de escribirse en sus ciclos P/E máximos. [1]
Cuando un SSD escribe grandes cantidades de datos de forma secuencial, la amplificación de escritura es igual a uno, lo que significa que hay menos amplificación de escritura. La razón es que a medida que se escriben los datos, todo el bloque (flash) se llena secuencialmente con datos relacionados con el mismo archivo. Si el sistema operativo determina que el archivo debe reemplazarse o eliminarse, todo el bloque se puede marcar como no válido y no es necesario leer partes del mismo para realizar la recolección de basura y reescribirlo en otro bloque. Sólo será necesario borrarlo, lo cual es mucho más fácil y rápido que el proceso de lectura, borrado, modificación y escritura necesario para los datos escritos aleatoriamente que pasan por la recolección de basura. [7]
El rendimiento máximo de escritura aleatoria en un SSD se debe a una gran cantidad de bloques libres después de que el SSD se haya recolectado por completo, se haya borrado de forma segura, se haya TRIMADO al 100% o se haya instalado nuevamente. La velocidad máxima dependerá de la cantidad de canales flash paralelos conectados al controlador SSD, la eficiencia del firmware y la velocidad de la memoria flash al escribir en una página. Durante esta fase, la amplificación de escritura será la mejor posible para escrituras aleatorias y se acercará a una. Una vez que todos los bloques se hayan escrito una vez, comenzará la recolección de basura y el rendimiento dependerá de la velocidad y eficiencia de ese proceso. La amplificación de escritura en esta fase aumentará a los niveles más altos que experimentará la unidad. [7]
El rendimiento general de una SSD depende de varios factores, incluida la amplificación de escritura. Escribir en un dispositivo de memoria flash lleva más tiempo que leer en él. [17] Un SSD generalmente utiliza múltiples componentes de memoria flash conectados en paralelo como canales para aumentar el rendimiento. Si el SSD tiene una amplificación de escritura alta, se requerirá que el controlador escriba esa cantidad muchas más veces en la memoria flash. Esto requiere aún más tiempo para escribir los datos desde el host. Un SSD con una amplificación de escritura baja no necesitará escribir tantos datos y, por lo tanto, podrá terminar de escribir antes que una unidad con una amplificación de escritura alta. [1] [8]
En septiembre de 2008, Intel anunció el SSD SATA X25-M con un WA tan bajo como 1,1. [5] [40] En abril de 2009, SandForce anunció la familia de procesadores SSD SF-1000 con un WA informado de 0,5 que utiliza compresión de datos para lograr un WA inferior a 1,0. [5] [41] Antes de este anuncio, una amplificación de escritura de 1,0 se consideraba la más baja que se podía alcanzar con un SSD. [17]
{{cite book}}
: Mantenimiento CS1: varios nombres: lista de autores ( enlace ){{cite magazine}}
: Mantenimiento CS1: URL no apta ( enlace )Un sobreaprovisionamiento del 20 % añade un rendimiento sustancial en todos los perfiles con actividad de escritura