Optimisation SSD avec Ubuntu

Noter ce cours :

Liens sponsorisés :

GNU/Linux sur un SSD

L'utilisation d'un SSD avec une distribution GNU/Linux est un peu particulière, et pour certains elle pourra paraître plus délicate à maîtriser. D'abord, il faut quand même prendre en compte (ou tout du moins connaître) trois points techniques liés aux SSD.

Alignement des partitions

Même si l'alignement des partitions n'est pas spécifique aux SSD, il n'a que très peu d'importance sur un spinoff, sauf dans le cas des volumes RAID5. L'alignement consiste à faire correspondre les blocs logiques des partitions avec les blocs physiques du SSD pour améliorer les performances de celui-ci afin de limiter les opérations de lecture et d'écriture.

Wear levelling

C'est une Technique utilisée par les contrôleurs des SSD. Elle consiste à répartir l'usure des puces mémoires en écrivant le moins souvent possible dans les mêmes cellules, et en profitant ainsi au maximum du nombre de cycles de lecture-écriture de chacune des cellules. De ce fait, avec un bon algorithme de wear levelling, on arrive à faire en sorte qu'un SSD ait une durée de vie de l'ordre de plusieurs années.

Garbage collector

C'est un Mécanisme visant à réorganiser la table d'allocation à la volée, ce qui permet de conserver un bon niveau de performances lors d'écritures séquentielles sur une zone précédemment écrite de manière aléatoire.

Avantage : on récupère les performances d'origine du SSD en écriture séquentielle ou presque.

Inconvénient : on génère de nombreuses écritures dans les puces mémoire, ce qui a tendance à amoindrir la durée de vie du SSD, et le disque travaillant en interne, il ne libère pas les pages de Flash comme le fait le TRIM, ce qui fait que cela n'est efficace que pour les écritures séquentielles, sans améliorer les écritures aléatoires. Tous les SSD semblent utiliser ce procédé, de manière plus ou moins agressive, et ce à la volée ou en tâche de fond (on parle alors de background garbage collection) en fonction de l'objectif du fabricant.

Alignement des partitions

C'est quoi l'alignement ?

Le contrôleur d'un SSD gère la mémoire par "blocs", généralement de 1 Mio. Cela sert à plusieurs choses : d'une part, les accès mémoire se font généralement par blocs pour améliorer les performances, et d'autre part, ces blocs sont régulièrement permutés pour prolonger la durée de vie du disque.

Pour de bonnes performances, il est préférable que le début des partitions coïncide avec le début des blocs. On appelle cela l'alignement.

Vérification de l'alignement du SSD

Par défaut, lors du formatage d'un disque, Ubuntu détecte qu'il s'agit d'un SSD et aligne les partitions automatiquement (y compris en partitionnement manuel).
Si vous voulez en être sûr, tapez dans un terminal:

sudo fdisk -lu /dev/sda

vous devriez obtenir quelques chose comme ceci :

Disque /dev/sda: ---- Go, -------------- octets
--- têtes, -- secteurs/piste, ------ cylindres, total ------- secteurs
Unités = secteurs de 1 * 512 = 512 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : ----------
Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 XXXX YYYY ZZZZ 83 Linux

Vous pouvez alors vérifier que le début de chaque partition ("XXXX") est un multiple de 2048 (secteurs). Comme un secteur fait 512 octets, et que 2048 × 512 = 1 Mio, votre SSD est aligné !

Formatage manuel du SSD (usage avancé)

Je ne m'étendrai pas sur ce point car cette méthode provient du forum http://forum.hardware.fr et elle a été initialement conçue pour Arch Linux. La méthode de partitionnement est susceptible de varier sous Ubuntu.

Ne suivez cette méthode que si vous êtes sûr(e) de vous et uniquement si vous savez résoudre des problèmes pouvant arriver au cours d'un formatage !

Formatage automatique du SSD (de base)

Ne pas confondre formatage et partitionnement, même si les deux sont liés, on peut parfaitement faire un formatage automatique, et un partitionnement manuel.

C’est ce que j’ai choisis pour mon cas, j'ai partitionné mon SSD CORSAIR P64 - 64Go comme ceci :

Il n'y a pas de partition swap

Note: sur ma config principale Ubuntu 14.04 64Bits avec un SSD SAMSUNG Série 850 EVO 250Go SATA III j'ai créé une partition Swap)

Pour plus d'info sur le Swap, lire le paragraphe 3


Optimiser l'usage du SSD

Il n'existe pas d'étude suffisamment claire quant à la durée de vie des mémoires SSD par rapport aux disques durs. Les sections qui suivent vous expliquent comment minimiser les accès en écriture du SSD.
Les points 2 à 4 sont réservées aux PC ayant plus de 512 Mio de mémoire vive (RAM).

1 - Réduire la fréquence d'écriture des partitions

Utilisez l'option noatime pour éviter d'écrire sur le disque la date du dernier accès en lecture lorsqu'il n'y a pas d'écriture. De même avec nodiratime pour les dossiers. note : il existe le même type de réglage sur Windows pour les partitions NTFS
Vérifier que vos partitions sont montées avec cette option en ouvrant le fichier /etc/fstab dans un terminal avec les droits d'administration: [!] Préférable d'utiliser nano plutôt que gedit.

sudo gedit /etc/fstab

dans lequel vous trouvez des lignes telles que :

UUID=57480a3f-e7db-4a5e-9fca-7df45f5a7d9d / ext4 defaults,noatime,errors=remount-ro 0 1

Si noatime n'est pas indiqués après defaults , vous pouvez les rajouter (séparés par une virgule)

nodiratime est superflu, car noatime est un sur-ensemble de nodiratime (qui est alors sous-entendu)

2 - Mettre les fichiers temporaires en mémoire vive

Le système utilise un certain nombre de fichiers temporaires, qu'il n'est pas nécessaire de conserver d'un démarrage à l'autre. Il est possible de les placer dans la mémoire vive (qui est vidée à l'arrêt de l'ordinateur) au lieu de les avoir dans le SSD. Cependant, certains logiciels (tels que l'environnement de bureau KDE) utilisent un grand nombre de fichiers temporaires, et devront alors les recréer, ce qui peut ralentir le démarrage si vous utilisez ces logiciels.
Pour mettre les fichiers temporaires en mémoire vive (par exemple, pour une taille maximum de 1 Gio), ouvrez le fichier /etc/fstab comme précédemment et ajoutez-y la ligne suivante :

tmpfs      /tmp            tmpfs        defaults,size=1g           0    0

On peut vérifier dans une fenêtre terminal que le "tmpfs" est bien présent avec la commande : df

Sys. de fichiers    blocks de 1K    Utilisé    Disponible    Uti%    Monté sur
/dev/sdd1    28705784    7528540    19696032    28%    /
none    4    0 4    0%    /sys/fs/cgroup
udev    4073556    12    4073544    1%    /dev
tmpfs    4088164    4232    4083932    1%    /tmp

Note: bizarrement ce réglage me crash systématiquement Firefox, j'ai pas la certitude que cela provienne de ce réglage, du coup, j'ai remis celui que j'ai dans l'autre config avec Ubuntu en 32Bits.

tmpfs      /tmp            tmpfs        defaults,noatime,mode=1777 00

Pour ceux qui laissent leur machine allumée 24h/24, une astuce consiste à placer une règle cron qui vide les fichiers temporaires à intervalle régulier, afin de ne pas encombrer la mémoire.

Pour regarder le contenu de votre crontab, tapez dans un terminal :

crontab -l

Pour éditer le fichier de votre crontab, tapez :

crontab -e

Par défaut c'est l'éditeur nano qui édite le fichier crontab

La commande à mettre dans la tâche cron est la suivante :

find /tmp -type f -mmin +1440 -delete > /dev/null

Pour ma part j'ai mis un délais de 20mn pour vider les fichiers temporaires à intervalle régulier.

20 * * * *    find /tmp -type f -mmin +1440 -delete > /dev/null

Enregistrez le fichier en appuyant sur Ctrl + O et appuyez sur Entrée pour confirmer. Appuyez sur Ctrl + X pour fermer nano après avoir sauvegardé le fichier.

Quand vous sortez de l'éditeur, le nouveau fichier crontab sera installé. Le fichier est stocké dans /var/spool/cron/crontabs/ mais doit seulement être édité par l'intermédiaire de la commande crontab.

Si vous constatez des problèmes de connexion à certains sites sur lesquels vous êtes enregistré(e), supprimez ce réglage

3 - Le Swap

Les SSD n'aiment pas le SWAP (partition d'échange qui permet de délester l'utilisation de la mémoire, mais oblige à de multiple lectures/écritures sur le périphérique). Il est possible de ne pas créer de partition SWAP durant l'installation d'Ubuntu en définissant les partitions manuellement (mode avancé). Cela va forcer l'utilisation de la mémoire vive et économiser l'espace qu'aurait pris cette partition sur le disque dur !

Cette astuce ne s'adresse qu'à ceux dont la machine dispose d'au moins 1 Go de RAM. Il est possible dans ce cas, et suivant l'utilisation que l'on fait de la machine de ne pas se servir de swap. Pour cela, soit on ne crée aucune partition de swap lors de l'installation de la distribution, soit, dans le fichier /etc/fstab, on commente la ligne montant le fichier swap avec le symbole # :

UUID=bd746caf-bd0c-4649-baa7-d680bb91a6d0 swap swap defaults 0 0

devient alors :

#UUID=bd746caf-bd0c-4649-baa7-d680bb91a6d0 swap swap defaults 0 0

Il peut être préférable d'utiliser la méthode consistant à ne pas monter une partition de swap existante, de manière à pouvoir la réactiver facilement en cas de besoin, l'utilisation du swap pouvant varier en fonction de l'utilisation de la machine. Si malgré tout vous avez créé une partition SWAP (notamment pour bénéficier de l'hibernation sur les portables), mais que vous souhaitez en minimiser l'usage, rien n'est perdu pour autant, ouvrez le fichier /etc/sysctl.conf avec les droits d'administration: [!] Préférable d'utiliser nano plutôt que gedit.

sudo gedit /etc/sysctl.conf

et ajoutez à la fin :

vm.swappiness=0

Cette ligne indique à Ubuntu de n'utiliser la swap qu'en dernier recours quand votre RAM est pleine ! (Le chiffre "1" indique de l'utiliser seulement lorsqu'il ne reste que 1 % de disponible en RAM, "2" quand il reste 2 %, etc.).

Une autre méthode consiste à activer zRAM, qui est un module du noyau qui compresse la mémoire vive au lieu de la déplacer dans la partition d'échange en cas de manque de mémoire vive. La partition d'échange ne servant que si la mémoire vive est entièrement compressée. Pour ce faire il suffit d'installer le paquet zram-config et le tour est joué.

sudo apt-get install zram-config

4 - Modifier le cache de Firefox

Pour déplacer le cache de Firefox dans le répertoire /tmp/firefox (RAM). Taper about:config dans Firefox et créer une nouvelle chaîne de caractères que vous nommerez browser.cache.disk.parent_directory et saisir /tmp/firefox. Si vous avez une connexion suffisamment rapide, vous pouvez désactiver complètement le cache persistant en modifiant l'option browser.cache.disk.enable avec la valeur false.

5 - Le Trimming.

Comme il a déjà été dit, les disques SSD voient leurs performances diminuer à mesure que les cellules (bloc mémoire) se remplissent (même partiellement) et cela induit des performances en écriture de plus en plus médiocres à mesure que le SSD vieillit et qu'il y a de moins en moins de cellules vierges disponibles.
Ce phénomène est dû à la manière dont le SSD fonctionne en écriture au niveau des cellules de mémoire flash : si une cellule est vierge, le contrôleur peut directement écrire dedans - par contre si elle contient déjà des données (même 1 seul bloc d'allocation de 4k alors que la cellule contient 1024k au total), le contrôleur doit lire la cellule + la remettre à zéro + écrire les données.
Une opération beaucoup plus lente. Le Trimming a pour objet d'indiquer au contrôleur du SSD lorsque des blocs d'allocation se libèrent suite à l'effacement de fichiers par le filesystem (ce qu'il ne peut pas savoir directement à priori); et donc que ces plages libérées sont à nouveau disponibles pour écrire dessus - charge étant au contrôleur de remettre à zéro les cellules qui peuvent l'être et ainsi augmenter les cellules vierges disponibles. Bien entendu, il faut que le SSD supporte la commande TRIM afin de pouvoir réaliser cette opération (ce qui est le cas pour la plupart des SSD récent). Vous pouvez vérifier cela dans un terminal :

sudo hdparm -I /dev/sda

Cette commande permet de lister tous les paramètres et fonctionnalités du SSD. Dans le paragraphe "Commands/features" une ligne doit clairement indiquer le support TRIM. Il existe plusieurs mécanismes de Trimming des SSD :

Trimming à la volée

Conditions requises :

C'est de loin la solution la plus facile et la plus souple. Il suffit alors d'éditer son fichier /etc/fstab avec les droits d'administration: [!] Préférable d'utiliser nano plutôt que gedit.

sudo gedit /etc/fstab

Et de rajouter l'option discard dans les lignes correspondant au montage des volumes en ext4.

Note: Avec Ubuntu 14.04 le montage des fichiers systèmes avec l'option "discard" n'est pas recommandé


# /etc/fstab: static file system information.
#
#     
proc /proc proc defaults 0 0
# /dev/sda1
UUID=f0d9c48e-00c4-4225-ab21-1c5a42194bc8 / ext4 async,noatime,discard,errors=remount-ro 0 1
# /dev/sda2
UUID=43e974d7-82d9-43b1-b67b-5233b18f056e none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0

Ensuite les commandes de TRIM sont directement passées au contrôleur du SSD par le kernel, de façon entièrement transparente.

Le montage des fichiers systèmes avec l'option "discard" n'est pas recommandé, car cela se traduira probablement par une baisse des performances en utilisation normale. Cependant, vous pouvez utiliser TRIM en exécutant la commande fstrim occasionnellement ou de créer votre propre tâche cron qui exécute fstrim via un calendrier.

pour activer le TRIM de votre SSD sur Ubuntu, il suffit d'ouvrir un terminal et exécutez la commande suivante:

sudo fstrim -v /
Si vous souhaitez exécuter TRIM régulièrement, vous pouvez simplement créer une tâche cron qui exécute la commande fstrim pour vous.

Voilà comment faire une tâche cron qui le fera automatiquement
d'abord, exécutez la commande suivante pour ouvrir l'éditeur de texte nano avec les permissions root:

sudo nano /etc/cron.daily/fstrim
Saisir ou copier/coller le code suivant dans le fichier:

#!/bin/sh
LOG=/var/log/trim.log
echo "*** $(date -R) ***" >> $LOG
fstrim -v / >> $LOG
fstrim -v /home >> $LOG

Les deux dernières commandes dans le code ci-dessus effectuent le Trimming réelle pour la racine (/) et la partition (/ home) et consigne les résultats dans /var/log/trim.log. Vous devrez peut-être modifier ces commandes pour adapter à votre cas particulier. Si vous ne disposez pas d'une partition / home séparée vous devez supprimer la dernière ligne. Ajoutez ici les partitions de SSD pour lequel vous souhaitez activer le travail quotidien du TRIM (normalement , vous devez ajouter " /" si la partition racine est sur le SSD et "/ home" si vous avez mis en place une partition home séparée)

Enregistrez le fichier en appuyant sur Ctrl + O et appuyez sur Entrée pour confirmer. Appuyez sur Ctrl + X pour fermer nano après avoir sauvegardé le fichier
dernièrement, exécutez la commande suivante pour rendre le script exécutable:

sudo chmod +x /etc/cron.daily/fstrim

Optimiser la vitesse du SSD

Input/Output Scheduling

Ce mécanisme de réarrangement des IOCTL (Input-Output ConTroL : contrôles des entrées/sorties) a pour objet d'optimiser les commandes I/O vers le disque dur ATA/SATA en prenant en compte la nature du disque dur en question et certaines contraintes en découlant.

Il y a trois options différentes : cfq, noop et deadline.

Par défaut dans Ubuntu, l'option cfq est utilisée car elle convient bien aux disques durs mécaniques, en réorganisant la queue des commandes I/O en fonction des temps de rotation des plateaux et des délais de "seek" des têtes. Vous pouvez vérifier quel I/O Scheduler est utilisé par votre système dans un terminal comme ceci :

cat /sys/block/sda/queue/scheduler

L'option "deadline" est probablement la meilleure car elle optimise les I/O pour un gain en rapidité de temps d'accès aux SSD. Heureusement, il existe une manière simple de déclarer cette option "deadline" de façon permanente en la passant directement dans les paramètres donnés au kernel lors du démarrage.

6 - Pour grub2 (depuis Ubuntu 9.10)

Il faut modifier le fichier /etc/default/grub avec les droits d'administration: [!] Préférable d'utiliser nano plutôt que gedit.

sudo gedit /etc/default/grub

et rajouter "elevator=deadline" à la ligne d'options :

GRUB_CMDLINE_LINUX_DEFAULT="elevator=deadline quiet splash"

puis mettre à jour grub pour que les modifications soient passées à grub.cfg :

sudo update-grub

Sources originales

Autres Sources

Vous avez aimé cet article intitulé Optimisation SSD avec Ubuntu ? Partagez-le !
Vulgarisation-informatique.com
Cours en informatique & tutoriels