Convertir un SSD QLC en un SSD SLC
(theoverclockingpage.com)- Experimento en el que se reconfigura el NAND QLC de un Crucial BX500 al modo pSLC con MPTools, reduciendo la capacidad de 500GB a unos 120GB a cambio de aumentar mucho la resistencia y parte del rendimiento
- La conversión requiere trabajo de firmware y configuración adaptado a la combinación del controlador Silicon Motion SM2259XT2 y el NAND Micron N48R; si falla, puede dañar el SSD, anular la garantía y borrar los datos
- El TBW calculado en el estado QLC original era de 120TB, pero en modo pSLC se estima que puede subir hasta 4,000TB TBW con base en 60,000 ciclos P/E, 120GB de capacidad y un WAF de 1.8
- En benchmarks secuenciales cortos la diferencia fue pequeña, pero en rendimiento aleatorio, latencia, pruebas de productividad de PCMark 10 y escrituras prolongadas, el modo pSLC mostró una diferencia clara
- El estado original caía a un promedio de unos 50MB/s después de aproximadamente 45GB de caché SLC, mientras que tras la conversión a pSLC mantuvo unos 498~500MB/s en los 120GB completos y también en escrituras repetidas
Objeto del experimento y riesgos
- El objetivo del experimento fue un SSD Crucial BX500 probado en varias ocasiones
- Aunque el procedimiento en sí puede ser más seguro que hacer overclocking, requiere cuidado porque incluye flasheo de firmware
- Al flashear el firmware, todos los datos se borran, por lo que es necesario hacer respaldo
- Realizar la conversión anula la garantía del SSD
- Las herramientas necesarias son un adaptador SATA-USB 3.0 basado en el Jmicron JMS578 Bridge Chip y una pinza para puentear los pines ROM/Safe Mode del PCB del SSD
Configuración de hardware del BX500
- El controlador es un Silicon Motion SM2259XT2, una variante del SM2259XT
- Controlador de un solo núcleo
- Arquitectura ARC de 32 bits
- Puede operar hasta 550MHz
- En este SSD funciona a 437.5MHz
- El SM2259XT2 soporta hasta 2 canales y hasta 8 Chip Enable por canal, y puede comunicarse con hasta 16 die mediante interleaving
- El SM2259XT, usado como referencia comparativa, soporta hasta 16 die con configuración de 4 canales y 4 C.E.
- Este SSD SATA tiene una arquitectura DRAM-Less y tampoco soporta Host Memory Buffer
NAND y características de funcionamiento base
- El modelo de 500GB incorpora dos chips NAND flash marcados como “NY240”
- Tras decodificarlo, se identificó como Micron MT29F2T08GELCEJ4-QU:C, NAND N48R Media Grade
- 1Tb por die, es decir, 128GiB
- 176 capas de datos y 195 compuertas en total
- Eficiencia de arreglo del 90.2%
- Cada chip NAND contiene 2 die, así que son 256GB por NAND y un total de alrededor de 500GB
- El NAND se comunica con el controlador a 262.5MHz, es decir, 525MT/s
- El die N48R puede funcionar hasta 800MHz, es decir, 1600MT/s, pero en este SSD está configurado mucho más abajo
- Esa configuración de menor velocidad puede estar relacionada con ahorro de energía y temperatura, no cumplir criterios de calidad para operación a alta velocidad, posible menor resistencia o suministro de NAND de bajo costo
Procedimiento de conversión con MPTools
- Se usa MPTools, una herramienta de producción para controladores Silicon Motion
- La herramienta usada fue “SMI SM2259XT2 MPTool FIMN48 V0304A FWV0303B0”, y debe coincidir tanto con el controlador como con el NAND flash
- Primero hay que leer y conservar los parámetros existentes del SSD
- Flash IO Driving y sus subapartados
- Flash Control Driving
- Flash DQS/Data Driving
- Control ODT
- Flash ODT
- Schmitt Window Trigger
- Con la función Scan de MPTools se detecta el SSD, y en “Ready (FW: M6CR061, MN48R)” se revisan la configuración de fábrica y las velocidades del controlador y del NAND
- Para una comparación justa, se mantuvieron las frecuencias originales del controlador y del NAND
Configuración para activar el modo pSLC
- En “Edit Config” se establecen el nombre del proyecto y la etiqueta de versión del firmware
- El nombre de modelo de ejemplo es “SSD SLC Test”
- La versión de firmware de ejemplo es “SSD-SLC”
- Flash Control Driving y Flash DQS/Data Driving se mantuvieron en su valor original de 66(hex)
- Las frecuencias de CPU y NAND también se mantuvieron según la condición original de comparación, y el Output driving se dejó en 03H
- Se modifica el archivo
Setting.setde MPTools para exponer las opciones relacionadas con pSLC- Cambiar
ENFWTAG=1de[Function]aENFWTAG=0 - Agregar
EnSLCMode=1en[Option]
- Cambiar
- Después de eso aparece la opción Force SLC Mode en MPTools
- Para que la conversión funcione de verdad, hay que copiar los archivos de arranque e inicialización dentro de la carpeta del firmware a un directorio específico
- Este procedimiento de archivos está ajustado a la combinación SM2259XT2 + NAND N48R, y con otros NAND cambian los nombres de carpetas y la composición de archivos
- Algunos modelos NAND podrían no ser 100% compatibles, y los NAND probados fueron NAND de Intel y Micron
Cálculo de resistencia
- Para calcular la resistencia se necesitan el Write Amplification Factor, los ciclos Program/Erase del NAND y la capacidad del SSD
- Para un cálculo más preciso entran parámetros adicionales como la norma JEDEC JESD218A y la eficiencia de wear leveling
- En el estado QLC original, el SSD tenía un TBW de 120TB y se calculó que el NAND N48R Media Grade tenía alrededor de 900 ciclos P/E
- El WAF del estado original se calculó en 3.75, y en pruebas reales estuvo más cerca de 3.8
- En estado pSLC, según la hoja de datos, el die NAND puede soportar hasta 60,000 ciclos P/E
- Tras la conversión a pSLC, la capacidad se reduce a alrededor de 0.12TB, es decir, 120GB
- Con un WAF de 1.8, el TBW calculado es de 4,000TB
- El TBW aumenta de 120TB en estado QLC de 500GB a 4,000TB en estado pSLC de 120GB, un incremento superior al 3333%
Entorno de pruebas de rendimiento
- El sistema operativo fue Windows 11 Pro 64-bit 23H2
- El CPU fue un Intel Core i7-13700K, configurado con todos los núcleos a 5.7GHz
- La RAM fue una configuración Netac de 2×16GB DDR4-3200MHz CL16
- La motherboard fue una MSI Z790-P PRO WIFI D4, con BIOS versión 7E06v18
- La GPU fue una RTX 4060 Galax 1-Click OC
- La unidad del sistema operativo fue una Solidigm P44 Pro 2TB, y el SSD bajo prueba se usó como BX500 “SLC-Test”
- Se desactivaron el indexado de Windows, actualizaciones, apps en segundo plano y antivirus para reducir variaciones en las pruebas
- El SSD de prueba se usó como unidad secundaria, e incluyó pruebas con 0% de uso y con 50% de uso
- La prueba de energía se hizo con Quarch PPM QTL1999 para medir idle, prueba de escritura de 1 hora y consumo promedio
Resultados de CrystalDiskMark
- La prueba secuencial se hizo con configuración 2×1GiB, bloques de 1MiB, 8 colas y 1 hilo
- La prueba aleatoria se hizo con configuración 2×1GiB, bloques de 4KiB, 1 cola y 1/2/4/8/16 hilos
- En la prueba secuencial casi no hubo diferencia
- Esto se debe a que incluso la caché pSLC base ya alcanzaba el ancho de banda máximo de un SSD SATA y la velocidad secuencial anunciada por el fabricante
- En benchmarks más largos y pesados sí aparecieron diferencias
- La latencia se redujo de forma considerable
- En el estado original, después de estar idle, el NAND empieza a leer y escribir en modo nativo QLC, y hay latencia hasta que se reprograme a SLC
- En modo pSLC siempre está en estado pSLC, por lo que la latencia es más baja
- La velocidad aleatoria mostró una diferencia mayor que la velocidad secuencial
- En QD1, la velocidad de lectura aumentó más de 16% y la de escritura más de 30%
Resultados de ATTO, 3DMark y PCMark 10
- ATTO Disk Benchmark se ejecutó con tamaños de bloque de 512B a 8MiB, archivo de 256MB y Queue Depth 1 y 4
- En ATTO, el SSD en modo pSLC superó al SSD en estado original en todos los tamaños de bloque
- En QD1 se repitió el mismo patrón, aunque en algunos tamaños de bloque la diferencia fue menor que en QD4
- 3DMark Storage Benchmark incluye carga de juegos, grabación y streaming con OBS a 1080p 60FPS, instalación de juegos y transferencia de archivos de carpetas de juegos
- Incluso en escenarios reales ligeros como los de 3DMark hubo diferencias de rendimiento y latencia, aunque quizá no al nivel de sentirse por completo en el uso diario
- PCMark 10 Full System Drive Benchmark está más centrado en productividad y tiene una proporción de escritura mayor que 3DMark
- En PCMark 10 la diferencia en uso real fue clara, y la diferencia de rendimiento fue casi del doble
Premiere Pro, arranque y carga de juegos
- La prueba de Adobe Premiere Pro 2021 midió el tiempo para abrir hasta estado editable un proyecto pesado de aproximadamente 16.5GB, resolución 4K y bitrate de 120Mbps
- La carga del proyecto en Premiere Pro fue sobre todo un escenario de lectura secuencial, así que casi no hubo diferencia y estuvo cerca de la variación entre ejecuciones
- Se compararon tiempos de carga de juegos con el benchmark de Final Fantasy XIV
- En carga de juegos es difícil notar grandes diferencias debido a limitaciones de API distintas a DirectStorage
- El arranque de Windows tampoco mostró gran diferencia, aunque se probó en un sistema nuevo, porque no podía aprovechar las funciones aplicadas al SSD
Caché SLC y escritura prolongada
- Hoy en día muchos SSD usan parte del espacio de almacenamiento como SLC Caching
- Usan una parte del NAND MLC, TLC o QLC como área de 1 bit por celda para actuar como buffer de escritura y lectura
- Cuando el buffer se agota, el controlador escribe en el área NAND nativa
- Según la prueba con IOmeter, la caché pSLC base de este SSD es dinámica y parece ser de aproximadamente 45GB
- En el estado original mantiene un promedio de unos 493MB/s hasta que se termina la caché
- Después de escribir 45GB entra al proceso de folding, donde se hace evidente la debilidad típica de los SSD QLC
- Tras agotarse la caché, la velocidad de escritura sostenida baja a un promedio de unos 50MB/s
- Después de la conversión a pSLC, los 120GB completos se escriben a un promedio de 498MB/s
- Incluso escribiendo hasta 500GB y repitiendo la escritura de la capacidad más de 4 veces, se mantuvo cerca de 500MB/s
- La diferencia en velocidad de escritura promedio al combinar caché pSLC, folding y área nativa fue de casi 10 veces
Copia de archivos, temperatura y energía
- La prueba de copia de archivos consistió en copiar desde un RAM Disk al SSD un ISO de Windows 10 21H1 de 6.25GB y la carpeta de instalación de CSGO de 25.2GB
- Ambos archivos de prueba eran menores que la caché SLC de 45GB del SSD original, así que en pruebas de copia realistas no hubo diferencia
- No se probaron archivos más grandes porque la memoria disponible para el RAM Disk estaba limitada a 32GB
- En las pruebas de temperatura, el SSD no se calentó demasiado y se presume que el sensor es el sensor del NAND Flash
- En las pruebas de energía, la eficiencia mejoró de forma importante tras la conversión a pSLC
- El estado QLC original operó durante mucho tiempo por debajo de 55MB/s en pruebas que superaban ampliamente la caché de 45GB, por lo que su eficiencia fue baja
- El modo pSLC no perdió ancho de banda mientras escribía el doble de su propia capacidad, y además consumió menos energía
- La razón por la que el consumo baja en modo pSLC es que el NAND SLC usa solo 2 niveles lógicos, por lo que necesita un threshold voltage más bajo
- El NAND QLC usa 16 niveles lógicos, así que requiere un threshold voltage más alto
- Incluso en idle, el modo pSLC consumió menos energía
Conclusión
- Si el procedimiento no se realiza correctamente, el SSD puede dañarse, así que hay que actuar con cuidado
- La diferencia de rendimiento al convertir a pSLC depende del escenario
- En benchmarks secuenciales cortos, copias de archivos pequeñas, carga de juegos y arranque de Windows, la diferencia es pequeña
- En rendimiento aleatorio, latencia, pruebas de productividad y escritura prolongada, la diferencia es grande
- El cambio más importante es la resistencia, ya que el TBW calculado sube de 120TB a 4,000TB
- A cambio, la capacidad utilizable baja de 500GB a unos 120GB
1 comentarios
Opiniones en Hacker News
No hace falta complicarse tanto para usar un SSD barato sin DRAM en modo pSLC.
Basta con hacer over-provisioning usando solo el 25~33% de la capacidad total.
La mayoría de los controladores baratos sin DRAM funcionan en modo de caché de disco completo: primero hacen todas las escrituras como pSLC y solo cuando las celdas se llenan vuelven a agrupar algunas celdas como TLC/QLC para liberar espacio.
Si es TLC, crea una partición de solo 1/3 del disco; si es QLC, de solo 1/4, y deja el resto del espacio vacío con TRIM y sin que se escriba nunca. Así siempre escribirá como pSLC.
Para verificar si el SSD que te interesa funciona así, busca un benchmark de escritura de disco completo de "HD Tune" para ese modelo. Si el primer 1/3~1/4 va rápido y el resto se vuelve desastrosamente lento, se puede considerar que usa caché de disco completo.
Usar solo una parte del disco como partición me recuerda a la época de los SCSI de 160 GB, cuando se decía “usemos solo los sectores externos”.
Pero, como dices, el fabricante puede ajustar el firmware de otra forma, y esta modificación prácticamente garantiza que todo el espacio se use como SLC.
Este enfoque probablemente funcione bien solo hasta 45 GB aunque la caché SLC real sea de 120 GB, porque el proceso para paginación empieza antes de que la SLC se agote por completo.
Si no necesitas el 66% de la capacidad SLC de la unidad, el método de la partición pequeña es más fácil y seguro.
Este hack equivale a convertir un SSD de 480 GB en uno de 120 GB.
A cambio, la resistencia de escritura, es decir, la cantidad de datos que se pueden escribir antes de esperar una falla, aumenta de 120 TB a 4000 TB, así que puede ser un compromiso muy útil para cosas como discos de almacenamiento de logs.
No recuerdo haber visto que los fabricantes ofrezcan una opción así, y me pregunto por qué no lo hacen.
Por ejemplo, compañías como Swissbit venden para uso industrial productos que usan flash TLC o QLC, pero no en ese modo.
Con eso esperaría algo cercano a 2 veces.
Por lo que parece, para el valor inicial usa la cifra de garantía OEM de 120 TBW, y para el valor final usa la especificación de ciclos P/E de la NAND, lo cual suena sospechoso.
Si me estoy perdiendo algo, sería que el modo pSLC reduce mucho el voltaje de programación de las celdas y aumenta drásticamente los ciclos P/E, pero eso debería estar incluido en el factor de amplificación de escritura.
Este hack puede causar pérdida de datos y no tiene soporte, mientras que una unidad TLC sí lo tiene.
Este método da 4000 TB de resistencia de escritura en 120 GB, pero por 200 dólares puedes comprar una unidad TLC de 4 TB con 3000 TB de resistencia de escritura.
La mayoría de las unidades de consumo probablemente reduzcan la retención.
Algo que el artículo no destaca lo suficiente es que la resistencia y la retención de datos están muy relacionadas.
Las celdas flash se desgastan con los ciclos de una forma que aumenta las fugas, así que mientras más ciclos tienen, más rápido pierden la carga.
Como SLC solo necesita distinguir 2 estados en lugar de los 16 de QLC, con la misma cantidad de ciclos los datos se conservan mucho más tiempo en modo SLC.
Es decir, esta modificación no solo da una resistencia extrema, sino también mejor retención.
Los fabricantes normalmente lo expresan como “N años después de M ciclos”: las primeras SLC se calificaban para 10 años después de 100K ciclos, y esta QLC podría ser de 1 año después de 900 ciclos en modo QLC, pero de 1 año después de 60K ciclos en modo SLC.
Si los bloques no se ciclan realmente tantas veces, la retención será mucho mayor.
No sé si el firmware mantiene también en los bloques en modo SLC el código de corrección de errores más fuerte que necesita QLC, pero si lo hace, la confiabilidad también aumenta.
Hace unos 10 años conseguí algunas tarjetas FusionIO SLC de las últimas tandas de producción para hacer benchmarks.
El software era una base de datos en memoria que el cliente quería ampliar en capacidad, y literalmente usamos las tarjetas Fusion solo como swap.
Después de cargar datos durante unos minutos, el kernel se estabilizó y funcionó realmente bien.
En una computadora de 500 dólares obteníamos millones de transacciones por segundo sobre miles de millones de registros, y las tarjetas costaban más que mi auto.
Hoy en día jamás haría algo así, pero era un equipo muy impresionante.
Una sola base de datos Postgres sostenía una parte importante de la app, y aunque queríamos iniciar un proyecto de escalamiento horizontal, no habíamos avanzado mucho. Aprendimos que particionar una base de código compleja y antigua es difícil.
De casualidad llegó una tarjeta FusionIO, y con la tarjeta de 2 TB más barata, las QPS de lectura en pgbench pasaron de alrededor de 5,000 a 300k.
Después de eso empezamos a ver el escalamiento vertical como algo mucho más viable de lo que pensábamos. El hardware puede hacer mucho más de lo que creemos.
Tenía muchas E/S aleatorias pequeñas, así que siempre estaba al límite de si iba a aguantar la carga.
Como experimento, envié un SSD Intel de 600 GB en formato de disco de laptop; bajamos el nodo secundario, instalamos el SSD y lo volvimos a levantar.
Después de sincronizar el arreglo con DRBD, hicimos failover del nodo principal al nodo con SSD, agregamos el SSD al volumen lógico y luego usamos
pvmovepara mover al SSD los bloques del arreglo de 8 discos.Durante varias horas la carga fue bajando de forma constante hasta casi desaparecer.
Fue divertido reemplazar 8 discos de 3.5 pulgadas y 10K con un solo objeto que cabía cómodamente en la palma de la mano.
Si usas eMMC en dispositivos embebidos, también lo recomiendo
En sistemas Linux, se puede configurar el dispositivo en modo pSLC con el comando
mmcdemmc-utilsTambién es posible en U-Boot, pero el comando es algo más críptico. Solo se puede programar una vez, así que no se puede revertir después de configurarlo
Si se trata de volúmenes de producción masiva, la empresa de programación puede preconfigurar este ajuste y otros ajustes de eMMC
Ojalá fueran más comunes los análisis que profundizan hasta la tasa de transferencia del bus de esta manera
Estaría bueno tener, para todos los SSD, un diagrama de bloques con los modelos de IC importantes, las frecuencias de reloj de operación, y el ancho y la velocidad de operación de los buses entre IC
Algunos SSD de Kingston permiten gestionar el over-provisioning con una herramienta de software proporcionada por el fabricante
Es decir, puedes elegir directamente el punto de equilibrio entre capacidad y resistencia
Por ejemplo, si configuras el over-provisioning en 80%, se dejaría el 80% de la capacidad QLC como espacio de reserva, y el 20% restante seguiría usándose en modo QLC
No creo que lo reconozca como si pudiera usarse como SLC con un 20% de over-provisioning
Estaría bueno que los fabricantes ofrecieran una forma de usar un SSD rebajándolo a SLC, por ejemplo mediante alguna configuración del driver
Si fabricas tu propio SSD o conectas flash directamente a pines libres de un SoC, puedes programarlo de esa manera
Si hay suficiente demanda, también parece posible ampliar NVMe para ofrecer esto
Aunque apareciera una función así, la app de configuración del driver para Windows no se publicaría como open source
Me sorprende; pensaba que esto era una diferencia a nivel de hardware
Pero aun si soporta TLC o QLC, creo que es posible implementar SLC en todos ellos
El SSD NVMe de Silicon Power que tengo ahora en mi computadora también parece usar SLC para las escrituras y luego, durante el tiempo ocioso, mover esos datos a TLC
Ejecutar NAND en modo SLC es una función de este tipo de unidades, y se llama “SLC caching”
Pero eso por sí solo no explica por qué las lecturas y escrituras son mucho más rápidas que en TLC
Por ejemplo, si almacenara datos como carga en un capacitor, como DRAM, uno podría imaginar escribir valores con un DAC en escalera R-2R y leerlos con un ADC flash. En ese caso, ignorando el ruido y demás, no habría diferencia de velocidad según la cantidad efectiva de niveles por celda
La razón por la que el modo pSLC es más rápido parece estar en la forma en que se programa y se lee la flash, y en las características analógicas de la memoria flash
Usa carga para almacenar valores, como DRAM, pero no en un simple capacitor, sino en una doble compuerta MOSFET
La cantidad de carga cambia el voltaje de umbral efectivo del transistor, y al leer hay que aplicar varios voltajes para ver cuándo empieza a conducir el transistor
Al programar una celda, hay que inyectar cierta cantidad de carga para alcanzar el voltaje de umbral correspondiente al patrón de bits deseado. Como la carga solo puede inyectarse, para no pasarse se aplican varios pulsos cortos y se repite el proceso de verificar con ciclos de lectura si ya se alcanzó el nivel necesario
Por eso, cuantos más niveles haya por celda, se necesitan pulsos más cortos y más ciclos de lectura
Si se programa una celda multinivel en modo de un solo nivel, basta con una inyección de carga más grande, y al leer solo hay que comprobar si conduce respecto de un único umbral
En resumen, pSLC no necesita cambiar la celda multinivel en sí, pero sí debe cambiar la forma de programarla y leerla. Por lo tanto, es muy probable que los circuitos relacionados deban ser algo distintos, y no se pueda implementar solo con firmware puro
https://en.wikipedia.org/wiki/Flash_memory#Floating-gate_MOS...
https://dr.ntu.edu.sg/bitstream/10356/80559/1/Read%20and%20w...
https://people.engr.tamu.edu/ajiang/CellProgram.pdf
http://nyx.skku.ac.kr/publications/papers/ComboFTL.pdf
Me pregunto si también serviría para extender la vida de un SSD ya desgastado
Quizás en algún lugar de China exista un negocio que tome esos SSD, los vuelva a flashear y los venda como “productos nuevos”
Consiste en exponerlo durante mucho tiempo a 250 °C, o tratarlo brevemente a una temperatura más alta, 800 °C
https://m.hexus.net/tech/news/storage/48893-making-flash-mem...
https://m.youtube.com/watch%3Fv%3DH4waJBeENVQ&sa=U&ved=2ahUK...