- Expérience consistant à reconfigurer la NAND QLC d’un Crucial BX500 en mode pSLC avec MPTools, en réduisant la capacité d’environ 500 Go à 120 Go, mais en augmentant fortement l’endurance et une partie des performances
- La conversion repose sur un travail de firmware et de configuration adapté à la combinaison du contrôleur Silicon Motion SM2259XT2 et de la NAND Micron N48R ; en cas d’échec, elle peut endommager le SSD, annuler la garantie et effacer les données
- Le TBW théorique à l’état QLC d’origine était de 120 To, mais en mode pSLC il est calculé jusqu’à 4 000 To de TBW sur la base de 60 000 cycles P/E, 120 Go de capacité et un WAF de 1,8
- Les benchmarks séquentiels courts montraient peu d’écart, mais les différences du mode pSLC étaient nettes sur les performances aléatoires, la latence, le test de productivité PCMark 10 et les écritures prolongées
- À l’état d’origine, le SSD retombait à environ 50 Mo/s en moyenne après ~45 Go de cache SLC ; après conversion en pSLC, il maintenait environ 498 à 500 Mo/s sur l’ensemble des 120 Go et lors d’écritures répétées
Matériel testé et facteurs de risque
- Le matériel testé est un SSD Crucial BX500 ayant servi à plusieurs essais
- Même si la procédure est plus sûre qu’un overclocking, elle implique un flash du firmware et demande donc de la prudence
- Le flash du firmware efface toutes les données, une sauvegarde est donc indispensable
- Effectuer la conversion annule la garantie du SSD
- Les outils nécessaires sont un adaptateur SATA-USB 3.0 basé sur une puce Jmicron JMS578 Bridge Chip, ainsi qu’une pince pour court-circuiter les broches ROM/Safe Mode du PCB du SSD
Configuration matérielle du BX500
- Le contrôleur est un Silicon Motion SM2259XT2, une variante du SM2259XT
- Contrôleur monocœur
- Architecture ARC 32 bits
- Fréquence maximale de 550 MHz
- Fonctionne ici à 437,5 MHz
- Le SM2259XT2 prend en charge jusqu’à 2 canaux et jusqu’à 8 Chip Enable par canal, avec de l’interleaving permettant de communiquer avec jusqu’à 16 die
- À titre de comparaison, le SM2259XT prend en charge 4 canaux et 4 C.E., pour un maximum de 16 die
- Ce SSD SATA est de type DRAM-Less et ne prend pas non plus en charge le Host Memory Buffer
NAND et caractéristiques de fonctionnement d’origine
- Le modèle 500 Go embarque deux puces de mémoire flash NAND marquées « NY240 »
- Après décodage, elles sont identifiées comme de la Micron MT29F2T08GELCEJ4-QU:C, NAND N48R Media Grade
- 1 Tb par die, soit 128 Gio
- 176 couches de données et 195 grilles au total
- Efficacité de matrice de 90,2 %
- Chaque puce NAND contient 2 die, soit 256 Go par puce et environ 500 Go au total
- La NAND communique avec le contrôleur à 262,5 MHz, soit 525 MT/s
- Les die N48R peuvent fonctionner jusqu’à 800 MHz, soit 1600 MT/s, mais ce SSD est configuré bien en dessous
- Ce réglage plus bas peut être lié à la réduction de la consommation et de la chauffe, à un niveau de qualité insuffisant pour les hautes vitesses, à une endurance potentiellement plus faible, ou à un approvisionnement en NAND low cost
Procédure de conversion avec MPTools
- La conversion utilise MPTools, l’outil de production destiné aux contrôleurs Silicon Motion
- L’outil utilisé est « SMI SM2259XT2 MPTool FIMN48 V0304A FWV0303B0 », qui doit correspondre à la fois au contrôleur et à la mémoire NAND
- Il faut d’abord lire et conserver les paramètres existants du SSD
- Flash IO Driving et ses sous-éléments
- Flash Control Driving
- Flash DQS/Data Driving
- Control ODT
- Flash ODT
- Schmitt Window Trigger
- Le Scan de MPTools permet de détecter le SSD ; l’entrée « Ready (FW: M6CR061, MN48R) » sert à vérifier les réglages d’usine ainsi que les vitesses du contrôleur et de la NAND
- Pour une comparaison équitable, les fréquences du contrôleur et de la NAND sont conservées à leurs valeurs d’origine
Réglages pour activer le mode pSLC
- Dans « Edit Config », on définit le nom du projet et le tag de version du firmware
- Exemple de nom de modèle : « SSD SLC Test »
- Exemple de version de firmware : « SSD-SLC »
- Flash Control Driving et Flash DQS/Data Driving conservent leur valeur d’origine, 66(hex)
- Les fréquences CPU et NAND sont elles aussi conservées pour rester dans les mêmes conditions de comparaison, et l’Output driving est laissé à 03H
- Il faut modifier le fichier
Setting.setde MPTools pour faire apparaître les options liées au pSLC- Dans
[Function], remplacerENFWTAG=1parENFWTAG=0 - Dans
[Option], ajouterEnSLCMode=1
- Dans
- L’option Force SLC Mode apparaît ensuite dans MPTools
- Pour que la conversion fonctionne réellement, il faut copier les fichiers de boot et d’initialisation du dossier firmware vers un répertoire spécifique
- Cette procédure de fichiers est adaptée à la combinaison SM2259XT2 + NAND N48R ; avec d’autres NAND, les noms de dossiers et les fichiers diffèrent
- Certains modèles de NAND peuvent ne pas être compatibles à 100 %, et les NAND testées sont des NAND Intel et Micron
Calcul de l’endurance
- Le calcul de l’endurance nécessite le Write Amplification Factor, le nombre de cycles Program/Erase de la NAND et la capacité du SSD
- Un calcul plus précis inclut d’autres paramètres comme la norme JEDEC JESD218A et la Wear-Leveling Efficiency
- Le SSD à l’état QLC d’origine est donné pour 120 To de TBW, ce qui correspond à environ 900 cycles P/E pour la NAND N48R Media Grade
- Le WAF d’origine était calculé à 3,75, et les tests réels le rapprochaient plutôt de 3,8
- En mode pSLC, les die NAND peuvent supporter jusqu’à 60 000 cycles P/E selon la fiche technique
- Après conversion en pSLC, la capacité descend à environ 0,12 To, soit 120 Go
- Avec un WAF de 1,8, le TBW calculé atteint 4 000 To
- Le TBW passe ainsi de 120 To en QLC 500 Go à 4 000 To en pSLC 120 Go, soit une hausse de plus de 3333 %
Environnement de test des performances
- L’OS est Windows 11 Pro 64-bit 23H2
- Le CPU est un Intel Core i7-13700K, avec tous les cœurs réglés à 5,7 GHz
- La RAM est une configuration Netac 2×16 Go DDR4-3200 MHz CL16
- La carte mère est une MSI Z790-P PRO WIFI D4, BIOS version 7E06v18
- Le GPU est une RTX 4060 Galax 1-Click OC
- Le disque système est un Solidigm P44 Pro 2 To, tandis que le SSD testé est utilisé comme BX500 « SLC-Test »
- L’indexation Windows, les mises à jour, les applications en arrière-plan et l’antivirus ont été désactivés pour réduire la variabilité des tests
- Le SSD testé a été utilisé comme disque secondaire, avec des tests réalisés à 0 % et 50 % d’occupation
- Les tests de consommation ont été menés avec un Quarch PPM QTL1999, en mesurant l’idle, une écriture d’une heure et la consommation moyenne
Résultats CrystalDiskMark
- Les tests séquentiels sont configurés en 2×1 Gio, blocs de 1 Mio, 8 queues et 1 thread
- Les tests aléatoires sont configurés en 2×1 Gio, blocs de 4 Kio, 1 queue et 1/2/4/8/16 threads
- En séquentiel, il n’y avait presque aucune différence
- Le cache pSLC d’origine suffisait déjà à atteindre la bande passante maximale d’un SSD SATA et les débits séquentiels annoncés par le constructeur
- Les écarts apparaissaient sur des benchmarks plus longs et plus lourds
- La latence diminuait nettement
- À l’état d’origine, après une période d’idle, la NAND commence les lectures/écritures en mode QLC natif, puis subit une latence avant d’être reprogrammée en SLC
- En mode pSLC, elle reste toujours en état pSLC, d’où une latence plus faible
- Les performances aléatoires progressaient davantage que les performances séquentielles
- En QD1, la vitesse de lecture augmentait de plus de 16 % et celle d’écriture de plus de 30 %
Résultats ATTO, 3DMark et PCMark 10
- ATTO Disk Benchmark a été exécuté avec des blocs de 512o à 8 Mio, un fichier de 256 Mo et des Queue Depth de 1 et 4
- Dans ATTO, le SSD en mode pSLC était devant le SSD d’origine sur toutes les tailles de bloc
- Le même schéma se répétait en QD1, même si l’écart était parfois plus faible qu’en QD4 selon la taille de bloc
- 3DMark Storage Benchmark comprend le chargement de jeux, l’enregistrement et le streaming OBS en 1080p 60 FPS, l’installation de jeux et les transferts de fichiers de dossiers de jeux
- Même dans un scénario réel léger comme 3DMark, on constatait des écarts de performances et de latence, sans qu’ils soient forcément totalement perceptibles au quotidien
- PCMark 10 Full System Drive Benchmark est davantage orienté productivité, avec une part d’écriture plus importante que 3DMark
- Dans PCMark 10, la différence en usage réel était nette, avec un écart de performances proche du double
Premiere Pro, démarrage et chargement des jeux
- Le test Adobe Premiere Pro 2021 mesure le temps nécessaire pour ouvrir, jusqu’à l’état éditable, un projet lourd d’environ 16,5 Go, en 4K, à 120 Mb/s et riche en effets
- Le chargement du projet Premiere Pro relève surtout d’un scénario de lecture séquentielle, si bien que l’écart était minime et proche de la variabilité normale entre exécutions
- Le benchmark Final Fantasy XIV a servi à comparer les temps de chargement en jeu
- Sur le chargement des jeux, il est difficile de ressentir un grand écart à cause des limites d’API, différentes de DirectStorage
- Le démarrage de Windows a lui aussi montré peu d’écart, même sur un système récent, car il ne profite pas vraiment des caractéristiques modifiées du SSD
Cache SLC et écritures prolongées
- De nombreux SSD actuels utilisent une partie de leur espace de stockage comme SLC Caching
- Une portion de NAND MLC, TLC ou QLC sert de zone 1 bit par cellule, comme tampon de lecture/écriture
- Une fois ce tampon épuisé, le contrôleur écrit dans la zone NAND native
- Les tests IOmeter montrent que le cache pSLC d’origine de ce SSD est dynamique et semble mesurer environ 45 Go
- À l’état d’origine, il maintient en moyenne environ 493 Mo/s jusqu’à l’épuisement du cache
- Après 45 Go écrits, il entre dans la phase de folding, où la faiblesse typique d’un SSD QLC apparaît
- La vitesse d’écriture soutenue après le cache chute alors à environ 50 Mo/s en moyenne
- Après conversion en pSLC, les 120 Go de capacité peuvent être écrits à une moyenne de 498 Mo/s
- Même en écrivant 500 Go, et donc en réécrivant l’espace plus de 4 fois, il maintient presque 500 Mo/s
- En moyenne, la différence de vitesse d’écriture entre cache pSLC + folding + zone native atteint presque un facteur 10
Copie de fichiers, température et consommation
- Les tests de copie consistent à transférer depuis un RAM Disk vers le SSD un ISO Windows 10 21H1 de 6,25 Go et le dossier d’installation de CSGO de 25,2 Go
- Les deux jeux de fichiers sont plus petits que le cache SLC de 45 Go du SSD d’origine, donc aucun écart n’apparaît dans ce scénario de copie réaliste
- Aucun fichier plus volumineux n’a été testé, car la mémoire disponible pour le RAM Disk était limitée à 32 Go
- Dans les tests thermiques, le SSD ne chauffait pas beaucoup, et le capteur semble être celui de la NAND Flash
- Dans les tests de consommation, l’efficacité augmentait fortement après la conversion en pSLC
- En QLC d’origine, le SSD restait longtemps sous 55 Mo/s dans les tests dépassant largement les 45 Go de cache, ce qui réduisait son efficacité
- En mode pSLC, la bande passante ne chutait pas même en écrivant l’équivalent de deux fois sa capacité, avec une consommation plus basse
- Si la consommation diminue en mode pSLC, c’est parce que la NAND SLC n’utilise que 2 niveaux logiques, ce qui demande une threshold voltage plus faible
- La NAND QLC utilise 16 niveaux logiques et exige donc une threshold voltage plus élevée
- Même au repos, la consommation du mode pSLC était plus faible
Conclusion
- La procédure peut endommager le SSD si elle n’est pas réalisée correctement, d’où la nécessité d’être très prudent
- Le gain de performances du passage en pSLC dépend fortement du scénario
- L’écart est faible sur les benchmarks séquentiels courts, les petites copies de fichiers, le chargement des jeux et le démarrage de Windows
- Il est important sur les performances aléatoires, la latence, les tests de productivité et les écritures prolongées
- Le changement le plus marquant concerne l’endurance, avec un TBW théorique passant de 120 To à 4 000 To
- En contrepartie, la capacité utilisable chute d’environ 500 Go à 120 Go
1 commentaires
Avis sur Hacker News
Inutile de se donner autant de mal pour utiliser un SSD bas de gamme sans DRAM en mode pSLC
Il suffit de faire du surprovisionnement en n’utilisant que 25 à 33 % de la capacité totale
La plupart des contrôleurs bas de gamme sans DRAM fonctionnent en mode cache sur l’ensemble du disque : ils écrivent d’abord tout en pSLC, puis ne regroupent certaines cellules en TLC/QLC pour libérer de l’espace qu’une fois les cellules remplies
Pour du TLC, créez seulement une partition d’un tiers du disque ; pour du QLC, seulement un quart, et laissez le reste de l’espace libre TRIMé et jamais utilisé : les écritures se feront alors toujours en pSLC
Pour vérifier si le SSD qui vous intéresse fonctionne ainsi, cherchez un benchmark d’écriture sur disque complet « HD Tune » pour ce modèle. Si le premier tiers ou quart est rapide puis que le reste devient catastrophiquement lent, on peut considérer qu’il s’agit d’un mode cache sur tout le disque
La méthode consistant à ne partitionner qu’une partie du disque me rappelle l’époque des SCSI 160 Go où l’on disait « n’utilisons que les secteurs extérieurs »
Cela dit, comme mentionné, le fabricant peut configurer le firmware autrement, tandis que cette modification garantit en pratique que tout l’espace est utilisé en SLC
Avec cette approche, même si le vrai cache SLC fait 120 Go, cela ne fonctionnera probablement correctement que jusqu’à 45 Go, car le processus se lance pour la pagination avant que le SLC ne soit entièrement consommé
Si vous n’avez pas besoin de 66 % de la capacité SLC du disque, la méthode de la petite partition est certes plus simple et plus sûre
Ce hack revient à transformer un SSD de 480 Go en SSD de 120 Go
En contrepartie, l’endurance en écriture, c’est-à-dire la quantité de données que l’on peut écrire avant de s’attendre à une panne, passe de 120 To à 4000 To, ce qui peut être un compromis très utile pour un disque de stockage de logs, par exemple
Je n’ai jamais vu de fabricant proposer cette option, et je me demande pourquoi
Par exemple Swissbit vend pour l’industrie des produits qui utilisent de la flash TLC ou QLC, mais pas dans ce mode
Avec ces chiffres, je m’attendrais plutôt à environ 2 fois plus
À première vue, il semble utiliser la valeur de garantie OEM de 120 TBW comme valeur initiale, puis les spécifications de cycles P/E de la NAND comme valeur finale, ce qui paraît suspect
Ce que j’ai peut-être manqué, c’est que le mode pSLC réduise fortement la tension de programmation des cellules et augmente donc spectaculairement les cycles P/E, mais cela devrait, me semble-t-il, être inclus dans le coefficient d’amplification d’écriture
Ce hack peut provoquer une perte de données et n’est pas pris en charge, alors que les disques TLC, eux, le sont
Cette méthode donne 4000 To d’endurance en écriture pour 120 Go, mais pour 200 dollars on peut acheter un disque TLC de 4 To avec 3000 To d’endurance en écriture
La plupart des disques grand public risquent fort de réduire la rétention
Ce que l’article ne souligne pas vraiment, c’est que l’endurance et la rétention des données sont très étroitement liées
Les cellules flash s’usent au fil des cycles en devenant plus sujettes aux fuites, et plus il y a de cycles, plus elles perdent rapidement leur charge
En SLC, il suffit de distinguer 2 états au lieu des 16 états du QLC ; à nombre de cycles égal, les données restent donc beaucoup plus longtemps en mode SLC
Autrement dit, cette modification apporte non seulement une endurance extrême, mais aussi une meilleure rétention
Les fabricants l’indiquent généralement sous la forme « N années après M cycles » : les premiers SLC étaient évalués à 10 ans après 100 000 cycles, tandis que ce QLC pourrait tenir 1 an après 900 cycles en mode QLC, et 1 an après 60 000 cycles en mode SLC
Si les blocs ne sont pas réellement cyclés autant, la rétention sera bien plus élevée
Je ne sais pas si le firmware utilise aussi, pour les blocs en mode SLC, le code de correction d’erreurs plus robuste nécessaire au QLC, mais si c’est le cas, la fiabilité augmente encore
Il y a environ 10 ans, j’ai mis la main sur quelques cartes FusionIO SLC proches des dernières séries produites, pour faire des benchmarks
Le logiciel était une base de données en mémoire dont le client voulait augmenter la capacité, et les cartes Fusion étaient littéralement utilisées uniquement comme swap
Après quelques minutes de chargement des données, le noyau s’est stabilisé et cela fonctionnait vraiment bien
Sur un ordinateur à 500 dollars, on obtenait des millions de transactions par seconde sur des dizaines de milliards d’enregistrements, et les cartes coûtaient plus cher que ma voiture
Aujourd’hui, je ne ferais certainement plus ça, mais c’était du matériel extrêmement impressionnant
Une bonne partie de l’application reposait sur une seule base de données Postgres, et nous avions lancé un projet de mise à l’échelle horizontale, sans grand résultat. Nous avons découvert que le partitionnement est difficile dans une base de code complexe et ancienne
Une carte FusionIO est arrivée un peu par hasard, et avec la carte 2 To la moins chère, le QPS en lecture dans pgbench est passé d’environ 5 000 à 300k
À partir de là, nous avons vu la mise à l’échelle verticale comme beaucoup plus réaliste qu’on ne le pensait. Le matériel peut faire bien plus de choses qu’on ne l’imagine
Il y avait beaucoup de petites E/S aléatoires, et on était toujours à la limite pour encaisser la charge
À titre d’essai, nous avons envoyé un SSD Intel de 600 Go au format disque de portable ; ils ont arrêté le nœud secondaire, installé le SSD, puis l’ont redémarré
Après avoir synchronisé la grappe avec DRBD, ils ont basculé le nœud principal vers le nœud SSD, ajouté le SSD au volume logique, puis déplacé les blocs de la grappe de 8 disques vers le SSD avec
pvmovePendant plusieurs heures, la charge a baissé régulièrement jusqu’à presque disparaître
C’était amusant de voir un seul objet tenant confortablement dans la paume remplacer 8 disques 3,5 pouces 10K
Si vous utilisez de l’eMMC dans un appareil embarqué, c’est aussi recommandé
Sur un système Linux, la commande
mmcdemmc-utilspermet de configurer le périphérique en mode pSLCC’est aussi possible avec U-Boot, mais les commandes sont un peu plus obscures. Comme cela ne peut être programmé qu’une seule fois, impossible de revenir en arrière une fois le réglage effectué
Pour des volumes de production, un prestataire de programmation peut préconfigurer ce réglage ainsi que d’autres paramètres eMMC
J’aimerais voir plus souvent des analyses qui vont jusqu’au débit du bus de ce genre
Ce serait bien d’avoir, pour chaque SSD, un schéma bloc indiquant les références des circuits intégrés importants, les fréquences d’horloge de fonctionnement, ainsi que la largeur et la vitesse des bus entre les circuits
Certains SSD Kingston permettent de gérer le surprovisionnement avec l’outil logiciel fourni par le fabricant
Autrement dit, on peut choisir soi-même le compromis entre capacité et endurance
Par exemple, avec un surprovisionnement de 80 %, 80 % de la capacité QLC seraient réservés comme espace de réserve, et les 20 % restants seraient toujours utilisés en mode QLC
Je ne pense pas que le disque considère qu’il peut les utiliser comme de la SLC avec 20 % de surprovisionnement
Ce serait bien que les fabricants proposent un moyen de rabaisser un SSD en SLC, par exemple via un réglage de pilote
Si l’on fabrique son propre SSD ou que l’on connecte directement de la flash à des broches libres d’un SoC, on peut la programmer de cette manière
S’il y a suffisamment de demande, il semble aussi possible d’étendre NVMe pour proposer cela
Même si une telle fonction voyait le jour, l’application de configuration du pilote pour Windows ne serait pas publiée en open source
Je pensais que c’était une différence au niveau matériel, donc c’est surprenant
Mais même si elle prend en charge TLC ou QLC, je pense qu’il est possible d’implémenter de la SLC dans tous les cas
Le SSD NVMe Silicon Power que j’ai actuellement dans mon ordinateur semble lui aussi utiliser de la SLC pour les écritures, puis déplacer ces données vers de la TLC plus tard, pendant les périodes d’inactivité
Faire fonctionner de la NAND en mode SLC est une fonction de ce type de disque, appelée « cache SLC »
Mais cela n’explique pas à lui seul pourquoi les lectures et écritures sont beaucoup plus rapides qu’en TLC
Par exemple, si les données étaient stockées sous forme de charge dans un condensateur, comme en DRAM, on pourrait imaginer écrire la valeur avec un DAC en échelle R-2R et la lire avec un ADC flash. Dans ce cas, en ignorant le bruit et autres effets, il n’y aurait pas de différence de vitesse liée au nombre effectif de niveaux par cellule
La raison pour laquelle le mode pSLC est plus rapide semble tenir à la manière dont la flash est programmée et lue, ainsi qu’aux caractéristiques analogiques de la mémoire flash
Comme la DRAM, elle utilise une charge pour stocker la valeur, mais celle-ci n’est pas stockée dans un simple condensateur : elle l’est dans une double grille de MOSFET
La quantité de charge modifie la tension de seuil effective du transistor, et lors de la lecture il faut appliquer plusieurs tensions pour voir à quel moment le transistor commence à conduire
Lors de la programmation d’une cellule, il faut injecter une certaine quantité de charge afin d’obtenir la tension de seuil correspondant au motif de bits voulu. Comme la charge ne peut être qu’injectée, on applique plusieurs impulsions courtes pour éviter d’en mettre trop, puis on répète des cycles de lecture pour vérifier si le niveau requis a été atteint
Ainsi, plus il y a de niveaux par cellule, plus il faut des impulsions courtes et davantage de cycles de lecture
Si l’on programme une cellule multiniveau en mode mononiveau, une seule injection de charge plus importante peut suffire, et à la lecture il suffit de vérifier la conduction par rapport à un seul seuil
En résumé, le pSLC n’a pas besoin de modifier la cellule multiniveau elle-même, mais il faut changer la manière dont cette cellule est programmée et lue. Il est donc très probable que les circuits associés doivent différer dans une certaine mesure, et que cela ne puisse pas être implémenté uniquement par firmware
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
Je me demande si cela pourrait aussi servir à prolonger la durée de vie d’un SSD déjà usé
Il existe peut-être quelque part en Chine une activité consistant à récupérer ce genre de SSD, à les reflasher, puis à les revendre comme des « produits neufs »
Il consiste soit à les exposer longtemps à 250 °C, soit brièvement à une température plus élevée, 800 °C
https://m.hexus.net/tech/news/storage/48893-making-flash-mem...
https://m.youtube.com/watch%3Fv%3DH4waJBeENVQ&sa=U&ved=2ahUK...