Configuration de Gentoo Linux Optimisée pour un disque SSD

22/06/2014 - 13:37 by poney

L'utilisation d'un disque SSD apporte des perfomences radicalemnt différentes d'un disque classique.

Un exemple de disque SSD est le SSD Samsung 840 Pro avec une vitesse de lecture séquentielle de 540mb/s, écriture 520mb/s, durée de vie de 1.500.000h et du chiffrement à l'aide d'un crypto-processeur physique (Full Disk Encryption (FDE) hardware), d'après les spécifications du fabriquant.

L'inconvenient de ces disques à mémoire flash est leur durée de vie rapidement dégradable suite aux écritures. Et l'association d'une distribution Linux comme Gentoo n'arrange pas vraiment les choses à cause des répertoires temporaires de compilation et de synchronisation du portage.

L'idéal est de mettre en RAM (système de fichiers tmpfs) tous les dossiers où beaucoup d'écritures sont attendues.

Quelques ajustatements au niveau des paramètres de montage des partitions sont également à prévoir.


Montage tmpfs manuel

Pour monter une partition en RAM manuellement, rien de plus simple que d'utiliser la commande mount avec l'option -t tmpfs.

adeleda@tank ~ $ sudo mount -t tmpfs tmpfs mon_dossier_tmpfs/
adeleda@tank ~ $ mount -v | grep mon_dossier_tmpfs
tmpfs on /home/adeleda/mon_dossier_tmpfs type tmpfs (rw)

Les paramètres classiques de la commande mount peuvent être utilisés ; dans l'exemple suivant, le dossier mon_dossier_tmpfs est monté avec les paramètres :

  • noexec : les fichiers avec les droits d'éxécution à l'intérieur ne sont pas directements exécutables
  • size=1G : sa taille maximale ne dépassera pas 1G. Pratique pour éviter de swapper, surtout sur un disque SSD :-)
adeleda@tank ~ $ sudo mount -t tmpfs -o noexec,size=1G tmpfs mon_dossier_tmpfs/
adeleda@tank ~ $ mount -v | grep mon_dossier_tmpfs
tmpfs on /home/adeleda/mon_dossier_tmpfs type tmpfs (rw,noexec,size=1G)

Montage des partitions ext4 optimisées pour le SSD

Les paramètres suivants de la commande mount -o sont à considérer :

  • noatime : empêche le système d'exploitation de mettre à jour l'entrée atime des fichiers lus. En effet, à chaque lecture d'un fichier cette entrée est réécrite, ce qui dégraderait à vitesse grand V le disque SSD.
  • discard : permet d'envoyer des commandes TRIM au disque afin de libérer réellement un bloc inutilisé lorsqu'une donnée est supprimée. Pour comprendre cela, il faut savoir qu'un disque SSD n'est rien d'autre qu'un circuit électronique avec plein de mémoires flash soudées dessus. Le firmware du disque essaie de répartir de manière la plus optimisée les écritures dans telle ou telle flash. L'espace de stoquage des mémoires flash est divisé en blocs (de 128 à 512K) qui sont eux même divisés en pages (de 4 à 16K). Lorsque les données d'une page sont supprimées, puis réécrite à un autre moment, le firmware va lire le bloc, copier dans son cache, insérer la page à écrire puis réécrire tout le bloc à sa place. Cela dégrade les performances du disque 5 à 20 fois. Pour éviter cela, TRIM est implémentée de plus en plus dans les disques SSD et les systèmes d'exploitation savent en tirer partie afin d'informer le disque de la page exacte qui est libérée. L'envoi de commandes TRIM (option discard sous Linux) est supporté depuis le noyau 2.6.33, ainsi que Windows 7 et Windows 2008 R2.

Note : l'utilisation du paramètre discard pour monter une partition ext3 entrainerait son montage en lecture seule.

La commande pour un montage manuel de la partition racine deviendrait :

adeleda@tank ~ $ sudo mount -o noatime,discard /dev/sda1 /

Montage tmpfs permanent sous Gentoo

Pour rendre le montage tmpfs permanent (de façon propre), il est nécessaire de renseigner le fichier /etc/fstab. Un exemple de fichier /etc/fstab utilisant tmpfs pour les dossiers clé sous Gentoo :

adeleda@tank ~ $ cat /etc/fstab
/dev/sda1              /                       ext4            noatime,discard,user_xattr      0 1
/dev/sda3              /home                   ext4            noatime,discard,user_xattr      0 1
tmpfs                  /var/tmp/portage        tmpfs           size=12G                0 0
tmpfs                  /usr/portage            tmpfs           size=12G                0 0
tmpfs                  /usr/src                tmpfs           size=12G                0 0
tmpfs                  /tmp                    tmpfs           size=12G                0 0
tmpfs                  /home/adeleda/.mutt/cache/      tmpfs           size=500M               0 0

Pour les dossiers contenant des données réutilisables, une copie de sauvegarde peut être faite :

  • /usr/src => /usr/src_backup
  • /usr/portage => /usr/portage_backup

Puis, après un redémarrage, il suffit de synchroniser ces dossiers avec ceux montés en RAM comme suit :

adeleda@tank ~ $ sudo rsync -arq /usr/portage_backup/* /usr/portage/
adeleda@tank ~ $ sudo rsync -arq /usr/src_backup/* /usr/src/

Note : si lors de la compilation du noyau, la commande make install n'est pas utilisée, le fichier de configuration /usr/src/linux/.config risque de ne pas être copié dans /boot et si le dossier /usr/src n'est pas sauvegardé, ce fichier sera perdu lors d'un reboot ;-)


Mise en tmpfs du cache des navigateurs Web

D'autres dossiers sont à mettre impérativement en RAM ; ceux associés au cache des navigateurs web (Mozilla Firefox, Google Chrome et Opera).

Le paquet www-misc/profile-sync-daemon permet d'installer un paquet qui fait cela très bien en copiant les dossiers de cache dans un tmpfs puis s'assurant de garder la copie synchronisée avec celle sur le disque.

Son fichier de configuration peut ressembler à celui-ci :

adeleda@tank ~ $ cat /etc/psd.conf
#
# /etc/psd.conf
#
# For documentation, refer to the psd man page or the wiki page
# https://wiki.archlinux.org/index.php/Profile-sync-daemon

## WARNING Do NOT change anything in the file while psd is running!
##
## 1) Stop psd
## 2) Save changes to /etc/psd.conf
## 3) Start psd
##
## You have been warned!

# List users separated by spaces whose browser(s) profile(s) will get symlinked
# and sync'ed to tmpfs
# Do NOT list a user twice!
#
# Example
# USERS="facade happy"
USERS="adeleda"

# List browsers separated by spaces to include in the sync. Useful if you do not
# wish to have all possible browser profiles sync'ed
#
# Possible values:
#              chromium
#              conkeror.mozdev.org
#              firefox
#              firefox-trunk
#              google-chrome
#              heftig-aurora
#              luakit
#              midori
#              opera
#              opera-next
#              qupzilla
#              rekonq
#              seamonkey
#
# Uncomment and select which browsers to manage if you wish
# Otherwise all available/supported browsers will be managed
BROWSERS="firefox google-chrome opera"

# Define where browser profiles will reside in tmpfs
# This location must be mounted to tmpfs and MUST have permissions of 777
# Use NO trailing backslash!
#
# Suggested locations based on distro defaults:
#   Arch Linux/Chakra, Fedora, and Gentoo leave this commented out
#   Debian 6 and below use a setting of "/dev/shm"
#   Debian 7+  use a setting of "/run/shm"
VOLATILE="/tmp"

# Define where the pid file for psd will reside
#   Arch Linux/Chakra, Debian 7+, Fedora, and Gentoo leave this commented out
#   Debian 6 and below/Mint/Ubuntu use a setting of "/var/run/psd"
#
#DAEMON_FILE="/run/psd"

Une fois le paquet installé, configuré et démon lancé, lors du lancement d'un navigateur, son dossier de profile est créé dans le dossier tmpfs (ici /tmp) comme suit :

adeleda@tank ~ $ l /tmp/ | grep "adeleda-"
   1911     0 drwx------ 13 adeleda adeleda     1420 22 juin  15:06 adeleda-firefox-dwgzybha.default
   9540     0 drwx------  7 adeleda adeleda      480 22 juin  15:10 adeleda-google-chrome
   9739     0 drwx------ 17 adeleda adeleda      980 22 juin  15:10 adeleda-opera

Mise en tmpfs XDG Cache

Le cache par défaut des applications tournant sous l'environnement graphique est ~/.cache, toutes ces applications lisent et écrivent constament des données dessus. Il est possible de le déplacer dans un tmpfs via l'édition du fichier de configufation /etc/env.d/30xdg-data-local pour y ajouter la ligne :

XDG_CACHE_HOME="/tmp/.cache"

Une fois l'édition terminée, ne pas oublier de lancer la commande :

adeleda@tank ~ $ sudo env-update

Voila,

Comments

comments powered by Disqus