SSD, avec Linux c'est super

SSD, avec Linux c'est super jpp

SSD : depuis que l'on en parle j'avais envie de tester ce genre de bête. 
J'ai craqué et cassé ma tire-lire pour pouvoir disposer d'un de ces trucs : "OCZ Vertex Turbo series" de 30Go avec un cache de 64Mo. 
Par ailleurs mon système XEN étant le résultat de nombreuses migrations :

  • Suse SLES 10
  • Suse SLES 10 SP1
  • Suse SLES 10 SP2
  • Suse SLES 11
  • OpenSuse  11.1

Son disque système devait commencer à être assez bizarre, j'ai décidé de "repartir à zéro" et d'utiliser mon nouveau disque comme disque système. 
Tout ça c'était avant mon retour à Debian, pensez ma première machine Linux était une Debian avec un kernel 1.0.1. 
J'ai sauvegardé sur un disque externe tout ce qui avait de la valeur (par exemple le répertoire "/etc" et d'autres bricoles). 
Je démonte les disques de stockage de données par sécurité (2 x 1To en miroir car toutes mes Machines virtuelles sont dessus) , je les remettrai en service plus tard, on n'est jamais trop prudent ! Ne doutant de rien j'ai tenté d'installer une OpenSuse 11.2 en rc1 voir site  http://www.opensuse.org . Après quelques ennuis de gravure (ISO mal récupérée ?), c'est bizarre comme cela énerve, j'ai enfin réussi à créer le CD miracle. Malheur, lors de l'installation de cette 11.2 il y a un problème de génération du fichier "initrd" et des erreurs diverses qui rendaient le système inutilisable. Je suis repassé sur une OpenSuse 11.1 (stable) dont j'avais le DVD et ... l'installation a foiré sur mon beau SSD tout neuf ... Après quelque réflexion, j'ai lu des bricoles sur les problèmes d'installation de systèmes sur des SSD, j'ai décidé de frapper un grand coup : j'ai réduit (sniff) fortement la vitesse du CPU (multiplicateur passé de 11x à 7x), en bref j'ai transformé ma belle machine en brouette ... et celà a fonctionné ! L'installation de la 11.1 s'est fort bien passée. J'ai admiré au passage la beauté de l'installeur OpenSuse dont les graphismes sont parfaits, toutes les options de formatage des partitions sont assez bien foutues (si l'on met l'écran à 1024x768 au moins ...) et tout se passe bien. J'ai abandonné la partition spécifique "BOOT" et tout mis dans une seule partition du SSD. Après le paramétrage de l'installation tout est automatique et s'est déroulé en à peu pres 30 minutes (malgré le 7x). Note : il vaut mieux "nommer" les partitions pour être dans la course, ma partition root se voit donc nommée "ROOT" (très original). Une seule partition sur l'ensemble du SSD (29,8 GO) nommée "ROOT" et montée par label. Après un arrêt pour remettre le multiplicateur à 11x le boot est super rapide, le chargement des logiciels presque instantané, OpenOffice apparait très rapidement sur l'écran, en bref c'est super agréable. Vive le SSD ! Comme je disposais toujours de mon DVD 11.2 et que j'avais un peu de temps j'ai décidé de refaire une installation de 11.2 avec le multiplicateur réduit à 7x, on efface tout et on recommence. 
C'est parti :

  • on redéfinit les partitions (idem à celle définies précedemment),
  • on choisit les logiciels à installer (on utilise le bureau KDE car "gdm" ne fonctionne pas avec le kernel XEN.
  • on crée les utilisateurs "de base" en faisant attention à ne pas leur configurer un login automatique, c'est ennuyeux par la suite

"Suivant" l'installation démarre ... après environ 15 minutes la machine reboote pour la phase de configuraton. Aucune erreur ... bizarre le système gère mal l'installation sur SSD lorsque l'on est à pleine vitesse ???? La phase de configuration automatique se lance et ne signale aucun problème. 5 minutes après je dispose d'un beau bureau Gnome avec couleurs personnalisées par Suse,  avec un logo Suse stylisé en fond, très smart en vert olive et noir. Je vais voir un peu ce que cela donne après un reboot er remise en place du multiplicateur à 11X. Beagle est en train d'indexer je le laisse finir avant de rebooter. Une petite image de l'écran Gnome : Ecran GNOME SUSE 11.2

C'est beau ! 
On configure le réseau, tiens la configuration est construite directement avec des ponts, il n'y aura peut-être pas d'ennuis avec les machines virtuelles. 
Enfin on va rebooter et passer en vitesse normale, fini le ralenti. 
Après reboot le système répond très bien, c'est super... 
Essayons Xen maintenant, on reboote sur le noyau XEN et horreur l'écran graphique est tout bizarre, ce doit être une oeuvre abstraite. Mais, sans rigoler, l'accès est impossible en mode graphique et bloque le clavier si l'on a le malheur de cliquer. 
La machine reste toutefois accessible par ssh ... essayons de lancer une MV par ssh, "xm new MV" puis "xm start MV", tiens cela a l'air de marcher ... la machine virtuelle est accessible de l'extérieur, une petite connexion en X permet un accès graphique normal à la MV, tout est donc normal à part cet écran graphique bloqué ! 
Je tente alors de passer par kdm au lieu de gdm, plus de GNOME mais du KDE. 
En mode non-XEN tout est OK, le fonctionnement est parfait l'écran KDE est lui aussi très esthétique. 
En mode XEN ... ce n'est pas mieux qu'avec GNOME l'écran graphique reste dans un état "bizarre" et tant que l'on a pas cliqué sur cet écran de malheur on peut commuter sur les terminaux caractère par Ctrl+Alt+Fn. 
Vite un petit rapport de bug pour tenter d'aider à résoudre ce problème :

  • Bug non encore répertorié (Release Candidate), tout est normal en 11.1, je l'ouvre
  • Rapidement un début de solution : dire à XEN de n'utiliser que 4Go, ... et ça marche, la session X s'ouvre et on peut lancer une machine virtuelle en interactif.
  • Une piste pour la solution de ce bug existe, une limite mémoire à 4Go cela me rappelle un système 32bits ! 'ai proposé de tester le patch dès qu'il sera disponible.
  • 7 Novembre : le patch est disponible ... il concerne "vmalloc.c" qui semblait ne pas bien s'entendre avec Xen. Le patch passé on recompile le noyau sous un autre nom. Après ajout des lignes "qui vont bien" dans le fichier de configuration de grub (menu.lst) on teste et c'est OK ! 
    Toute la mémoire est reconnue sous Xen, le serveur X se lance correctement, tout est pour le mieux dans le (presque) meilleur des mondes. J'espère que ce patch va être intégré dans la version définitive.

Evidemment ce n'est pas terrible de limiter à 4Go, je le vois mal sur un serveur de production (j'en connais à 64 Go) avec 2 douzaines de MV). Enfin je peux tester cette version 11.2 avec un XEN 3.4.1 dernier cri. Et cela marche assez bien. 
Pour montrer que cela marche je ne résiste pas à montrer l'écran avec la MV sur laquelle je suis en train de travailler (KDE + Windows) : 
 

Cela prouve que tout marche ! 

En bref SSD c'est OK, à part lors de l'initialisation du système où quelque chose ne "suit" pas. 
Tests de vitesse :

  • Sur un RAID (miroir) SATA : 
    hdparm -t /dev/md1 
    /dev/md1: 
    Timing buffered disk reads:  232 MB in  3.00 seconds =  77.25 MB/sec
  • Sur le SSD : 
    hdparm -t /dev/sdc1 
    /dev/sdc1: 
    Timing buffered disk reads:  508 MB in  3.00 seconds = 169.26 MB/sec

Ces différences expliquent la réduction du temps de boot, le confort ressenti au chargement d'applications. 
Temps de boot du système depuis le choix du noyau (GRUB) < 16 secondes pour l'invite de X, le système contient  4 disques de données (miroir et LVM) en plus du SSD et deux interfaces réseau ce qui rallonge le temps de boot. 

En bref : SSD c'est presque OK ! Pour terminer, économisez votre SSD en lui évitant des ordres d'écriture dont il peut se passer, utiliser les options "nodiratime" et "relatime / noatime" dans le fichier /etc/fstab, voici la ligne correspondante dans mon propre fichier fstab : 
UUID=e5a02c97-cba2-4198-9b7a-1b1d354143ba  /  ext3  relatime,nodiratime,errors=remount-ro     0       1 
cela pourrait être aussi :  
/dev/sda1         /               ext3    relatime,nodiratime,errors=remount-ro     0       1

SSD : importance du TRIM

SSD : importance du TRIM jpp

Les disques SSD c'est bien, c'est super-rapide, mais cela souffre d'un certain handicap après de nombreuses mises à jour. Le contrôleur interne du SSD essaye de répartir l'utilisation des "blocs" afin de ne pas avoir un bloc ré-écrit en permanence qui ne manquerait pas de "s'user" avant les autres. 
Le contrôleur interne du SSD a donc "besoin" de connaitre les blocs libérés afin de pouvoir les ré-attribuer. Or les systèmes de gestion de fichiers de Linux, s'ils libèrent les blocs d'un fichier détruit (et enregistrent ces blocs comme "libres) n'en informent pas le contrôleur interne du SSD, celui-ci se trouve donc, au bout d'un certain temps, "à court" de blocs qu'il sait pouvoir réattribuer. 
Cet état de fait est très préjudiciable à la performance (surtout en écriture) lorsque le disque a un peu vécu. 
Heureusement on trouve sur Sourceforge au sein du projet "hdparm" un logiciel (wiper) qui permet de transmettre au contrôleur interne du SSD les renseignements voulus (http://sourceforge.net/projects/hdparm/files/wiper-2.6.tar.gz) qui permet de réaliser l'opération. 
Le seul problème est que mon disque (OCZ Vertex) était un peu "ancien" (version firmware 1.4) et qu'il faut être au moins en 1.5). Heureusement, OCZ a publié une image ISO qui permet de réaliser cette opération délicate, on peut la trouver à (http://www.ocztechnologyforum.com/staff/ryderocz/vertex/vertex_15.zip) qu'il faut dézipper, graver en ISO. Il faut ensuite booter sur le CD avec le SSD monté, le reste est expliqué sur l'écran, attention tous les SSD Vertex (même en version 1.4) ne sont pas "capables" de recevoir cette mise à niveau (???). 
Nouveauté 1: il existe sur le site une version pour SSD "récalcitrants" (avec "fail" dans le nom, j'en avais un qui refusait la mise à jour "standard", avec cette version l'affreux SSD a parfaitement été mis à jour. 
Nouveauté 2 : il existe maintenant une version 1.6 du soft des SSD que je vais essayer à l'occasion. 

Attention, ces manipulations peuvent entraîner une perte de données !!! Un bon backup est nécessaire !!! 
Dans mon cas où il s'agissait du disque "système", j'en ai réalisé une copie conforme sur un "vieux" disque SATA (dd est un très bon ami à moi) que j'ai ensuite testé (faut que ça boote !), avant de tenter les manip : "upgrade version firmware SSD" et "wiper". 
Ces manipulations devraient disparaître peu à peu en fonction de l'évolution des noyaux, (il existe des outils intégrés pour Windows 7) et le noyau Linux devrait rapidement prendre en compte cette option. 
En attendant il est nécessaire de recourir à des manipulations assez peu orthodoxes. Si on peut "wiperiser" un disque démonté il n'est pas possible de la faire sur le disque système, le mieux est probablement de disposer d'un CD (ou clé USB) avec un système minimal et le très fameux WIPER. 
Toutefois il n'est pas besion d'exécuer cette manip tous les jours ! Sur un disque très chargé en écriture comme le mien (cela s'est calmé depuis) il a fallu plusieurs mois avant de ressentir le ralentissement en écriture, la lecture restait OK. 
J'ai refait les tests "iozone" (il faut conserver les scripts !) lors desquels j'avais trouvé des performances "horribles" en écriture sur une machine et les résultats sont là : il faut trimer pour que le disque bosse à la vitesse max. 
Note : cette machine avait servi à de nombreuses compilations (et installations) de noyaux et de différentes version de XEN, opérations qui réalisent énormément d'écritures. 

Voici deux séries d'image dans le style AVANT/APRES bien connu des publicitaires .... mais ce n'est pas du rêve, c'est bien la réalité

 

Avant Après
"Write" 

 
 Random Write 

 
Record Write 

 
 

C'est assez spectaculaire, et c'est bien, physiquement, le même disque ... vive le TRIM. 

Une séance de trim : 
1) Test sans valider, "pour voir" 
# ./wiper.sh /dev/sdb2                                                 

wiper.sh: Linux SATA SSD TRIM utility, version 2.6, by Mark Lord. 
Hdparm version 
Target=/dev/sdb2 Method=offline 
Preparing for offline TRIM of free space on /dev/sdb2 (ext3 non-mounted). 
This will be a DRY-RUN only.  Use --commit to do it for real. 
Syncing disks.. 
Simulating TRIM operations.. 
(dry-run) trimming 37690664 sectors from 8058 ranges 
Done. 
2) Un passage "en vrai" : 
./wiper.sh /dev/sdb2 --commit 

wiper.sh: Linux SATA SSD TRIM utility, version 2.6, by Mark Lord. 
Hdparm version 
Target=/dev/sdb2 Method=offline 
Preparing for offline TRIM of free space on /dev/sdb2 (ext3 non-mounted). 

This operation could silently destroy your data.  Are you sure (y/N)? y 
Syncing disks.. 
Beginning TRIM operations.. 

/dev/sdb: 
trimming 37690664 sectors from 8058 ranges 
succeeded 
Done.

Et en plus c'est très rapide, moins d'une minute. Le seul problème est que cela ne fonctionne pas sur un disque monté et un disque système non monté c'est légèrement gênant !

Mais si l'on a un autre disque bootable il n'y a aucun problème, on peut aussi démarrer sur un Live CD sur lequel on a installé le logiciel adéquat. J'ai deux disques bootables sur deux versions différentes du système dont une "stable", donc pas de problème de ce coté.

Le support du "TRIM" est partiel depuis le noyau 2.6.32 et limité aux filesystems "btrfs" (2.6.32) et "ext4" (2.6.33) en utilisant l'option "discard" dans la déclaration du périphérique dans "fstab", exemple :

/dev/sda1 / ext4 defaults,noatime,discard 0 0

Il va falloir passer le disque système en ext4, est-ce déjà judicieux ?

SSD : 2016 le TRIM

SSD : 2016 le TRIM jpp

Le "TRIM" est toujours important mais les noyaux et les" file systems" récents offrent des possibilités d'automatisation des actions de TRIM. 
Au niveau du fichier "fstab" : 
L'apparition d'une nouvelle possibilité "discard" permet d'automatiser la gestion du TRIM en la laissant au système, il faut pour cela disposer de noyaux assez récents et je ne sais plus quelle version a apporté cette nouveauté. 
Exemple de déclaration "fstab" :

LABEL=LOG1    /LOG/LOG1   ext4    auto,noatime,relatime,discard    2    0

Au niveau de LVM : 
Il est là aussi possible de spécifier une option automatisant le TRIM au niveau de LVM, ceci se fait dans le fichier "lvm.conf". 
Exemple de déclaration dans le fichier /etc/lvm/lvm.conf : 
issue_discards = 1 
Ce fichier est par ailleurs très bien commenté (au moins sur une Debian).

Après ces petites interventions, et un reboot, plus de soucis de trim sur vos beaux SSD qui garderont une performance optimale, probablement au prix d'une légère diminution de leur durée de vie.