UNE NOUVELLE VERSION D'INFOBIDOUILLE EST EN LIGNE CLIQUEZ-ICI POUR LA VISITER

Comprendre les SSD

Wear-leveling

En plus de l'adressage radicalement différent, les SSD ont une autre particularité par rapport aux disques durs : les cellules s'usent au fil des cycles écriture/effacement, ce qui réduit progressivement la durée de rétention des données (durée pendant laquelle une donnée reste lisible). Chaque cellule est donc spécifiée pour un nombre maximal d'effacements tolérés. Selon les normes du JEDEC, ce nombre maximal doit être défini de telle sorte que la durée de rétention des données soit garantie à au moins dix ans pour une cellule ayant subit jusqu'à 10% du nombre de cycles maximal, et au minimum un an pour une cellule ayant atteint son nombre de cycles maximal. Sur les cellules MLC gravées en 50 nm, le nombre maximal d'effacements tolérés est d'environ 10 000, contre environ 100 000 pour les mémoires de type SLC. À noter que, si ce facteur 10 peut sembler énorme, il est quasiment sans conséquences en pratique pour un usage grand public, dans le cadre duquel les SSD auront généralement été remisés bien avant d'atteindre leurs limites, même en MLC. Par ailleurs, le nombre de cycles supportés décroît en fonction de la finesse de gravure. La MLC 34nm ne supporte par exemple plus que 5 000 cycles, et la MLC 25nm devrait tomber à 3 000.

Problème : nos systèmes d'exploitation ne sont pas adaptés à ce mode de fonctionnement, et vont donc parfois réécrire très souvent certains secteurs logiques, alors que d'autres ne sont jamais touchés. Les contrôleurs mémoire des SSD implémentent donc des algorithmes dits de "wear-leveling" ("nivellement d'usure"), qui vont répartir les écritures sur toute la "surface" du SSD, pour éviter que certaines cellules ne s'usent prématurément.

Contrairement à ce qu'il se passe avec un disque dur, un secteur logique donné ne sera donc pas toujours écrit au même endroit, et va se "promener" au grès des écritures.

Revers de la médaille, ce mode de fonctionnement a tendance à diminuer les performances en écriture, car à chaque écriture, le contrôleur doit parcourir les descripteurs lui permettant de savoir quelle page est la mieux adaptée pour accueillir les données. Cette chute de performances est particulièrement sensible sur les SSD à base de mémoire MLC et pour les petites opérations d'écriture aléatoire. Afin d'éviter une trop forte dégradation des performances, il est impératif que le SSD soit doté d'un cache conséquent, lui permettant de stocker les descripteurs, pour ne pas à devoir les relire depuis la mémoire flash à chaque opération. En l'absence de cache (cas des SSD à base de contrôleur Jmicron JMF602 par exemple), les performances dans ce cas tombent bien en dessous de celles des disques durs, avec des temps de réponse atteignant parfois plusieurs centaines de millisecondes.

Mais le wear-leveling a également une conséquence gênante : il provoque une "fragmentation" du volume, qui a tendance à s'accroître avec le temps, et à dégrader les performances en écriture. En effet, imaginons par exemple l'écriture d'un fichier de 1 Mo, sur un SSD doté de pages de 2 Ko et de blocs de 512 Ko. Sur un SSD neuf, toutes les cellules étant vierge, le fichier va être écrit en un seul morceau, sur deux blocs consécutifs. Plus tard, en cas de réécriture du fichier, le contrôleur va privilégier les pages encore vierges, puis, à défaut, les pages effaçables optimales (en privilégiant les pages appartenant à des blocs contenant beaucoup de pages effaçables ou vierges et ayant subit le moins d'effacement). Plus le SSD a été utilisé, moins il devient probable de trouver deux blocs entièrement utilisables (donc ne contenant que des pages vierges ou effaçables). Le fichier a donc toutes les chances d'être réparti sur plus de deux blocs. Au fil du temps, on finit donc par arriver à une situation où il ne reste aucun bloc entièrement utilisable pour des écritures, ce qui signifie que chaque nouvelle opération d'écriture va nécessiter l'effacement de blocs contenant des données, ce qui oblige à lire puis réécrire ces données (cf fin du paragraphe "Secteurs, pages, blocs...").

Lorsque la réécriture d'un secteur ne se fait pas physiquement au même endroit que l'écriture précédente, le contrôleur du SSD marque comme effaçable la page qui contenait le secteur avant sa réécriture.

Enfin, en plus du wear-leveling, le contrôleur doit s'assurer d'éviter le vieillissement des données. Comme nous l'avons expliqué plus haut, les données ont une durée de vie limitée après leur écriture. Lors des phases de faible activité, le contrôleur va donc vérifier l'âge des données sur le volume, et réécrire celles qui s'approchent de l'âge limite (avec généralement une marge conséquente par rapport à la durée de rétention garantie par les normes du JEDEC, pour éviter les pertes de données).