La Question Technique 2 : comment optimiser son SSD ?

La Question Technique 2 : comment optimiser son SSD ?

Cette semaine, La Question Technique s’intéresse aux fameux SSD, dont on entend souvent dire qu’ils nécessitent des optimisations pour donner le meilleur d’eux-mêmes et durer dans le temps. Si des optimisations sont bel et bien possibles, elles sont en réalité rarement utiles de nos jours. Pour le comprendre, retour sur le fonctionnement d’un SSD…

Alors que les SSD grignotent petit à petit des parts de marchés sur leurs « ancêtres » les disques durs, on peut régulièrement lire au fil des forums différentes astuces pour optimiser leur fonctionnement. Mais pourquoi les SSD ont-ils besoins de ces optimisations alors qu’ils sont plus performants que les disques durs qui s’en passaient très bien ? Et ces optimisations sont-elles toutes utiles ? C’est ce que nous allons voir.

Le fonctionnement interne d’un SSD

Pour comprendre l’origine de ces besoins d’optimisation, il faut se pencher sur le fonctionnement interne des SSD. Alors que du point de vue de l’hôte, un SSD est un espace de stockage adressable par secteurs de 512 octets, comme n’importe quel disque dur, en interne, c’est une toute autre affaire. En raison des caractéristiques de la mémoire flash, il n’est pas possible de manipuler cet espace de stockage de façon aussi « bête » que pour un disque dur.

Tout d’abord, alors qu’un disque dur gère deux opérations (lecture, écriture) sur un seul type d’unité d’allocation (le secteur), la mémoire flash gère trois opérations (lecture, effacement, programmation) sur deux types d’unités d’allocation (la page et le bloc d’effacement). En effet, contrairement aux disques durs, les mémoires flash ont besoin d’être effacées avant d’être écrites (programmées) : la programmation ne peut faire que passer des bits de 1 à 0, l’effacement effectuant l’opération inverse.

Les opérations de lecture et de programmation se font sur des unités d’allocation généralement comprises entre 1 Ko et 8 Ko, les pages. Certains contrôleurs de SSD peuvent également traiter la programmation par demi-pages en exploitant le fait que la programmation ne peut pas passer un bit de 0 à 1 : pour programmer une demi-page, il suffit alors d’envoyer une commande de programmation en remplissant le reste de la page avec des 1.

Les opérations d’effacement se font pour leur part sur des blocs d’effacement, qui contiennent plusieurs pages. Leur taille est généralement de quelques centaines de Ko.
L’autre spécificité des mémoires flash qui peut nécessiter de recourir à des optimisations spécifiques est leur faible endurance. La lecture et la programmation sont « indolores » pour les cellules de flash, mais elles ne supportent par contre qu’un nombre limité d’effacement, qui a de plus tendance à décroitre à mesure qu’on augmente leur finesse de gravure.

Pour s’adapter à ces particularités, on retrouve en interne différentes technologies qu’on ne trouvait pas dans les disques durs.

Le wear-leveling
Le wear-leveling, vise à répartir au mieux l’usure sur l’ensemble des cellules. Le contrôleur du SSD conserve des informations sur le niveau d’usure de chaque bloc d’effacement. Lorsque des données doivent être écrites, le contrôleur va choisir le bloc le mieux adapté pour les recevoir en fonction du niveau d’usure des différents blocs contenant des pages vierges. L’une des conséquences de ce fonctionnement est qu’une même adresse vue de l’extérieur ne sera pas toujours écrite physiquement au même endroit sur le SSD, ce qui peut entraîner une fragmentation interne du SSD.

Certains algorithmes de wear-leveling profitent également des périodes d’inactivité du SSD pour déplacer des données : les données qui ne changent que rarement squattent durablement certains blocs, qui du coup voient leur taux d’usure rester stable, alors que celui des voisins augmente. En déplaçant ces données de temps en temps, le contrôleur peut donc libérer des blocs plus frais, et mettre au repos les blocs les plus usés

L’over-provisioning
La plupart des disques durs disposent d’une petite réserve de secteurs supplémentaires, qui permettent de remplacer d’éventuels secteurs défectueux. Ce principe de l’espace supplémentaire se retrouve sur les SSD, mais dans des proportions bien différentes : on retrouve généralement au moins 7% d’over-provisioning sur les SSD d’entrée et milieu de gamme (1 Gio de flash offre donc 1 Go d’espace utile), tandis que les modèles haut de gamme en embarquent parfois un peu plus, éventuellement en laissant l’utilisateur régler lui-même le niveau d’over-provisionning.

L’intérêt de l’over-provisionning est double. D’abord, il permet d’augmenter la durée de vie du SSD : une utilisation qui engendrera en moyenne 100 cycles d’effacement par cellule sur un volume sans over-provisionning ne fera qu’un peu plus de 93 cycles avec un over-provisionning de 7%. Ensuite, il permet au wear-leveling de travailler plus efficacement. Il permet en effet de constamment conserver un certain volume d’espace vierge sur le SSD. Lorsqu’une page d’un bloc doit être réécrite, il suffit alors de piocher un bloc dans cet espace vierge et d’y placer la page concernée (la page dans le bloc d’origine est alors marquée comme « dirty » (sale), ce qui signifie qu’elle n’est pas vierge mais ne contient plus de données pertinentes), plutôt que d’effacer le bloc d’origine et de le réécrire en modifiant la page.

Le garbage collector
Le wear-leveling et l’over-provisionning induisent différentes formes de fragmentation interne dans le SSD : des adresses logiques consécutives ne correspondent plus forcément à des adresses physiques consécutives, beaucoup de blocs contiennent à la fois des pages dirty et des pages pertinentes…Si le premier point n’est pas vraiment un problème, du fait des temps d’accès très faibles des SSD, le second point est un problème pour les performances en écriture : même sur un SSD contenant théoriquement beaucoup d’espace libre, il peut n’y avoir que des pages dirty au sein de blocs partiellement utilisés, ce qui oblige à chaque écriture à recopier les pages saines d’un bloc puis à effacer ce bloc…

Le rôle du garbage collector est de profiter des phases d’inactivité pour anticiper ces effacements et regrouper les pages saines aux seins des mêmes blocs, pour garder à côté un maximum de blocs vierges, prêts à accueillir des écritures.

Le TRIM
Le TRIM est un complément du garbage collector. Lorsque ce dernier réorganise les données sur le SSD, il n’a pas la possibilité de savoir si une page saine contient des données qui sont encore vraiment pertinentes. Toutes les pages qui n’ont pas été marquées comme dirty par les opérations internes du SSD sont considérées comme pertinentes, et seront donc prises en compte dans la réorganisation, ce qui peut engendrer des recopies inutiles de données. Le TRIM est là pour palier à ce problème : il s’agit d’une nouvelle instruction, introduite dans la version 8 du jeu de commande ATA8 (ATA8-ACS2), qui permet à l’hôte de signaler au SSD que certaines données ont été effacées par l’utilisateur. Les pages correspondantes sont alors marquées dirty et traitées comme telles par le garbage collector.

Les optimisations

Du fait de ces spécificités, différents types d’optimisation ont été proposées pour les SSD. Certaines visent à caler au mieux les opérations disque sur la structure d’adressage interne (page et blocs du SSD), d’autres (la plupart) visent à réduire l’usure des SSD en limitant le volume d’écriture pour améliorer sa durabilité.

Prise en compte de l’adressage interne
Pour correctement prendre en compte l’adressage interne, il faut notamment aligner les partitions sur la taille des pages, pour s’assurer qu’aucune unité d’allocation logique du système de fichier (cluster) ne soit à cheval sur deux pages du SSD. Avec les OS et logiciels de partitionnement récents, ce n’est pas un problème, ils alignent aujourd’hui tous les partitions sur une unité de base suffisamment grande (1 Mo par exemple sous Windows depuis Vista), mais ce n’était pas le cas avant l’avènement des SSD (Windows XP alignait au secteur près et faisait commencer la première partition au 63ème secteur, ce qui coupait les secteurs sur plusieurs pages, et posait de gros problème de performances, surtout avec les SSD les plus bas de gamme). Pour installer Windows XP sur un SSD, il est donc préférable de le partitionner au préalable avec un OS plus récent.

La prise en compte de l’adressage interne est également importante dans le cas d’un montage RAID0 ou RAID5 : il est préférable de choisir une taille de bande (stripe) qui soit un multiple de la taille des blocs d’effacement. Malheureusement, il n’est pas toujours facile de trouver cette information pour les différents modèles de SSD disponibles, surtout sur le marché grand public…

Activation du TRIM
Si vous utilisez Windows 7 ou supérieur, le TRIM est supporté et activé par défaut, vous n’avez rien à faire. Sur les versions antérieures de Windows, il faudra compter sur les utilitaires fournis par les constructeurs de SSD, qui permettent d’effectuer un TRIM à la demande ou de manière planifiée.

Sous Linux, le TRIM est supporté nativement depuis le noyau 2.6.33, mais il n’est pas activé en temps réel par défaut, et il n’est pas recommandé de le faire pour les versions du noyau antérieures à la 3.1, où il pose de problèmes de performances (plus d’infos ici). Il est par contre possible d’envoyer la commande TRIM à la demande via diverses commandes (fstrim, wiper.sh…) et l’exécution de ces commandes à intervalles réguliers peut être programmée via cron.

Sous Mac OS X, c’est encore un peu plus compliqué… Le TRIM est supporté nativement depuis la version 10.6.8, mais Apple a décidé de ne l’activer que sur les SSD d’origine… Des utilitaires comme Trim Enabler permettent toutefois de passer outre ce bridage.

Désactiver la défragmentation
Il ne faut pas défragmenter un SSD ! Comme on l’a vu plus haut, le fonctionnement d’un SSD induit une fragmentation interne de celui-ci. Un logiciel de défragmentation n’agit que sur la fragmentation logique du système de fichier, qui correspondait à la fragmentation physique interne sur un disque dur, mais plus sur un SSD. En déplaçant les données, une défragmentation logicielle va donc générer nombre d’écritures inutiles sans augmenter les performances. Elle peut même en fait les dégrader, en provoquant une augmentation de la fragmentation interne du SSD…

Les logiciels de défragmentation récents savent détecter les SSD pour ne pas les défragmenter (ou au moins afficher un avertissement si l’utilisateur tente de forcer la défragmentation). Sous Windows, il peut être bon de vérifier que le défragmenteur automatique (accessible dans Panneau de configuration > Outils d’administration) a correctement détecté les partitions qui sont sur des SSD. Si oui, il effectuera des traitements spécifiquement adaptés. Si ce n’est pas le cas, il est préférable de désactiver la défragmentation automatique sur ces partitions (Modifier les paramètres > Choisir).

Défragmenteur de disque Windows 8

Désactiver le swap ou le placer sur un disque dur
Voilà l’exemple type du mauvais conseil… Le principal but d’un SSD, c’est d’améliorer la réactivité de la machine, donc autant placer le fichier swap dessus pour profiter au maximum des performances du SSD quand on manque de RAM ! On ne remplace pas une Clio par une Ferrari pour se retrouver avec les performances d’une Traban dès que la route monte un peu ! Si vous vous souciez de ne pas trop user votre SSD à cause du swap, mieux vaut investir dans un peu plus de RAM.

Si votre problème est l’espace disque conséquent que Windows alloue par défaut au swap, qui peut effectivement être problématique avec un SSD, vous pouvez modifier l’allocation du swap pour utiliser un fichier swap de taille extensible… Et si votre RAM est correctement dimensionnée pour vos besoins, vous verrez alors que votre fichier swap reste en permanence à sa taille minimale.

Pour ce faire, ça se passe par Panneau de configuration > Système > Paramètres système avancés. Cliquez alors sur le bouton Paramètres de la section Performances, puis sur Modifier dans l’onglet Avancé.

Options de mémoire virtuelle Windows 8

Laissez une taille d’au moins 50 Mo par Go de RAM sur la partition système (nécessaire pour la collecte d’informations en cas de crash du système). Si vous ne voulez pas que le fichier swap grossisse, vous pouvez mettre une taille maximale égale à la taille minimale. Attention, dans ce cas, en cas de manque de RAM et si le swap ne suffit pas, Windows fermera automatiquement certaines applications pour faire de la place…

Augmenter l’overprovisionning
Bien que seuls certains SSD proposent de modifier « en dur » leur over-provisionning, il est possible avec n’importe quel SSD d’arriver au même résultat en n’utilisant tout simplement pas tout l’espace disponible sur le SSD… Un SSD de 128 Go avec 28 Go d’espace libre se comportera exactement comme un SSD de 128 Go avec 18 Go d’over-provisionning supplémentaire et 10 Go d’espace libre, ou un SSD de 100 Go avec 28 Go d’over-provisionning supplémentaire…

Certains recommandent de partitionner le SSD pour réserver de l’espace pour l’over-provisionning. C’est absolument inutile (si ce n’est pour vos forcer à ne pas utiliser cet espace), le résultat sera le même en laissant simplement de l’espace libre sur les partitions existantes, mais avec de la souplesse en plus, puisqu’en cas de besoin soudain, cet espace pourra toujours être utilisé…

Limiter les écritures inutiles
Lorsque vous utilisez une machine dotée d’un SSD et d’un disque dur, il peut être intéressant de forcer certains fichiers à se placer sur le disque dur car ils tirent peu parti du SSD ou car il s’agit de fichiers volumineux ou temporaires.

Pour les fichiers temporaires, vous pouvez par exemple déplacer le répertoire temporaire du système. Sous Windows, il faut modifier les valeurs des variables d’environnement TEMP et TMP, aussi bien côté utilisateur que côté système. Ces variables peuvent être éditées via Panneau de configuration > Système > Paramètres système avancés > Variables d’environnement.

Variables d'environnement Windows 8

Sous Linux, créez un répertoire temporaire sur une partition du disque dur et créez un lien symbolique de /tmp vers ce répertoire.

Pour d’autres fichiers, ça peut être un peu plus subtile, quand le logiciel qui les produit ne permet pas de spécifier l’emplacement où les enregistrer (par exemple, certains jeux Codemasters basés sur l’EGO Engine créent un fichier de replay d’1 Go dans le répertoire App Data, tandis que Windows Installer garde de nombreux fichiers MSI dans Windows\Installer). Il faudra alors jouer avec des liens symboliques pour rediriger ces fichiers vers le disque dur. Sous Windows, vous pourrez par exemple utiliser l’utilitaire Link Shell Extension pour en créer facilement depuis l’explorateur Windows.

Si vous n’utilisez jamais la veille prolongée sous Windows, vous pouvez aussi la désactiver pour libérer quelques Go sur la partition système (le fichier d’hibernation ne peut pas être déplacé vers une autre partition) en tapant la commande « powercfg.exe -h off » dans l’invite de commande.

Enfin, toujours sous Windows, vous pouvez éventuellement désactiver la mise à jour automatique des dates d’accès aux fichiers en passant à 1 la valeur HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Control\FileSystem\ NtfsDisableLastAccessUpdate dans la base de registre. Mais à ce stade là on est vraiment dans la rétropénétration de diptères, ce genre d’optimisation ne fait vraiment pas gagner grand-chose…

Surveiller l’usure
La plupart de ces optimisations n’apportent aucun gain en performances (au contraire, le déplacement des répertoires temporaires vers un disque dur peut les dégrader un peu) et la limitation des volumes d’écriture n’a de sens que si vous usez beaucoup votre SSD… Avant de vous lancer dans ces optimisations, il peut donc être bon de jeter un œil à ce que vous faites subir à votre SSD pour voir s’il est nécessaire de prendre ce genre de mesures, ou non.

Pour ce faire, la plupart des SSD disposent d’attributs SMART qui remontent soit le nombre d’effacements moyen des cellules mémoire, soit le volume total des écritures effectuées (on retrouve alors le nombre d’effacements moyen en divisant ce volume par la capacité du SSD, over-provisionning inclus). Voici par exemple ce que donne un Crucial M4 sous CrystalDiskInfo :

Statut S.M.A.R.T. d'un SSD

On peut voir que le nombre d’effacements moyen est de 88 (58 en hexadécimal) après un an d’utilisation, pour un SSD qui peut selon son constructeur supporter 3000 cycles… Pas de panique, ce SSD aura sans doute pris sa retraite bien avant de mourir de fatigue. Inutile donc de se lancer dans des optimisations de folie…

Bref, vous l’aurez compris, avec un OS récent, dans la plupart des cas, les seules optimisations utiles sont en fait celles qui permettent de libérer un peu d’espace, car on est vite à l’étroit sur un SSD de 64 ou 128 Go.

Les optimisations visant à réduire l’usure pourraient par contre reprendre de l’intérêt avec l’augmentation de la finesse de gravure et avec le passage à la mémoire TLC. Cette mémoire stocke 3 bits par cellule, ce qui la rend trois fois plus dense que la SLC et 1,5 fois plus que la MLC classique, d’où un prix réduit. Mais en contrepartie, elle est aussi plus sensible à l’usure, la mesure du niveau de charge d’une cellule devant être bien plus précise (une SLC n’a que 2 niveaux de charge, une MLC classique en a 4, une TLC en 8… mais les niveaux haut et bas sont les mêmes).

Article publié initialement sur PCWorld

13 réflexions sur « La Question Technique 2 : comment optimiser son SSD ? »

  1. Merci pour cet article.
    Je connaissais qq opti, utile ou pas, pour les ssd mais je n’avais pas penser au fichier temporaire.
    Je pense qu’il met inutile de le faire pour l’instant, mais je le note au cas où.

  2. Le SSD doit être compatible avec CrystalDiskInfo ?
    parce que mon vertex plus affiche 100 partout …..

    sinon bon article ….

  3. Sympa le coup du TRIM enabler, mais malheureusement impossible à exécuter sur OS X car le développeur n’est pas authentifié chez Apple.

  4. Greenood
    Le SSD doit être compatible avec CrystalDiskInfo ?
    parce que mon vertex plus affiche 100 partout

    Les colonnes Actuel/Maxi sont sur une échelle de 0 à 100.
    Si tu veux voir le nombre de cycle qu’il y a eu, il faut regarder la valeur brute et la convertir en décimal.
    Si tu as un doute, tu peux poster un screenshot de CDI, je regarderais.

    matthieu.brucher
    Sympa le coup du TRIM enabler, mais malheureusement impossible à exécuter sur OS X car le développeur n’est pas authentifié chez Apple.

    Il y a une option dans les paramètres de sécurité d’OS X pour autoriser les applications non signées.

  5. @SartMatt> OK merci c’est bon
    J’ai un peu lu de travers
    J’ai pour l’ID 3C: 0x333 soit 819 cycles
    Par contre j’ai pas tous les ID, je pense que ça dépends du controleur …
    par exemple le AD, j’ai pas.

    1. Greenood
      @SartMatt> OK merci c’est bon
      J’ai un peu lu de travers
      J’ai pour l’ID 3C: 0x333 soit 819 cycles
      Par contre j’ai pas tous les ID, je pense que ça dépends du controleur …
      par exemple le AD, j’ai pas.

      Yep, les ID spécifiques aux SSD (usure et cie) varient d’un constructeur à l’autre. Tu as pas le AD, moi c’est le 3C que j’ai pas.

      Par contre 819 cycles ça me parait beaucoup, tu l’as depuis longtemps ton SSD ? Et c’est assez étonnant que CDI te mette encore 100 dans Actuel pour une telle usure, sur le mien avec à peine 88 cycles il a déjà enlevé 2%…

        1. Greenood
          @SartMatt> depuis le 04/07/2012
          par contre tous mes seuils sont à 0
          je me suis trompé c’est bien 0C …..

          Ah oki. Alors c’est pas le nombre de cycles des cellules en fait 🙂
          0C c’est le nombre de cycles de démarrage du SSD (ou d’un HDD d’ailleurs, ils ont aussi cet attribut en général), donc juste le nombre de fois où il a été allumé. À ne pas confondre avec le nombre de démarrage/arrêt, qui lui ne concerne que les HDD et indique le nombre de fois que le moteur s’est mis en route (pour un cycle de démarrage, il peut y avoir plusieurs démarrages du moteur, puisque pendant une phase d’utilisation de l’ordinateur, le disque dur peut parfois se mettre en veille).

          Pour l’usure, il faut que tu regardes le E8, qui te donne le nombre de secteurs qui ont été écrits sur le SSD… Du coup la valeur me parait cette fois super faible en fait ^^ À peine 127 320 secteurs, soit 63 660 Ko… CDI reconnait d’ailleurs cet attribut en te le convertissant en Go en haut à droite (chez moi il y a une case vide à cet endroit).

          Normalement en divisant ce total par la capacité du SSD, tu as un valeur basse pour le nombre de cycles (en pratique c’est toujours plus, parce qu’il y a un phénomène d’amplification, le SSD écrit toujours plus physiquement que ce qu’on lui a demandé d’écrire). Mais là du coup, ça donne 0 ^^
          Le E9 est aussi censé pouvoir servir, il s’agit d’un attribut qui donne directement une estimation de la durée de vie restante, il démarre à 100 et il diminue avec l’usure… Là il est toujours à 100.

          Bref, j’ai l’impression que le relevé est foireux… Faudrait voir éventuellement avec un autre logiciel (SpeedFan par exemple) si ça donne aussi ces valeurs, mais c’est pas impossible que ça soit l’enregistrement des valeurs qui merdouille au niveau du SSD, j’ai déjà vu des cas comme ça (pas de panique si c’est le cas hein, c’est vraiment pas dramatique).

  6. Sous XP je désactive l’option « optimize when idle » à l’aide de Microsoft Tweak UI (d’ailleurs je ne crois pas qu’XP différencie les SSD des HDD ?…)

    1. Anne Aunimousse
      d’ailleurs je ne crois pas qu’XP différencie les SSD des HDD ?

      Exact, XP ne reconnait pas les SSDs, et il continue d’essayer de les défragmenter.

      1. Yep, XP ne sait pas ce que c’est un SSD ^^

        Pas de désactivation automatique de la défragmentation, pas de TRIM, partitions mal alignées… Perso je conseillerais pas XP avec un SSD (bon en même temps, je conseillerais pas XP tout court 😀 ).

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.