Optimiser les SSD sous Debian Wheezy ~2014.05.13

La démarche de l'article consiste en une procédure actualisée et simplifiée de toutes les améliorations possibles pour les disques durs SSD. Ces optimisations visent surtout les distributions basées sur Debian 7.

Ces améliorations sont : - le bon alignement lors du partitionnement et l'overprovisionning pour augmenter la durée de vie et les performances, et assurer un bon vieillissement du disque - l'égalisation de l'usure des puces mémoires (Wear levelling) pour augmenter leur durée de vie - la limitation des écritures sur le disque pour réduire l'usure du disque

- la bonne configuration du système pour avoir des vitesses maximales en lecture/écriture

L'intérêt est l'ordre de la procédure, qui consiste à d'abord effectuer les vérifications et ensuite bien éditer chaque ligne de fstab.

Il existe des procédures et configurations différentes, celle-ci est adaptée à l'usage de plusieurs navigateurs web, aux nouveaux et anciens SSD.

Sommaire

Recommandations préalables

I - Le partitionnement

- Rappels techniques : unités, alignement, overprovisionning (OP)

- Recommandations - Zram / Swappiness / Preload

II - Vérifier la reconnaissance du disque et configurer le système

- Vérification et règle Udev

- Choix de l'ordonnanceur I/O

- Dossiers en Tmpfs

(- Désactivation du Swap)

III - Mettre les caches en RAM

- Cache des navigateurs web et configuration

- Cache des MÀJ système

- Ramdisk et logiciels IV - Trimming et journalisation - TRIM à la volée / TRIM manuel - Désactiver la journalisation

Recommandations préalables

Au préalable et quelque soit le système :

- vérifier dans le BIOS que le contrôleur de disque SATA ou ATA est bien en mode AHCI, c'est nécessaire pour TRIM, pour de meilleures performances en lecture/écriture, et aussi pour la mise à jour du firmware du disque (ça ne marche pas en IDE pour les Corsair notamment). Modifier le mode par la suite peut corrompre le système de fichier et le rendre illisible, autant le faire en premier et être assuré.

- mettez à jour le firmware de vos SSD, c'est très important, suivez les indications données par le constructeur. Pensez à Rufus si vous avez besoin de DOS pour le flashage.

  sudo hdparm -I /dev/sdX

Et Gnome Disk Utility donnent des informations sur le modèle, la version du firmware, les fonctions supportées…

I - Le partitionnement

Les contraintes à prendre en compte pour l'étape du partitionnement sont :

- l'alignement :

L'alignement consiste à faire correspondre les blocs logiques des partitions avec les blocs physiques du SSD afin de limiter les opérations de lecture/écriture et ainsi ne pas entraver les performances.

1 secteur = 512 octets ; 515 X 2048 = 1 048 576 octets = 1 Mio (mébioctet) et non Mo (mégaoctet) ça a son importance : car 1 Mégaoctet (1 Mo) = 10⁶ octets = 1 000 000 octets qui n'es pas un multiple entier de 2048, ce qui va mettre des secteurs à cheval sur plusieurs Mio ou blocs logiques, ce qui ne respecte pas l'organisation physique des blocs du disque.

On utilise les valeurs 2048 ou 4096 car les SSD travaillent en général sur des blocs physiques de 4 Mio, D'où l'importance de respecter la parité exacte en octets (cf les unités), même si dans les faits la tailles des blocs peuvent varier, et que les contrôleurs internes des disques travaillent déjà de façon plus ou moins optimale pour remplir les blocs, ce qui peut rendre la contrainte de l'alignement voir les optimisations négligeables.

La règle à respecter : le numéro du secteur de début de chaque partition doit être un multiple entier de 2048 = vous divisez le premier secteur de chaque partition par 2048, le résultat doit être un nombre entier.

- les unités :

On doit adopter les préfixes binaires (kibi, mébi, gibi… ) au profit des préfixes décimales (kilo, méga, giga), soit des puissances de 2 au lieu de puissances de 10, car en informatique on résonne en logique binaire (0 ou 1) et non en décimale. L'emploi des préfixe décimales du SI est donc un mésusage, on doit donc adopter les préfixes binaires spécifiés par la Commission Électrotechnique Internationale (CEI).

Souvent, vu que les logiciels, les installeurs, ne sont pas totalement francisés (ou les paquets de langue ne sont pas installés), on voit MB, GB, ou MiB, GiB. B pour byte et non bit : 1 octet est composé de 8 bits / un byte n'est pas composé d'un nombre spécifique de bits (en général entre 7 et 9 bits), mais que ce soit en Byte ou en Octet on reste de manière général sur 8 bits c'est donc la même chose : en France on utilise l'octet, à l'international le byte, mais on ne doit pas les confondre.

L’installeur de Debian aligne, et la plupart des installeurs et outils de partitionnement ont été mis à jour.

- l'overprovisionning : c'est une partie du disque qui sera non utilisée et réservée pour la réalocation des secteurs usés, 5 % est suffisant.

Recommandations :

- Installez Zram s'impose si vous avez moins de 2 Go de RAM pour au moins parvenir à un minimum syndicale de 3 Go de mémoire totale (RAM + zRAM + Swap).

- Séparez votre /home de la racine du système / , si vous avez un deuxième disque classique non alloué mettez votre /home dessus, et laissez l'installeur gérer les tailles. La partition Swap servira pour l'overprovisionning dans la durée. Calculer pour avoir vos 5 % d'OP en swap - espace libre. - Si votre SSD est lent (ex : 40 Mo/ s) installez Preload. Faites un test en lecture seule avec Gnome-disk-utility pour savoir.

Une fois l'installation terminée :

- Installez Zram :

Zram est une optimisation recommandée, surtout pour les netbooks et machines qui manquent de RAM.

Zram est intégré au noyau Linux, il crée un swap de mémoire vive compressée sur la RAM, ce qui a pour effet d'augmenter la mémoire virtuelle totale. Pour l'activer il suffit d'un script de configuration, pour l'installer :

http://gionn.net/2012/03/11/zram-on-debian-ubuntu-for-memory-overcommitment/

- Installez Preload

  sudo aptitude install preload

- Uniquement si vous n'avez pas installé Zram, réglez le seuil de le déclenchement du swap :

swappiness correspond au pourcentage de RAM restant comme seuil de déclenchement du swap, valeur que nous devons abaisser pour limiter son déclenchement et donc l'écriture sur le disque.

La valeur par défaut est 60. Les valeurs recommandées sont : - pour les SSD récents sur machines récentes : 15 - pour les anciennes machines, les anciens SSD et les netbooks : 5 voir 0

  echo vm.swappiness=10 | sudo tee -a /etc/sysctl.conf             (ici 10) 

II - Vérifier la reconnaissance du disque et configurer le système

Certains vieux SSD ne se signalent pas comme tels au système (ceux des netbook par exemple). Il vaut mieux vérifier que le SSD est correctement reconnu pour que le planificateur ou ordonnanceur (scheduler) des entrées/sorties (I/O) s’adapte en conséquence :

  cat /sys/block/sdX/queue/rotational (où sdX désigne votre SSD)

Si la commande renvoie la valeur 0 c'est que le SSD est bien reconnu comme tel. Si c'est la valeur 1 qui s'affiche, alors le système croit gérer un disque rotatif. Il faut alors modifier manuellement le paramètre avec les privilèges administrateur :

  su + password
  echo 0 > /sys/block/sdX/queue/rotational

Dans certains cas le 1 reviens après le redémarrage, il faut donc forcer le 0 pour la valeur hardware correspondante en créant une règle pour udev. (ex : ici pour un Samsung P-SSD1800* sur un netbook Acer Aspire One AOA110)

On commence par regarder les attributs du disque :

  udevadm info -a -n /dev/sda

Chercher à :

  looking at parent device  '/devices/[...]/block/sda 
  ...
  KERNEL=="sda"   ( a = lettre attribué par le noyau pour désigner le volume physique)
  ...
  looking at parent device  '/devices/[...]/host$/target$/...
  ATTRS{vendor}=="ATA     "                  (vendor et model ciblent le matériel)
  ATTRS{model}=="P-SSD1800       "

Attributs qui vont servir à éditer la règle pour udev :

  sudo nano /etc/udev/rules.d/70-SSD.rules  

(en fait on peut le nommer comme on veut du moment que ça finit en .rules)

  KERNEL=="sda", ATTRS{vendor}=="ATA     " , ATTRS{model}=="P-SSD1800       ", ATTR{queue/scheduler}="deadline", ATTR{queue/rotational}="0"   (attribut qui force le 0, soit queue = système linéaire)
  tout sur la même ligne

Ne pas mettre “ATTR{queue/scheduler}=“deadline” “si vous gardez CFQ. (Pour ce disque deadline est mieux).

Refixer le paramètre en mode administrateur :

  echo 0 > /sys/block/sda/queue/rotational

Redémarrer et vérifier que la commande renvoie bien 0 :

  cat /sys/block/sda/queue/rotational

Concernant le choix de l'ordonnanceur I/O, entre CFQ ou deadline, il faut savoir que :

- CFQ a été mis à jour, rendant le changement pour deadline à priori inutile, même si ça n'a pas empêché que ce dernier soit retenu par défaut pour Ubuntu Trusty.

- deadline est mieux adapté aux anciens SSD (comme précédemment dans la règle udev)

Le mieux est de faire des tests, les gains seront de toute façon minimes. Sinon gardez CFQ et testez deadline si votre SSD est vieux ou lent.

  cat /sys/block/sda/queue/scheduler

Affiche le scheduler actuellement utilisé entre crochets. Mettez deadline soit dans une règle udev, soit “elevator=deadline” dans les options de démarrage de Grub :

  sudo nano /etc/default/grub
  GRUB_CMDLINE_LINUX_DEFAULT="elevator=deadline quiet splash"

puis

  sudo update-grub

Après cette étape, commence l'édition de fstab :

  sudo nano /etc/fstab

Avoir vérifié que le disque est bien reconnu par le système présente de l'intérêt dans ce qui suit, car si reconnu, Debian 7 est censé avoir mis par défaut au moment de l'installation certains dossiers en tmps (système de fichier temporaire monté en RAM).

Vérifiez au moins la présence de ces lignes, auquel cas les ajouter. Notez la présence l'attribut relatime.

  tmpfs   /tmp        tmpfs   defaults,relatime,mode=1777   0  0
  tmpfs   /var/log    tmpfs   defaults,relatime,mode=0755   0  0
  tmpfs   /var/spool    tmpfs   defaults,relatime,mode=1777   0  0

C'est le moment de désactiver le Swap si on le souhaite en rajoutant un #devant la ligne :

  #UUID=blabla  swap swap defaults 0 0

Vous pouvez le réactiver plus tard simplement :

- Définitivement enlevant le # et redémarrant.

- Temporairement avec GParted, ou avec la commande sudo swapon /dev/sdXy

III - Mettre les caches en RAM

Toujours dans fstab, on va mettre le cache du navigateur en RAM avec tmps en ajoutant des lignes : l'attribut size spécifie la taille (facultatif). On met uniquement le cache en RAM, ce qui a pour conséquence l’effacement des pages en cas de redémarrage ou plantage de la machine. Les fichiers de session contenant les paramètres personnels, l'historique de navigation et les profils ne sont pas concernés.

  tmpfs    /home/$USER/.cache/$    tmpfs    defaults,nodev,nosuid,relatime,size=1g    0    0

Selon le navigateur rajouter le morceau après ~/.cache/

  chromium
  midori/web

- configuration de Firefox : taper about:config dans la barre d'adresse

Paramètre supplémentaire : augmenter l'intervalle des sauvegardes de la session

  browser.sessionstore.interval = 300000

Voir plus ou false mais attention aux pertes en cas de crash.

- Mettre le cache des MAJ du système en RAM : attention il faut avoir suffisamment de RAM, disons 512 mo au minimum et faire les mises à jour au démarrage de préférence. Réserver 1 Go si on est à l'aise.

  tmpfs    /var/cache/apt/archives    tmpfs    defaults,size=1g   0    0   (ou size=512m ou 768m )

- Un RAMdisk ou répertoire de travail en RAM Optimisation supplémentaire si vous faites de la compilation, du montage/encodage audio-vidéo, de la retouche photo, pour des travaux temporaires et et qui générent beaucoup d'écritures. L'attribut size spécifie la taille (m Mo , g Go), en fonction des disponibilités en RAM, en laissant assez pour le système (1 Go au moins) selon vos habitudes de conso en RAM.

  tmpfs           /mnt/Ramdisk  tmpfs    defaults,size=1g   0    0
  +
  sudo mkdir /mnt/Ramdisk                   (commande pour créer le dossier)

Pour le côté pratique on peut ajouter un raccourcis dans son gestionnaire de fichiers.

Configurez ensuite vos logiciels en adaptant l'emplacement des dossier temporaires, de cache (sauf si déjà /tmp en tmpfs) et les dossiers de sorties et placez vos fichiers, dossiers, archives dans le Ramdisk. Certains logiciels comme Audacity peuvent être configurés dans leur préférences ou dans des menus avancés pour utiliser du cache en RAM. Pour le côté pratique on peut ajouter un raccourcis dans son gestionnaire de fichiers. Attention : le ramdisk est vidé à chaque redémarrage, en cas de plantage ou de coupure d'alimentation électrique, les fichiers sont perdus.

Important : pour effacer le ramdisk si il est plein par exemple, il faut effectuer un effacement permanent en sélectionnant les fichiers puis MAJ+SUPPR, sinon les fichiers sont simplement déplacés dans un dossier caché à ~/ramdisk/.Trash1000 et non dans la corbeille, les fichiers ne sont pas effacés donc l'espace mémoire limité du ramdisk n'est pas libéré.

IV - Trimming et journalisation

Il s'agit d'ajouter les attributs discard dans fstab aux lignes qui désignent des partitions physiques du SSD (/dev/sdX) et relatime aux partitions physiques (sauf swap) et dossiers en tmpfs (sauf dossier cache APT)

- l'attribut discard active le Trimming ou “TRIM” à la volée. TRIM est une commande qui indique au contrôleur du disque d'effacer les blocs mémoire qui ne sont plus utilisés ce qui permet d'éviter une baisse dans le temps en vitesse d'écriture. Pas besoin de cronjob FSTRIM, discard est suffisant.

  sudo hdparm -I /dev/sdX | grep TRIM

Permet de vérifier si le disque supporte la commande TRIM.

  • Data Set Management TRIM supported (limit 1 block)
  • Deterministic read data after TRIM

Si elle ne renvoie rien, alors TRIM n'est pas supporté.

- l'attribut relatime sert à désactiver la journalisation, soit l’enregistrement systématique de la date du dernier accès aux fichiers. Chaque actualisation de la date d’accès au fichier fait une écriture inutile sur le disque. (sauf si vous avez besoin de cette information, sécurité …).

Ça donne :

  # /dev/sda1
  UUID=blabla....    /    ext4      relatime,discard,errors=remount-ro    0     1

Toutes les modifications prennent effet après un redémarrage.

Sources utilisées :

http://doc.ubuntu-fr.org/ssd_solid_state_drive

https://wiki.archlinux.org/index.php/Solid_State_Drives

https://wiki.archlinux.org/index.php/Firefox_Ramdisk http://libre-ouvert.toile-libre.org/?article72/ssd-crucial-m4-64-go-linux-trim-ext4-noatime

http://remitaines.com/choses-utiles/limiter-le-nombre-de-lecturesecritures-du-disque-dur-de-firefox/

*Concernant les SSD Samsung P-SSD1800 des netbooks Acer Aspire One AOA110 / ZG5 : Le flashage permet de gagner 1-2 Mo/s, la fonctionnalité SMART, et de connaître le nombre réel de secteurs morts que SMART n'affiche pas. Attention le disque est effacé et pour la règle Udev, selon le firmware certains attributs changent. http://metal03326.blogspot.fr/2012/04/samsung-p-ssd1800-firmware-update.html

#ToDo : - Précisions démarche - intérêt : controverses / historique partitionnement / choix par défaut ou poussés - FSTRIM manuel - Cache FF 29 / Midori | + Viewtube

Afficher le texte sourceAnciennes révisionsDerniers changements

Copyright © LinuxArverne, 2008