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 de usuario y metadatos más de una vez. Por lo tanto, reescribir algunos datos requiere que una parte ya utilizada de flash se lea, actualice y escriba en una nueva ubicación, junto con borrar inicialmente la nueva ubicación si se usó anteriormente. Debido a la forma en que funciona flash, se deben borrar y reescribir porciones de flash mucho más grandes de lo 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 funcionar de manera confiable. Las escrituras aumentadas también consumen ancho de banda en la memoria flash, lo que reduce el rendimiento de escritura en el SSD. [1] [3] Muchos factores afectarán el ancho de banda de un SSD; algunos pueden ser controlados por el usuario y algunos son un 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] La amplificación de escritura se mide típicamente por la relación entre las escrituras comprometidas en la memoria flash y las escrituras provenientes del sistema host. Sin compresión , la amplificación de escritura no puede caer por debajo de uno. Utilizando 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 un disco duro . Cuando se escriben datos por primera vez en un SSD, todas las celdas comienzan en un estado borrado, de modo que los datos se pueden escribir directamente usando páginas a la vez (a menudo de 4 a 8 kilobytes (KB) [actualizar]de tamaño). El controlador SSD en el SSD, que administra la memoria flash e interactúa con el sistema host, utiliza un sistema de mapeo lógico-físico conocido como direccionamiento de bloque lógico (LBA) que forma parte de la capa de traducción flash (FTL). [7] Cuando llegan nuevos datos que reemplazan a los datos más antiguos ya escritos, el controlador SSD escribirá los nuevos datos en una nueva ubicación y actualizará el mapeo lógico para que apunte a la nueva ubicación física. Los datos en la ubicación anterior ya no son válidos y deberán borrarse antes de poder escribirse nuevamente en esa ubicación. [1] [8]
La memoria flash se puede programar y borrar solo una cantidad limitada de veces. Esto se conoce a menudo como la cantidad máxima de ciclos de programación/borrado (ciclos P/E) que puede soportar durante la vida útil de la memoria flash. La memoria flash de celda de un solo nivel (SLC), diseñada 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 de múltiples niveles (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) ha estado disponible, con recuentos de ciclos que se reducen a 1000 ciclos de borrado de programa (P/E). Una amplificación de escritura menor es más deseable, ya que corresponde a una cantidad reducida 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 provocar 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 cuando 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 simple 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 las 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. En el caso de los factores que son variables, la tabla indica si tienen una relación directa o 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 ( habilitada o deshabilitada ), 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 solo 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 se leen las páginas con datos correctos en ese bloque 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 nuevos datos. 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 con qué rapidez realizan el proceso. [11] La recolección de basura es una gran parte de la amplificación de escritura en el SSD. [1] [11]
Las lecturas no requieren borrar la memoria flash, por lo que generalmente no están asociadas con la amplificación de escritura. En la posibilidad limitada de 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 la recolección de basura en segundo plano ( BGC ), a veces llamada recolección de basura inactiva o recolección de basura en tiempo inactivo ( ITGC ), donde el controlador usa el tiempo inactivo 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 fuera a recolectar basura en segundo plano todos los bloques libres antes de que fuera absolutamente necesario, los nuevos datos escritos desde el host podrían escribirse sin tener que mover ningún dato por adelantado, lo que permitiría que el rendimiento funcionara a su velocidad máxima. La desventaja es que algunos de esos bloques de datos en realidad no son necesarios para el host y eventualmente serán eliminados, 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 serán eliminados se reescriben en otra ubicación en 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 de escritura alta donde el SSD rara vez está inactivo. [18] Los controladores SSD SandForce [16] y los sistemas de Violin Memory tienen esta capacidad. [14]
En 2010, algunos fabricantes (especialmente 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 controlador SATA) que no admiten TRIM podrían 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 función todavía está disponible en los SSD que se envían actualmente de estos fabricantes. Se ha informado de corrupción de datos sistémicos en estas unidades si no se formatean correctamente utilizando MBR y NTFS. [ cita requerida ]
TRIM es un comando SATA que permite al sistema operativo indicarle a un SSD qué bloques de datos guardados previamente 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 invá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 de él), el archivo normalmente se marcará para su eliminación, pero el contenido real del disco nunca se borra realmente. Debido a esto, el SSD no sabe que puede borrar los LBA que anteriormente ocupaba el archivo, por lo que 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 se elimina un archivo de forma permanente o se formatea la unidad, el sistema operativo envía el comando TRIM junto con las LBA que ya no contienen datos válidos. Esto informa al SSD que las LBA en uso se pueden borrar y reutilizar. Esto reduce las LBA que necesitan ser movidas durante la recolección de basura. El resultado es que el SSD tendrá más espacio libre, lo que permite 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 tiene soporte para el comando TRIM, los LBA recibidos con el comando TRIM no se marcarán como inválidos y la unidad continuará recolectando basura de los datos asumiendo que aún son válidos. Solo cuando el SO guarde datos nuevos en esos LBA, el SSD sabrá que debe marcar el LBA original como invá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 extraiga la información sobre los datos inválidos del SO y TRIMee por separado el SSD. El beneficio se obtendría solo 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. [16]
El hecho de que un SSD admita el comando TRIM no significa necesariamente que pueda funcionar a 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 distribuidas 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 podrían 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 esas 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 la unidad, 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 los 5 GB adicionales de espacio libre adicional sin tener que esperar a que el comando TRIM provenga del sistema operativo. [22]
El sobreaprovisionamiento (a veces escrito como OP, over provisioning o overprovisioning) es la diferencia entre la capacidad física de la memoria flash y la capacidad lógica presentada a través del sistema operativo (OS) 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 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 de capacidad adicional a capacidad disponible para el usuario: [28]
El exceso de aprovisionamiento suele provenir 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 que ya se hayan TRIMeado o que nunca se hayan escrito en primer lugar) se verá igual que el espacio de sobreaprovisionamiento (hasta que el usuario guarde datos nuevos 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 se verá como un sobreaprovisionamiento adicional (siempre que el comando TRIM sea compatible con el sistema). [22] [32]
El comando ATA Secure Erase está diseñado para eliminar todos los datos de usuario de una unidad. Con un SSD sin cifrado integrado, este comando devolverá la unidad a su estado original de fábrica. Esto restaurará inicialmente su rendimiento al nivel más alto posible y la mejor amplificación de escritura (número más bajo) posible, 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 brindan un sistema Linux de arranque de utilidades de disco que incluyen borrado seguro. [36]
Las unidades que cifran todas las escrituras sobre la marcha pueden implementar el borrado seguro ATA 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 un 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 que vuelva a su estado original (ya que de lo contrario su rendimiento podría no maximizarse). [38]
Si se programara y borrara repetidamente un bloque en particular sin escribir en ningún otro bloque, ese bloque se desgastaría antes que todos los demás, lo que terminaría prematuramente la vida útil del SSD. Por este motivo, los controladores SSD utilizan una técnica denominada nivelación del desgaste para distribuir las escrituras de la forma más uniforme posible entre todos los bloques flash del SSD.
En un escenario perfecto, esto permitiría que cada bloque se escribiera hasta su vida útil máxima, de modo que todos fallaran al mismo tiempo. Desafortunadamente, el proceso para distribuir uniformemente las escrituras requiere que los datos escritos previamente y que no cambian (datos fríos) se muevan, 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 anfitrión los cambie, esto aumenta la amplificación de la 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 cambian rara vez y no requieren ninguna reescritura (datos estáticos). Si los datos se mezclan en los mismos bloques, como sucede 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 otra manera no habría requerido movimiento 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 nivelar el desgaste de los datos estáticos porque esos bloques que nunca cambian no tendrán la oportunidad de ser escritos 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 se debe reemplazar o eliminar un archivo, se puede marcar todo el bloque como inválido y no es necesario leer partes de él para que el recolector de basura lo recoja y lo vuelva a escribir en otro bloque. Solo será necesario borrarlo, lo que 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 el recolector de basura. [7]
El rendimiento máximo de escritura aleatoria en un SSD se logra con la cantidad de bloques libres que quedan después de que el SSD se haya recolectado por completo, se haya borrado de forma segura, se haya recortado 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á al nivel uno. Una vez que todos los bloques se hayan escrito una vez, comenzará la recolección de basura y el rendimiento estará controlado por la velocidad y la eficiencia de ese proceso. La amplificación de escritura en esta fase aumentará hasta los niveles más altos que experimentará la unidad. [7]
El rendimiento general de un SSD depende de varios factores, entre ellos la amplificación de escritura. Escribir en un dispositivo de memoria flash lleva más tiempo que leer desde é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, el controlador deberá escribir esa cantidad de veces más en la memoria flash. Esto requiere incluso 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, puede 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 una WA informada tan baja como 1,1. [5] [40] En abril de 2009, SandForce anunció la familia de procesadores SSD SF-1000 con una WA informada de 0,5 que utiliza compresión de datos para lograr una 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 lograr con un SSD. [17]
{{cite book}}
: CS1 maint: varios nombres: lista de autores ( enlace ){{cite magazine}}
: CS1 maint: URL no apta ( enlace )El sobreaprovisionamiento del 20 % agrega un rendimiento sustancial en todos los perfiles con actividad de escritura.