Outils pour utilisateurs

Outils du site


linux-ssd

Linux et SSD

Les SSD sont beaucoup plus rapide que les disques durs, mais ce sont des mémoires et elles ne supportent qu'un nombre limité d'écritures. Ils ont aussi tendance à mourir sans prévenir, donc autant essayer d'allonger leur durée de vie en évitant des écritures inutiles. Cette page contient des recommandations de configuration pour Linux. (☛ Par effet de bord, ces conseils sont également parfaitement valables pour les disques durs traditionnels et vous feront gagner en performances.)

Il existe bien des systèmes de fichier spécifiques aux SSD, mais ils ne sont pas forcément stables ou intégrés au noyau de Linux. ext4 reste un bon choix, et avec quelques réglages on peut grandement améliorer les choses.

N'ayez pas peur ! Cette page paraît longue, mais c'est pour expliquer ce qui est modifié et pourquoi. Les manipulations elles-mêmes tiennent en une ligne chacunes et sont réversibles si le résultat ne vous plaît pas.


Réduire le swappiness

Le noyau de Linux possède un paramètre (vm.swappiness) qui indique la propension du système à swapper. Dans la plupart des distributions, ce paramètre est réglé à 60. C'est à dire que quand la mémoire vive sera remplie à 40%, le système va commencer à swapper préventivement des pages mémoire vers le disque (afin de ne pas pénaliser tout lancement éventuel d'une nouvelle application).

On peut sans problème réduire ce paramètre à 10. Ainsi le système ne commencera à swapper que quand 90% de la mémoire sera utilisée.

  • Configuration: Ajoutez la ligne vm.swappiness=10 à votre fichier /etc/sysctl.conf:
    sudo bash -c 'echo "vm.swappiness=10" >> /etc/sysctl.conf'
    • Pour la prise en compte de ce paramètre, rebootez ou faites:
      sudo sysctl -p
  • Vérification:
    sysctl vm.swappiness

Il n'est absolument pas recommandé de passer ce paramètre à zéro comme on peut le lire parfois. C'est une très mauvaise idée.


Activer zram

zram est un module déjà présent dans le noyau, mais pas activé. Il permet de créer des block device en mémoire (donc des zones de mémoire utilisables comme un disque), mais qui ont la particularité d'être compressés et décompressés de manière transparente. Tout ce qui est écrit dedans est compressés, et décompressé à la lecture. L’algorithme de compression utilisé est LZO, extrêmement rapide (capable de compresser plusieurs centaines de méga-octets par seconde).

Une simple commande permet d'activer zram qui va - par défaut - créer un block-device compressé par cœur de votre CPU (afin de paralléliser la compression) et y affecter le swap en priorité sur le swap disque.

Le résultat est que dès que votre système aura besoin de swapper, il va commencer à swapper dans ces blocs mémoire compressés. Et il ne commencera à swapper sur disque que si ces blocs mémoire sont pleins. Et votre CPU est tellement rapide qu'utiliser ces blocs mémoire compressés est beaucoup plus rapide que swapper sur disque. Dans la pratique, l'activation de zram va virtuellement éliminer le swapping sur disque. Je vous assure, le résultat est spectaculaire.

J'ai fait l’expérience sur une machine équipée de 4 Go de RAM: Après avoir lancé beaucoup d'applications afin de saturer la mémoire et forcer le système à atteindre 1,5 Go de swap, pas un seul octet n'avait commencé à être écrit dans le swap disque (le système avait entièrement swappé dans zram). Conséquence directe:

  • Si vous avez un SSD, zram permet de réduire l'usure en évitant presque totalement les écritures disque liées au swap.
  • Si vous avez un simple disque dur, zram permet d'améliorer les performances en évitant les écritures disque liées au swap (swapper vers zram est beaucoup plus rapide que swapper sur disque).

Le CPU consommé par zram est à peine perceptible. N'hésitez pas à activer zram, quelle que soit la quantité de RAM que vous avez.

Sachez que même si vous créez un zram de 8 Go, celui-ci ne consommera pas 8 Go de RAM. Il ne consomme de la mémoire que quand on y stock des données (qui généralement sont réduites à 1/2 à 1/3 de leur taille initiale).

  • Activation:
    sudo apt install zram-config
    • zram est immédiatement actif, et votre swap configuré pour pointer dessus.
  • Vérification:
    • Pour vérifier que votre swap utilise zram:
      cat /proc/swaps
      • Vous verrez des /dev/zramX (un par coeur) avec une priorité supérieure au swap disque. Vous pouvez voir la taille de chaque bloc de swap (Size) et la quantité de données dans ces blocs (Used).
    • Pour voir l'utilisation des blocs zram:
      zramctl
      • Vous verrez chacun des blocs zram, leur taille allouée (DISKSIZE), la quantité de données qui y est stockée (DATA) et la place qu'ils occupent réellement en mémoire après compression (COMPR). (zram y stock également 12ko de données de travail, la taille totale est donc TOTAL).

Note: Si votre distribution ne possède pas le paquet zram-config, vous pouvez aussi activer manuellement zram+swap avec le script suivant:

Cliquez pour afficher le script

Cliquez pour afficher le script

zram.sh
#!/bin/bash
# Enable zram swap (source: https://github.com/novaspirit/rpi_zram/)
cores=$(nproc --all)
modprobe zram num_devices=$cores
 
totalmem=`free | grep -e "^Mem:" | awk '{print $2}'`
mem=$(( ($totalmem / $cores)* 1024 ))
 
core=0
while [ $core -lt $cores ]; do
  echo $mem > /sys/block/zram$core/disksize
  mkswap /dev/zram$core
  swapon -p 5 /dev/zram$core
  let core=core+1
done



Mettre /tmp en tmpfs

Le répertoire des fichiers temporaires de Linux (/tmp) est très sollicité par les applications et le système qui y écrivent continuellement de petits fichiers, parfois rapidement créés et supprimés. Ce répertoire est vidé à chaque redémarrage, mais il reste situé sur disque, ce qui provoque beaucoup d'écritures.

Il est possible de le mettre en mémoire vive avec tmpfs.

Pour cela il suffit de modifier votre fichier /etc/fstab en y ajoutant la ligne:

tmpfs /tmp tmpfs defaults,relatime,mode=1777,nosuid,size=4196M 0 0

Redémarrez pour la prise en compte.

Là nous avons créé un /tmp de 4 Go, ce qui est largement suffisant. N'hésitez pas à mettre une valeur aussi importante, même sur une machine avec peu de RAM: tmpfs ne consomme de la mémoire que quand on stock des données.

Il vous est tout à fait possible de mettre d'autres répertoires en tmpfs de la même manière, mais n'oubliez pas que dès que la machine redémarre ou s’éteint, vous perdez les fichiers placé dans ces répertoires. Il est déconseillé de mettre /var/tmp en tmpfs, car certaines applications s'attendent à une persistance de ce répertoire entre les redémarrage.

À savoir:

  • tmpfs ne prendra jamais le pas sur vos applications: Si une application a besoin de mémoire, tmpfs ira swapper ses données pour laisser de la place à l'application.
  • Donc, si vous avez activé zram, tmpfs va automatiquement swapper (compresser) ses fichiers temporaires en mémoire (!).

commit à 60 secondes

Le système de fichier ext4 possède un paramètre qui s'appelle commit. C'est le temps maximum qui se passe entre le moment où une application demande à écrire une donnée sur disque et le moment où ext4 ira effectivement l'écrire sur disque. Par défaut, cette valeur est réglée à 5 secondes. ext4 attendra donc au plus 5 secondes avant d'écrire une donnée sur disque.

ext4 possède une relative intelligence: Par exemple si un fichier est créé puis supprimé dans ces 5 secondes, il n'ira faire aucune écriture disque (C'est inutile, puisque le fichier est supprimé). En montant le commit à 60 secondes, on arrive ainsi à éviter des écritures disque.

Dans les options de montage de vos partitions (/etc/fstab), ajoutez simplement l'option commit=60. Exemple:

UUID=4a5773ef-7833-4741-c53f-8de2dd3d7527 /               ext4    errors=remount-ro,commit=60 0       1

Notez que régler le commit à 60 secondes veut dire que si votre ordinateur plante, vous risquez de perdre au plus les 60 dernières secondes d'écriture disque (au lieu des 5 secondes par défaut). À vous de voir si vos opérations disque sont critiques à ce point.

PS:

  • Pour voir la quantité de données en attente d'écriture, vous pouvez faire: watch grep ^Dirty /proc/meminfo
  • Vous pouvez à tout moment forcer les écritures disque qui sont en attente avec la commande sync.

noatime ? non:relatime

La plupart des systèmes de fichier - dont ex4 - sont capables d'enregistrer l'heure d'accès (atime), de création (ctime) et de modification (mtime) d'un fichier ou un répertoire. Si connaître l'heure d'accès d'un fichier peut être très pratique, cela veut dire que pour chaque lecture de fichier, cela déclenche une écriture disque (pour enregistrer la date de dernier accès). Cela fait beaucoup d'écriture pour pas grand chose.

On trouve parfois des astuces sur internet qui recommandent d'ajouter noatime et nodiratime dans les options de montage, ce qui a pour effet de désactiver l'enregistrement de la date de dernier accès. Cela fonctionne, mais certains logiciels ont besoin de connaître cette date pour fonctionner correctement.

Je ne vous recommande pas cette solution noatime/nodiratime, car la plupart des distributions récentes montent déjà vos partitions avec l'option relatime qui fait à peu près la même chose, mais ne met à jour la date d'accès qu'une fois par jour (ou quand mtime/ctime est plus récent). Cela permet de garder la fonctionnalité de atime tout en réduisant les accès disque.


Applications

Après le système, vous pouvez aussi modifier le paramétrage de certaines applications afin qu'elles fassent moins d'écritures disque.

Firefox

Firefox utilise la mémoire et le disque pour garder en cache des données (images, pages, css, etc.). Il est possible de demander à Firefox de ne plus utiliser le disque. Non seulement cela réduit les écritures disque, mais cela améliore les performances de Firefox.

Dans about:config, je change les paramètres suivants:

  • browser.cache.memory.capacity = 256000 : Je monte le cache à 256 Mo (ce qui reste raisonnable). Faites: Clic-droit > Nouvelle > Nombre entier > browser.cache.memory.capacity > 256000)
  • browser.cache.memory.max_entry_size=50000 : Taille maximum d'un objet dans le cache mémoire (par défaut: 5120, soit 5 Mo). Je monte à 50 Mo.
  • browser.cache.disk.enable = false : Je désactive le cache disque.

Vous pouvez voir la consommation du cache en tapant about:cache. Dans la partie disk vous devriez voir Storage disk location: none, only stored in memory.

VirtualBox

Afin de garantir l'intégrité des disques virtuels, lorsqu'un OS invité (dans une VM) effectue une écriture disque, VirtualBox force l'écriture disque dans le système hôte (en faisant un sync).
On peut réduire cette écriture forcée et demander à VirtualBox d'utiliser le cache disque du système hôte. Non seulement cela améliore grandement les performances, mais cela permet à ext4 d'éventuellement grouper des écritures disque.
Dans les paramètres de votre machine virtuelle, allez dans Stockage et sur chaque contrôleur (IDE, SATA…) cochez la case “Utiliser le cache E/S de l'hôte”.


Défragmentation

NE. DÉFRAGMENTEZ. JAMAIS.

Je sais que Linux n'est pas spécialement sensible à la fragmentation des fichiers, mais quel que soit votre système d'exploitation, ne défragmentez jamais votre SSD.

Non seulement cela n'améliore absolument pas les performances (les SSD n'ont pas de problème de tête de lecture qui a besoin de se déplacer), mais cela augmente fortement l'usure du SSD pour rien, et donc réduit sa durée de vie.


Autres pistes

  • Votre système écrit dans les logs (/var/log/) en permanence, ce qui provoque beaucoup d'écriture disque. Il existe des outils comme ramlog qui conservent les logs en mémoire et ne les écrivent sur disque qu'à l'arrêt système. (Ramlog utilise d'ailleurs aussi tmpfs.)
linux-ssd.txt · Dernière modification: 2019/03/28 14:30 par sebsauvage