Matériel et performance

Matériel et performance jpp

Ce "livre" est destiné à regrouper des articles ayant trait à la performance des matériels, entre autres les disques 
Ne sachant pas où placer un article sur la performance du cache de PHP 7.3/7.4 je l'ai "accroché" ici. 
Une nouveauté, une carte presque abordable : #250 euros, permettant l'installation de 4 disques NVME dans une machine munie d'un port PCI express.

Mise en service d'un boîtier disques destiné à recevoir les disques (RAID5) en provenance d'une vieille machine (carte mère de 2009) : à voir ici.

Boitier disque ICY BOX

Boitier disque ICY BOX jpp

Afin de "récupérer" les disques d'un RAID5 installé sur une ancienne machine (carte mère de 2009 qui a rendu l'âme) qui me sert à sauvegarder les données précieuses j'ai utilisé un boitier "ICY BOX" USB C pour 5 disques.

Le boîtier est assez petit, pas trop lourd et semble bien refroidi (aluminium et ventilateur). L'installation des disques est facile et les tiroirs disposent d'un moyen de "bloquer" l'ouverture pour sécuriser un peu le fonctionnement. Les 5 disques sont alimentés indépendamment et il est donc possible de n'allumer que ceux qui sont nécessaires. Pour mon RAID5 à 5 disques il faut bien sûr les allumer tous pour ne pas avoir un RAID défaillant ! 
Note : ces disques sont des  Western Digital EADS-00L5B1 de 1To dont certains datent de 6 ou 7 ans, un "mauvais" a été remplacés par un disque plus récent il y a environ deux ans .... 
Une fois les disques installés, le boîtier branché en USB A sur une "petite" machine pour commencer et les 5 "boutons" appuyés les LED témoins s'allument, et en regardant sur la machine, je constate que les disques sont bien reconnus comme RAID5.  
Un simple "vgdisplay" donne le résultat suivant :

vgdisplay
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  20
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               3,63 TiB
  PE Size               4,00 MiB
  Total PE              951953
  Alloc PE / Size       765211 / <2,92 TiB
  Free  PE / Size       186742 / 729,46 GiB
  VG UUID               Ol7tES-BfTi-Wz5J-XYzG-01zP-R5rB-6p4kBX

Le montage "mount /dev/vg0/lv0 /mnt" est OK et les données sont accessibles.  
Un test "rapide" de copie montre une vitesse de 20 à 40 Mo/seconde. Tout est donc OK en USB A.

Le montage suivant est fait sur une machine plus moderne qui dispose de ports USB C réputés plus rapides ...  
Là aussi la reconnaissance des disques est immédiate et tout est reconnu, le montage est OK.  
Un petit test en USB C avec mon copain "dd" :

dd if=/dev/zero of=/BAIES/SV_A/toto bs=65536 count=20480
20480+0 records in
20480+0 records out
1342177280 bytes (1,3 GB, 1,2 GiB) copied, 5,07159 s, 265 MB/s

Là, la vitesse est bien plus agréable qu'avec l'USB A ... pour 1,3Gb de données. Voyons avec un peu plus de données :

dd if=/dev/zero of=/BAIES/SV_A/toto bs=65536 count=204800
204800+0 records in
204800+0 records out
13421772800 bytes (13 GB, 12 GiB) copied, 71,1609 s, 189 MB/s

La vitesse est un peu tombée mais c'est quand même très correct pour de vieux disques "durs" à 7200 tours. En augmentant le volume écrit à 26Go la vitesse mesurée est de 193Mo/seconde.

Ce boîtier fonctionne donc très correctement en USB C et ne bridera pas la vitesse des sauvegardes faites à travers un réseau à 1GB seulement.  
Le seul "truc" est le démarrage unitaire des disques, il ne faut pas oublier d'appuyer sur les cinq boutons (à gauche sur la photo) pour que le RAID 5 fonctionne, mais cela peut être un avantage dans d'autres configurations de disques car on peut ne démarrer que les disques utiles. 
Pour finir la photo de ce bel engin :

A l'usage ces performances se confirment et ce boîtier est d'un usage simple et agréable si on n'oublie pas de bien enclencher les 5 disques du RAID 5 ! 
Pour d'autres configurations cela peut être utile et économiser un peu d'énergie en n'allumant que les disques nécessaires.
 

Changer disque système

Changer disque système jpp

Le démon (gentil celui là !) Smartd m'a signalé que le disque système de cette machine était très fatigué et qu'il ne lui restait que 10 à 15% de sa durée de vie, j'ai préféré le changer de suite par un tout neuf que j'avais en stock. 
Cette machine héberge, entre autres choses ce site et sert de frontal vers Internet pour toutes les machines de la maison (6 ou 7 quand même, sans compter le téléphones) et je n'ai pas envie qu'elle "craque" et que je sois obligé de ré-installer le système et tous les logiciels nécessaire, puis de restaurer tout le paramétrage (il est sauvegardé) car cela représente quelques heures de travail et c'est là qu'on s'aperçoit que les paramètres du logiciel machin-truc ne sont pas sauvegardés.

Changer le disque système ce n'est pas une tâche courante et n'ayant pas à ma disposition des tas de machines j'ai profité de la présence dans mon bureau (atelier ?) d'un boîtier permettant de connecter un disque SATA en USB du style de celui présenté ici , celui que j'ai maintenant est en USB, pour effectuer une copie de mon disque système. J'ai, en plus, réalisé une sauvegarde de ces données sur ma grappe RAID de sauvegarde. 
L'originalité de la méthode suivie réside dans le fait que la copie a été réalisée sur la machine elle même en fonctionnement. 
J'ai donc limité au maximum les programmes actifs :

  • Arrêt de l'interface vers internet, ne pas prendre de risques inutiles ...
  • Arrêt des machines virtuelles.
  • Arrêt des services non essentiels, cups, Mysql ..... parefeu ... et il y en a une quantité !

Une fois le système "calmé" j'ai connecté mon petit boîtier muni d'un disque de capacité supérieure à l'original, un vieux SSD 64Go, le nouveau fait 128Go. Il vaut mieux prendre un disque de capacité légèrement supérieure pour éviter un problème de disque un peu "trop court" ... les file systèmes apprécient rarement l'absence des derniers blocs. 
Une fois le disque reconnu au niveau de la machine (fdisk -l ) on peut lancer la copie, pour moi de /dev/sde vers /dev/sdf : 
dd if=/dev/sde of=/dev/sdf bs=65536 
Vu la faible taille de ce disque la copie est très rapide, à un peu plus de 300Mo/seconde cela ne représente pas un temps très long. 
Dès la copie terminée (ne pas oublier un "sync" pour bien forcer l'écriture) j'ai stoppé la machine, ouvert le boîtier (dépoussiéré au passage) et connecté le nouveau disque à la place de l'ancien. 
Le redémarrage s'est passé sans problème majeur, il m'a juste fallu au niveau du BIOS indiquer ce nouveau disque de boot différent du précédent. Le système fonctionne bien puisque je suis en train de m'en servir pour écrire cet article).

Sans vous souhaiter un problème de crash je pense que, la manip étant relativement simple et sûre (on dispose toujours de l'ancien disque en état de marche) il vaut mieux suivre les conseils du gentil démon Smartd et ne pas attendre un vrai crash. Par ailleurs le prix des SSD de petite capacité a tellement baissé que cela ne présente plus un gros obstacle. 
La même procédure peut s'appliquer pour remplacer un HDD fatigué par un SSD flambant neuf.

Disques : performance

Disques : performance jpp

La performance des disques.

Le premier article présente un moyen d'atteindre des débits disques plus importants : le "stripping".

Ces articles étalés sur une période supérieure à 10 ans montrent bien l'augmentation des performances de ces belles petites mécaniques (ou électroniques pour les SSD).

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.

SSD : mesures

SSD : mesures jpp

Les disques SSD sont très performants, c'est communément admis, mais qu'en est-il en réalité. Les systèmes Linux présentent plusieurs schedulers d'entrées/sorties, lequel est le plus adapté aux disques SSD ? 
Pour le savoir j'ai fait un certain nombre de mesures sur deux machines et avec plusieurs noyaux différents qui ont tous été compilés "à la maison". 
Le scheduler IO peut facilement être modifié dynamiquement disque par disque en intervenant dans le répertoire "/sys/block", dans ce répertoire on trouve un répertoire par disque physique contenant tout ce qu'il faut, entre autres un répertoire "queue" : 
ls -al /sys/block/sda/queue 
total 0 
drwxr-xr-x 3 root root    0 2010-01-27 15:00 . 
drwxr-xr-x 8 root root    0 2010-01-27 14:59 .. 
-r--r--r-- 1 root root 4096 2010-01-27 15:00 hw_sector_size 
drwxr-xr-x 2 root root    0 2010-01-27 15:10 iosched 
-rw-r--r-- 1 root root 4096 2010-01-27 15:10 iostats 
-r--r--r-- 1 root root 4096 2010-01-27 15:10 logical_block_size 
-r--r--r-- 1 root root 4096 2010-01-27 15:10 max_hw_sectors_kb 
-rw-r--r-- 1 root root 4096 2010-01-27 15:10 max_sectors_kb 
-r--r--r-- 1 root root 4096 2010-01-27 15:10 minimum_io_size 
-rw-r--r-- 1 root root 4096 2010-01-27 15:10 nomerges 
-rw-r--r-- 1 root root 4096 2010-01-27 15:10 nr_requests 
-r--r--r-- 1 root root 4096 2010-01-27 15:10 optimal_io_size 
-r--r--r-- 1 root root 4096 2010-01-27 15:10 physical_block_size 
-rw-r--r-- 1 root root 4096 2010-01-27 15:10 read_ahead_kb 
-rw-r--r-- 1 root root 4096 2010-01-27 15:00 rotational 
-rw-r--r-- 1 root root 4096 2010-01-27 15:10 rq_affinity 
-rw-r--r-- 1 root root 4096 2010-01-27 15:10 scheduler 

Le fichier "scheduler" contient la liste des schedulers (elevator) disponibles dans votre noyau : 
cat scheduler 
[noop] anticipatory cfq deadline 
Le scheduler actif est entouré de "[ ]" (brackets dans le texte). 
Note : "anticipatory" a disparu dans le noyau 2.6.33. 
Je vais tenter d'autres test plus représentatifs le la vie réelle (???) pour mieux mesurer l'influence (éventuelle ? ) du scheduler d'IO.Les tests réalisés sur plusieurs noyaux sont extrêmement longs et obligent à des "reboot" fréquents. 
Commentaires sur les résultats.

  • La dépendance des résultats au noyau est très forte (rappel : les noyaux sont compilés avec les mêmes options)
  • Dans les tests "vraie vie" la différence SSD/SATA est soit invisible soit pas dans le sens prévu (tests GZIP)
  • La dépendance par apport au scheduler d'IO est extrêmement faible et ne dépasse pas quelques pourcents.
  • En lecture pure (test hdparm) les SSD sont nettement plus performants (jusqu'au noyau 2.6.32 ?)

Quelques tests réalisés sur le noyau 2.6.32 on donné des résultats catastrophiques pour le SSD, 20% moins bien que le disque classique aux tests hdparm. 
J'ai récupéré et compilé un 2.6.33 (rc5) pour compléter les tableaux. Au niveau du test "hdparm" le résultat est très dégradé pour le SSD, par contre au niveau du test de compilation de 2.6.33 a fait des miracles. 
Les mesures obtenues avec "hdparm" étant un peu "bizarres" avec les disques SSD à partir du noyau 2.6.32 je pense qu'une modification importante des schedulers IO est en cours, c'est confirmé par la disparition du scheduler "anticipatory" dans le 2.6.33. Ces modifications rendent les résultats de "hdparm" tellement bizarres (anormaux et irréguliers pour les SSD) que ces résultats sont à prendre avec des pincettes. 
Dernières nouvelles les tests "hdparm" sont en cours de réfection avec un paramètre supplémentaire permettant un accès plus "direct" au hardware ( option --direct). Une nouvelle page est en préparation. 
 

SSD : mesures hdparm V0

SSD : mesures hdparm V0 jpp

Les tests ont été refaits avec de nouveaux noyaux. 
La première série de tests a été réalisée avec l'utilitaire "hdparm" dont l'option "-t" permet de mesurer un débit IO en lecture. 
Pour les machines que j'ai utilisées il s'agit des disques sda,sdb,sdc,sdd. L'une de ces machines est munie de disques en miroir, il a donc été nécessaire d'agir sur deux disques simultanément pour changer de scheduler. 
Premier test. 
Les résultats sont les suivants (valeurs en MO/seconde, le plus fort est le mieux !) : 

 

RAM 8GO     Quadcore kernel 2.6.30-2  
hdparm   hdparm hdparm hdparm TOTAL    
SSD RAID Noop 115,51 107,73 104,52 327,76 33,564% X
  CFQ 100,90 107,83 114,66 323,39 33,117%  
  Deadline 119,11 100,42 105,84 325,37 33,319%  
    335,52 315,98 325,02 976,52    
               
SATA RAID Noop 75,59 75,29 75,11 225,99 33,481% X
  CFQ 75,25 73,39 75,66 224,30 33,231%  
  Deadline 76,06 75,11 73,52 224,69 33,288%  
    226,90 223,79 224,29 674,98 SATA/SSD 69,12%
               
RAM 8GO     Dualcore kernel 2.6.31  
hdparm   hdparm hdparm hdparm TOTAL    
SSD Noop 133,35 132,61 131,89 397,85 33,241%  
  CFQ 131,36 132,33 134,13 397,82 33,238%  
  Deadline 133,63 133,96 133,61 401,20 33,521% X
    398,34 398,90 399,63 1196,87    
               
SATA RAID Noop 68,91 69,31 69,29 207,51 32,097%  
  CFQ 73,13 73,26 73,15 219,54 33,958% X
  Deadline 73,12 73,03 73,31 219,46 33,945%  
    215,16 215,60 215,75 646,51 SATA/SSD 54,02%
               
RAM 8GO     Quadcore kernel 2.6.32  
hdparm   hdparm hdparm hdparm TOTAL    
SSD RAID Noop 77,18 61,33 71,93 210,44 27,693%  
  CFQ 79,72 102,37 98,66 280,75 36,946% X
  Deadline 75,83 92,08 100,79 268,70 35,360%  
    232,73 255,78 271,38 759,89    
               
SATA RAID Noop 75,25 74,33 73,52 223,10 33,258%  
  CFQ 73,47 75,73 75,64 224,84 33,517% X
  Deadline 75,77 73,64 73,47 222,88 33,225%  
    224,49 223,70 222,63 670,82 SATA/SSD 88,28%
               
RAM 8GO     Quadcore kernel 2.6.33-rc5  
hdparm   hdparm hdparm hdparm TOTAL    
SSD RAID Noop 71,98 75,83 92,32 240,13 36,264%  
  CFQ 60,95 60,86 59,73 181,54 27,416%  
  Deadline 89,27 76,18 75,06 240,51 36,321% X
    222,20 212,87 227,11 662,18    
               
SATA RAID Noop 73,52 74,34 75,82 223,68 33,373%  
  CFQ 76,77 73,98 73,80 224,55 33,502% X
  Deadline 73,43 75,21 73,38 222,02 33,125%  
    223,72 223,53 223,00 670,25 SATA/SSD 101,22%

 

Constatation 1 : 
Les résultats sont très serrés, les différences sont peu marquantes et ne font en général que quelques pourcents. 
Constatation 2 : 
Les résultats sont différents sur la même machine avec des noyaux différents. 
Constatation 3 : 
Les résultats SSD sont meilleurs sur le Dualcore ... c'est normal, il ne s'agit pas du même SSD mais  d'un modèle vendu comme plus performant (et cela a l'air vrai) ... mais malheureusement nettement plus cher. 
Les résultats obtenus avec un noyau  > 2.6.32 sont un peu bizarres, à partir du 2.6.33 un des schedulers a disparu, je n'ai pas trouvé trace du "anticipatory scheduler", il ne reste que NOOP, CFQ et DEADLINE, les résultats sont comme pour le 2.6.32 très bizarres sur la partie SSD et se tiennent bien sur la partie SATA. J'ai oté toutes référence au scheduler "anticipatory" pour avoir des tableaux comparables sur toutes les versions. 

Le SSD présente des anomalies importantes de vitesse sur les noyaux récents :

  • Noyau 2.6.32 
    • Mini de 61,33
    • Maxi de 102,37 soit un écart de plus de 60% !
    • Alors que la partie SATA présente un écart inférieur à 3%.
  • Noyau 2.6.33
    • Mini de 59,73
    • Maxi de 92,32 soit un écart de près de 60%
    • Alors que la partie SATA présente un écart inférieur à 5%.

Les tests "hdparm" semblent complètement dépassés pour les dernières versions du noyau. Les indications relatives de ce test ne sont valables que pour les noyaux < 2.6.32. D'autre part les améliorations apportées par les noyaux >= 2.6.32 sont bel et bien ressenties à l'utilisation, voir les tests de compilation. 
Voir aussi la page sur les nouveaux tests "hdparm" éxécutés avec l'option " --direct" permettant d'utiliser plus directement le hardware. 
 

SSD : mesures hdparm V1

SSD : mesures hdparm V1 jpp

La première version des tests présentait des anomalies de performance et une grande irrégularité. J'ai "découvert" une option complémentaire de cet utilitaire ( --direct ) permettant d'atteindre plus directement le hardware en évitant le passage par les buffers système. Ce type d'option (utilisant le flag "O_DIRECT" du noyau) est d'ailleurs recommandé pour les bases de données afin d'éviter de multiples recopies en mémoire sources de perte de performance.

  • Sans "O_DIRECT" les données effectuent le transit suivant : HARDWARE --> page cache --> programme utilisateur.
  • Avec "O_DIRECT" le transit est plus direct : HARDWARE --> programme utilisateur


Cela se voit d'ailleurs dans les résultats qui représentent ainsi mieux les performances "brutes" du hardware (les valeurs indiquées sont en MO/seconde). 
Dualcore (SSD rapide) : 

RAM 8GO     Dualcore kernel 2.6.31        
hdparm -t   1 2 3 TOTAL    
SSD RAID Noop 201,87 207,80 203,05 204,24 103,873% X
  CFQ 154,12 202,68 204,47 187,09 95,151%  
  Deadline 189,17 203,52 202,94 198,54 100,976%  
    181,72 204,67 203,49 196,62    
               
SATA RAID Noop 73,50 69,23 73,48 72,07 100,721% X
  CFQ 69,26 73,22 69,58 70,69 98,787%  
  Deadline 73,20 69,32 73,20 71,91 100,492%  
    71,99 70,59 72,09 71,55 SSD/SATA 274,79%
               
RAM 8GO     Dualcore kernel 2.6.33        
hdparm -t   1 2 3 TOTAL    
SSD RAID Noop 201,06 202,40 201,43 201,63 101,058% X
  CFQ 198,19 197,41 199,59 198,40 99,437%  
  Deadline 198,50 198,60 198,50 198,53 99,505%  
    199,25 199,47 199,84 199,52    
               
SATA RAID Noop 68,99 69,07 69,12 69,06 99,722%  
  CFQ 69,06 69,54 69,31 69,30 100,074%  
  Deadline 69,72 69,23 69,23 69,39 100,204% X
    69,26 69,28 69,22 69,25 SSD/SATA 288,11%

Quadcore (SSD "lent") : 

RAM 8GO     Quadcore kernel 2.6.31        
hdparm -t   1 2 3 TOTAL    
SSD RAID Noop 144,79 144,42 101,67 130,29 105,715% X
  CFQ 125,20 144,35 101,65 123,73 100,392%  
  Deadline 144,39 101,12 101,66 115,72 93,893%  
    138,13 129,96 101,66 123,25    
               
SATA RAID Noop 75,62 73,62 76,04 75,09 100,341%  
  CFQ 73,41 75,83 73,54 74,26 99,228%  
  Deadline 75,83 73,58 76,07 75,16 100,431% X
    74,95 74,34 75,22 74,84 SSD/SATA 164,69%
               
RAM 8GO     Quadcore kernel 2.6.33        
hdparm -t   1 2 3 TOTAL    
SSD RAID Noop 137,88 137,87 137,87 137,87 103,297% X
  CFQ 137,85 137,84 137,86 137,85 103,280%  
  Deadline 137,82 137,87 98,39 124,69 93,423%  
    137,85 137,86 124,71 133,47    
               
SATA RAID Noop 75,78 75,85 75,87 75,83 100,066% X
  CFQ 75,71 75,69 75,81 75,74 99,938%  
  Deadline 75,78 75,71 75,85 75,78 99,996%  
    75,76 75,75 75,69 75,78 SSD/SATA 176,12%

Les résultats sont un peu irréguliers pour le SSD ce qui "baisse" la moyenne à 123MO/seconde en 2.6.31 et 133MO/seconde pour le noyau 2.6.33. 
Autre machine (ATOM N330) : 
J'ai fait faire les tests sur un nouveau "petit" serveur (ATOM N330) avec lequel on obtient les résultats suivants : 

RAM 2GO     MINIITX kernel 2.6.33        
hdparm -t   1 2 3 TOTAL    
SSD RAID Noop 148,34 152,50 149,89 150,24 100,647% X
  CFQ 149,63 154,00 143,41 149,01 99,823%  
  Deadline 144,02 148,59 153,12 148,58 99,530%  
    147,33 151,70 148,81 149,28    
               
SATA RAID Noop 73,59 73,52 73,33 73,48 100,041% X
  CFQ 73,52 73,56 73,35 73,48 100,036%  
  Deadline 73,30 73,45 73,43 73,39 99,923%  
    73,47 73,51 73,37 73,45 SSD/SATA 203,24%

Ce qui n'est pas mal du tout pour une petite machine. 
Il a juste fallu ajouter un disque SATA de 160Go (8Mo cache) dans la belle boîte pour faire ces tests.

SSD : mesures gzip

SSD : mesures gzip jpp

Deuxième test. 
Devant ces résultats un peu théoriques j'ai essayé de faire d'autres mesures peut-être plus représentatives. J'ai donc mesuré le temps de "dézipper" et de "rezipper" les sources du noyau "linux-2.6.31.6.tar.gz" soit à peu près 79Mo zippés et # 380Mo dézippés. 
Les commandes exécutées sont : 
sync 
cd $REP 
gzip -d linux-2.6.31.6.tar.gz 
sync 
gzip linux-2.6.31.6.tar 
sync 

Et la durée "ellapsed" de l'ensemble est mesurée par la commande "time" dont le résultat "real" est repris dans les tableaux. 
Trois séries de tests ont été exécutées pour chacun des schedulers disponibles.  

RAM 8GO     Quadcore kernel 2.6.30.2    
Gzip   Gzip Gzip Gzip TOTAL      
SSD RAID Noop 38,20 35,14 36,03 109,37 24,726% X 24,726%
  CFQ 38,06 37,20 36,50 111,76 25,267%    
  Anticip 36,84 36,20 37,17 110,21 24,916%    
  Deadline 38,89 36,07 36,02 110,98 25,091%    
    151,99 144,61 145,72 442,32      
                 
SATA RAID Noop 25,88 26,08 26,14 78,10 25,006%   24,853%
  CFQ 26,21 26,11 26,25 78,57 25,157%    
  Anticip 25,90 25,95 26,18 78,03 24,984%    
  Deadline 25,48 26,03 26,11 77,62 24,853% X  
    103,47 104,17 104,68 312,32      
                 
RAM 3GO     Quadcore kernel 2.6.31.4-xen (XEN)    
Gzip   Gzip Gzip Gzip TOTAL      
SSD RAID Noop 69,62 67,71 69,00 206,33 25,056%   24,801%
  CFQ 69,13 68,31 66,79 204,23 24,801% X  
  Anticip 69,78 67,77 69,32 206,87 25,122%    
  Deadline 68,94 68,85 68,25 206,04 25,021%    
    277,47 272,64 273,36 823,47      
                 
SATA RAID Noop 58,96 58,30 58,65 175,91 24,999% X 24,999%
  CFQ 58,43 58,91 58,58 175,92 25,000%    
  Anticip 58,67 58,53 58,71 175,91 24,999% X  
  Deadline 58,30 59,51 58,12 175,93 25,002%    
    234,36 235,25 234,06 703,67      
                 
RAM 8GO     Quadcore kernel 2.6.31.4-xen (XEN)    
Gzip   Gzip Gzip Gzip TOTAL      
SSD RAID Noop 73,08 74,02 71,39 218,49 24,943%   24,904%
  CFQ 74,30 72,18 73,82 220,30 25,150%    
  Anticip 72,62 72,90 73,50 219,02 25,003%    
  Deadline 73,35 73,03 71,77 218,15 24,904% X  
    293,35 292,13 290,48 875,96      
                 
SATA RAID Noop 62,21 62,09 62,24 186,54 24,985% X 24,985%
  CFQ 62,08 61,62 63,18 186,88 25,030%    
  Anticip 62,09 61,70 62,85 186,64 24,998%    
  Deadline 63,08 61,90 61,57 186,55 24,986%    
    249,46 247,31 249,84 746,61      


Les résultats montrent que les SSD ne gagnent pas toujours ! Curieusement tous les tests sur le disque SSD sont très nettement moins bons, presque deux fois moins rapides !

Une analyse plus fine montre que les temps de dézippage sont quasiment identiques (# 3 secondes) mais les temps de zippage sont très différents, 30 secondes pour le SSD et 15 secondes pour le disque SATA. Les quelques seconds "manquantes" sont le fait des ordres "sync" destinés à forcer les écritures.

Je n'ai encore trouvé aucune explication à ce phénomène, mais visiblement ce test pose un problème aux disques SSD.

On remarque dans ces tableaux que deux noyaux assez proches (2.6.30 et 2.6.31) ont des temps de réponse très différents :

2.6.30 : durée totale des tests (8Go RAM) : 442 + 312 = 754

2.6.31 : durée totale des tests  (3Go RAM) : 823 + 703 = 1526 soit grossièrement le double des temps du 2.6.30 !

2.6.31 : durée totale des tests (8Go RAM) : contre toute attente la durée totale est de plus de 1620 secondes soit 6% de plus qu'avec 3Go.

Je constate sans expliquer .....

SSD : mesures compilation

SSD : mesures compilation jpp

Devant les différents points d'interrogation posés par les tests précédents j'ai décidé de faire d'autres tests encore plus près de "la vie réelle" en réalisant un petit exercice de compilation. 
J'ai pris comme "cobaye" le logiciel IPERF dans sa version 2.0.4 et réalisé les opérations suivantes :

  • Création d'un répertoire de compilation sur le SSD /var/tmp/iperf-2.0.4
  • Création d'un répertoire de compilation sur le disque SATA /RAIDZZZ/tempo/iperf-2.0.4

Chacun de ces répertoires comporte bien entendu l'arbre des sources de IPERF et une compilation a été réalisée "à la main". Les opérations réalisées par le script (mesurées par la commande "time" ) seront : 
sync 
cd $REP 
make clean 
rm -f config.status 
./configure 
make -j 2 
sync 
Les temps "real" figurent dans le tableau suivant ( valeurs en secondes, le plus faible est le mieux) :

RAM 8GO     Dualcore kernel 2.6.31    
Compil   Compil Compil Compil TOTAL      
SSD RAID Noop 14,98 15,30 15,08 45,36 33,324%   33,257%
  CFQ 15,02 15,17 15,08 45,27 33,257% X  
  Deadline 15,17 15,19 15,13 45,49 33,419%    
    45,17 45,66 45,29 136,12      
                 
SATA RAID Noop 15,86 15,91 15,85 47,62 33,649%   33,154%
  CFQ 15,83 15,82 15,27 46,92 33,154% X  
  Deadline 15,93 15,33 15,72 46,98 33,197%    
    47,62 47,06 46,84 141,52 SATA/SSD 103,97%  
                 
RAM 3GO     Quadcore kernel 2.6.31-4-xen    
Compil   Compil Compil Compil TOTAL      
SSD RAID Noop 28,80 27,86 27,71 84,37 33,190%   33,068%
  CFQ 27,89 28,30 27,87 84,06 33,068% X  
  Deadline 28,18 28,32 29,27 85,77 33,741%    
    84,87 84,48 84,85 254,20      
                 
SATA RAID Noop 28,83 28,17 27,93 84,93 33,377%   33,149%
  CFQ 28,27 28,52 28,39 85,18 33,475%    
  Deadline 27,97 27,82 28,56 84,35 33,149% X  
    85,07 84,51 84,88 254,46 SATA/SSD 100,10%  
                 
RAM 3GO     Dualcore kernel 2.6.31-8-xen    
Compil   Compil Compil Compil TOTAL      
SSD RAID Noop 14,34 15,20 15,19 44,73 33,116% X 33,116%
  CFQ 15,11 15,13 15,23 45,47 33,664%    
  Deadline 14,84 15,11 14,92 44,87 33,220%    
    44,29 45,44 45,34 135,07      
                 
SATA RAID Noop 16,59 15,83 16,65 49,07 34,152%   32,719%
  CFQ 15,87 15,44 15,70 47,01 32,719% X  
  Deadline 15,85 15,90 15,85 47,60 33,129%    
    48,31 47,17 48,20 143,68 SATA/SSD 106,37%  
                 
RAM 8GO     Quadcore kernel 2.6.30-2    
Compil   Compil Compil Compil TOTAL      
SSD RAID Noop 14,48 14,39 14,28 43,15 33,538%   33,103%
  CFQ 14,24 14,07 14,28 42,59 33,103% X  
  Deadline 14,26 14,45 14,21 42,92 33,359%    
    42,98 42,91 42,77 128,66      
                 
SATA RAID Noop 14,70 15,46 15,08 45,24 34,066%   32,937%
  CFQ 14,28 14,11 15,43 43,82 32,997%    
  Deadline 14,35 14,79 14,60 43,74 32,937% X  
    43,33 44,36 45,11 132,80 SATA/SSD 103,22%  
                 
RAM 8GO     Quadcore kernel 2.6.32    
Compil   Compil Compil Compil TOTAL      
SSD RAID Noop 11,09 10,38 10,24 31,71 34,031%   32,958%
  CFQ 10,19 10,33 10,19 30,71 32,958% X  
  Deadline 10,33 10,26 10,17 30,76 33,011%    
    31,61 30,97 30,60 93,18      
                 
SATA RAID Noop 11,69 10,88 10,95 33,52 33,924%   32,952%
  CFQ 10,81 10,87 10,88 32,56 32,952% X  
  Deadline 10,97 10,90 10,86 32,73 33,124%    
    33,47 32,65 32,69 98,81 SATA/SSD 106,04%  
                 
RAM 8GO     Quadcore kernel 2.6.33-rc5    
Compil   Compil Compil Compil TOTAL      
SSD RAID Noop 10,17 10,16 10,21 30,54 33,217% X 33,217%
  CFQ 10,22 10,30 10,29 30,81 33,511%    
  Deadline 10,17 10,17 10,25 30,59 33,272%    
    30,56 30,63 30,75 91,94      
                 
SATA RAID Noop 10,22 10,28 10,30 30,80 33,315% X 33,315%
  CFQ 10,25 10,30 10,30 30,85 33,369%    
  Deadline 10,22 10,28 10,30 30,80 33,315% X  
    30,69 30,86 30,90 92,45 SATA/SSD 100,55%  
                 
RAM 8GO     Dualcore kernel 2.6.33-rc6    
Compil   Compil Compil Compil TOTAL      
SSD RAID Noop 12,62 12,19 12,06 36,87 33,601%   32,963%
  CFQ 12,00 12,19 11,98 36,17 32,963% X  
  Deadline 12,02 12,21 12,46 36,69 33,437%    
    36,64 36,59 36,50 109,73      
                 
SATA RAID Noop 13,73 13,08 12,37 39,18 33,313%   32,829%
  CFQ 13,11 13,61 13,10 39,82 33,858%    
  Deadline 12,74 12,81 13,06 38,61 32,829% X  
    39,58 39,50 38,53 117,61 SATA/SSD 107,18%  


Par ailleurs les différences entre les différents scheduler d'IO ne sont pas significatives sur ces tests car elles restent inférieures à 1%.Les temps sont meilleurs pour les deux types de disques dans les montées de version du noyau Linux. 
Le temps total (9 exécutions) passe de #92 secondes pour le noyau 2.6.33 à #95 pour le 2.6.32 à #130 secondes pour le 2.6.30. Visiblement les développeurs du noyau ont bien travaillé et les progrès sont nettement visibles. 
Cette série de tests montre un léger avantage au SSD par apport au disque "classique" une différence de 4 à 6% se manifeste en sa faveur.

SSD : mesures IOZONE

SSD : mesures IOZONE jpp

La construction des tests progresse, les groupes de valeurs ont été choisis :

  • Taille des fichiers testés : 4, 8, 16, 32, 64, 128, 256, 512 et 1024 MégaOctets
  • Taille des enregistrements : 16, 32, 64, 128, 256 et 512 octets

 Cela devrait donner des chiffres significatifs. Pour pouvoir effectuer ces tests pour plusieurs noyaux sur SSD et SATA classique un petit ensemble de scripts a été réalisé et pour présenter de jolis graphiques je me suis replongé dans "GNUPLOT" et après quelques scripts de traitement des données il me sera possible de présenter de jolis dessins. 
Par contre l'acquisition des tests est très longue et se chiffre en heures pour un seul passage complet de tests. 
Devant le peu de différences entre les différents schedulers les tests ne seront faits que pour le scheduler "noop", a priori le moins compliqué, qui devrait mieux représenter la performance "brute" des disques. 
Les petits dessins et quelques commentaires sous peu ... dès que l'ensemble des tests aura "tourné" et que quelques commentaires seront disponibles ... 
La commande utilisée ( ici fichier de 1024Mo, enregistrements de 32 caractères sur un disque SATA ) : 

iozone -s 1048576 -r 32 -f /tempo/testio -I -o -M

  • -s Taille du fichier en KO
  • -r taille de l'enregistrement en cacartères
  • -f fichier de travail (sur disque SATA ou SSD)
  • -I  Use VxFS VX_DIRECT, O_DIRECT,or O_DIRECTIO for all file operation
  • -o  Writes are synch (O_SYNC)
  • -M Report uname -a output

8

Les tests sont réalisés sur deux machines possédant chacune des disques SSD et des SATA classiques :

  • Amd dualcore 4400+ à 2.20 Ghz, 8 Go RAM, contrôleur SATA nvidia CK804, avec un SSD très rapide et deux disques SATA 1To en RAID1 (miroir).
  • Amd quadcore 905e à 2,5Ghz, 8Go Ram, contrôleur ATI SB700/SB800, avec un SSD plus standard et deux disques SATA assez anciens de 160Go en RAID1 (miroir).

Cà y est enfin, j'ai toutes les données nécessaires, le processus est très long ... deux à quatre heures pour chaque noyau. Et en plus il ne faut pas toucher la machine pendant la prise de données pour ne pas fausser les résultats. 
Les scripts préparés pour Gnuplot sont OK, ils génèrent bien les graphes escomptés, maintenant il faut essayer d'en extraire la quintessence pour la présenter. On peut déjà dire que certains résultats sont un peu curieux et n'ont pas d'explication immédiate, d'autres sont plus évidents et vont dans le sens prévu. Il semble toutefois que les disques SSD ne soient pas la panacée malgré un certain nombre d'avantages. 
Il semble par ailleurs que "iozone" soit partiellement inadapté aux disques modernes munis de cache très importants. Les disques SATA ont 8Mo de cache sur la machine quadcore et 32Mo sur la machine dualcore. Les caches des disques SSD sont encore plus volumineux : 64 Mo. 
Très bientôt les premiers résultats, la structure d'accueil est prête ...

SSD : IOZONE lecture

SSD : IOZONE lecture jpp

Résultats en lecture, tous les résultats sont donnés pour les deux versions de noyau choisies 2.6.31 et 2.6.33. 
Dualcore

De grosses différences se manifestent, d'une part dans les "petits" fichiers où la taille du cache du disque semble prépondérante, le noyau 2.6.33 donne de superbes résultats sur le disque "classique" pour les petites tailles de fichiers, le SSD l'emporte dès que la taille des fichiers augmente. Le noyau 2.6.33 semble "brider" la performance du SSD. 
Remarque : le SSD semble plus beaucoup plus sensible à la taille des enregistrements, il prend l'avantage dès que la taille des enregistrements dépasse 128 octets. 

Quadcore :

La forme des courbes est beaucoup plus régulière que sur le dualcore, le SSD prends l'avantage dès les petites valeurs d'enregistrements et accentue son avance lorsque l'enregistrement s'allonge. 
La vitesse maxi du SSD est moindre que pour le dualcore, ce qui semble normal au vu des types de disques. La courbe des disques SATA est plus régulière et plus "pentue" que pour le dualcore, est-ce une influence de la taille de cache beaucoup plus réduite. 

Conclusion : avantage au SSD dès que la longueur des enregistrements dépasse 32, l'avantage s’accroît avec la taille des fichiers et celle des enregistrements.

SSD : IOZONE lecture random

SSD : IOZONE lecture random jpp

Résultats en lecture "random", tous les résultats sont donnés pour les deux versions de noyau choisies 2.6.31 et 2.6.33. 
Dualcore

Les résultats sont bien ceux attendus, le SSD gagne haut la main. Le fait de ne pas avoir de délai rotationnel ni de temps de déplacement des têtes permet au SSD de dominer très largement dès que l'on sort un peu des caches (au delà de 32Mo). Le noyau 2.6.33 semble exploiter mieux les caches du disque "classique" pour les petits fichiers ( < taille du cache) où la vitesse atteint des sommets impressionnants. 

Quadcore :

Les caches plus petits des disques classiques donnent un aspect beaucoup plus "lisse" aux graphes, le SSD gagne là aussi haut la main quel que soit le noyau. Les résultats sont équivalents pour les deux noyaux testés. 

Conclusion : les disques SSD gagnent logiquement ce match, les délais (rotationnels et piste à piste) sont ici très défavorables qux disques "classiques".

SSD : IOZONE écriture

SSD : IOZONE écriture jpp

Résultats en écriture, tous les résultats sont donnés pour les deux versions de noyau choisies 2.6.31 et 2.6.33. 
Dualcore

Des résultats curieux, l'avantage reste au SSD mais le noyau 2.6.33 donne de très bonnes performances au disque "classique" en exploitant beaucoup mieux les caches (très visible sur les petites tailles de fichiers) alors qu'avec le 2.6.31 les résultats sont très faibles pour le disque "classique" sans aucune explication évidente. 

Quadcore :

Là c'est spécial, le SSD est très lent (!), alors que le SATA se comporte beaucoup mieux. Aucune explication évidente à part les contrôleurs disques et les drivers associés ou encore ce disque SSD pas bon en écriture ? 

Conclusion : sur ce test une des deux machines donne un résultat contraire à la logique et franchement surprenant sans explication évidente. A ce sujet voir l'article sur le TRIM.

SSD : IOZONE écriture random

SSD : IOZONE écriture random jpp

Résultats en écriture "random", tous les résultats sont donnés pour les deux versions de noyau choisies 2.6.31 et 2.6.33. 
Dualcore :

Les résultats sont "logiques" et montrent un net avantage au SSD qui tire avantage de sa structure "statique". Les caches permettent qu disque "classique" de faire illusion sur les fichiers de petite taille ( < taille du cache). 

Quadcore :

Même résultats "illogiques", le disque "classique" l'emporte sur le SSD dans la plupart des configurations sans aucune explication évidente. 

Conclusion : sur le dualcore le SSD l'emporte de manière évidente, sur le quadcore il se passe quelque chose de très défavorable au SSD et les résultats du disque "classique" ne sont même pas bons. Une vérification s'impose au niveau du paramétrage de chaque système. Voir à ce sujet l'article sur le TRIM.

SSD : mesures, gnuplot

SSD : mesures, gnuplot jpp

Ayant passé quelques heures à rechercher les "bons" paramètres pour gnuplot je ne résiste pas et vous livre le script qui permet de réaliser ces beaux dessins :

set terminal png size 600,800 
# Paramètres 
# X = COL 1 (taille fichier) 
set xrange [4096:1200000] 
set logscale x 
set xtics ("4M" 4096,"8M" 8192,"16M" 16384,"32M" 32768,"64M" 65536,"128M" 131072,"256M" 262144,"512M" 524288,"1G" 1048576," " 1200000) 

# Y = COL 2 (taille record) 
set yrange [16:512]; 
set logscale y 
set ytics  (16,32,64,128,256,512) 

# Z = valeur (affichée en "vertical") 
set zrange [1000:45000] 
set ztics 4500 

set grid xtics ytics ztics 

set title "Graphe pour write  QUAD 2.6.33" 

# rotation de l'image 
# Paramètres  1 = haut bas, 2 = rotation "verticale", 3 = scale x, 4 = scale Y 
set view 82,30,1,1 
show view; 

# paramètres des graphes 
# pas toujours beau de cacher 
# set hidden3d 

set ticslevel 0 

# Dessin de la courbe 
set output './GR3D_write.png' 

# Les valeurs sont 1      2      3 
#                  Horiz  Prof   Vert 
# --> seule la colonne 3 change 

splot './GR3D_SATA.data' using 1:2:3 with linespoints title "Sata" ,\ 
      './GR3D_SSD.data' using 1:2:3 with linespoints title "SSD" 

Les données issues de IOZONE se présentent sous la forme suivante : 
4096      16    5186   16680    14973    16750   43991   19815   17172    35960    16189   271512   637599 
41750  1252212 
8192      16    1434    9323    28470    30851   49824   11009   12213    22726    23055   261390   647544 
1321294  1332670 
16384      16    2342    8505    34228    44150   49955    5517   23756    28867    29089   266250   645243 1329232  1349806 
32768      16    1910    7892    46899    52612   49608    5493   31623    48795    40638   262227   637958 1308162  1318313 
65536      16    1901   15269    57790    59384   50686    5318   38498    38474    45373   262871   636297 1325699  1338611 
131072      16    2056   13492    50604    63858   50527    5627   46133    40310    48394   259907   629282 
1303419  1313993 
262144      16    2109   15342    56704    68718   48837    6939   49306    30937    49158   261380   648884 1312499  1319461 
524288      16    2210   14232    67886    68860   49550    6104   49283    48960    49798   249599   626107  423431  1334324 

Pour chaque longueur d'enregistrement. L'association du script et des données (pour toutes les longueurs d'enregistrement donne les jolis dessins suivants:

  • En "horizontal" la taille de fichier (4M à 1024M)
  • En "profondeur" la taille d'enregistrement (16 à 512)
  • En "hauteur" la valeur de la donnée en KO/seconde

C'est y pas beau ?

 
 

Tester BTFRS

Tester BTFRS jpp

Le nouveau/futur système de fichiers pour Linux semble être BTRFS car celui-ci est censé apporter un certain nombre de nouveautés et de facilités que d'autres systèmes (Solaris 10?) possèdent et qui simplifient la vie des administrateurs.

La possibilité d'agrandir, de réduire des FS, de jouer avec les modes RAID et d'effectuer des "snapshots" de manière simple et au sein du même outil devrait apporter beaucoup plus de souplesse au niveau de l'administration.

Mais BTRFS n'est pas encore prêt pour passer en production et les outils en version 0.19 rappellent bien que ce système est encore en période de rodage ! 
Note 2016 : BTRFS est maintenant "adulte" et suffisamment stable pour la production.

Je vous propose toutefois quelques tests "pour voir".

Première approche de BTRFS

Première approche de BTRFS jpp

Le premier test est juste destiné à apprendre le fonctionnement basique des outils liés à BTRFS il a été executé sur des volumes LVM créés pour l'occasion avant de passer au travail sur des partitions physiques. 
Mais, ATTENTION, la version des outils n'est (sur Debian unstable) encore que "0.19+20120328-1". Cela bouge mais la version "stable" 1.0 est peut-être encore assez loin. 
Pour tester BTRFS il faut un noyau dont le support BTRFS est activé ! Si, comme c'est probable le support BTRFS est compilé en module un simple : 
modprobe btrfs 
devrait vous renseigner : 
FATAL: Module btrfs.ko not found. 
ou bien meilleur aucun message et un code retour 0. 
Ce support devrait être actif pour les noyaux récents de la plupart des distributions, sinon compilez le vous même et installez le. Les tests sont réalisés avec un noyau très récent (3.4.4) afin de bénéficier des dernières corrections. 
Ensuite il faut charger les outils BTRFS pour disposer, entre autres, de mkfs.btrfs. Sur Debian le paquet se nomme "btrfs-tools" sans autre complication et s'installe rapidement. 
Pour ce premier test j'ai créé deux "disques" LVM de 20G nommés : 
VOL_EXT4 et VOL_BTRFS. Le premier sera formaté classiquement en EXT4, le secon en BTRFS. 
La commande "mkfs.btrfs" assure le formatage et la labellisation, ici : 
date ; mkfs -t btrfs -L DISK_BTRFS /dev/mapper/TALE-VOL_BTRFS ; date 
vendredi 4 mai 2012, 19:55:30 (UTC+0200) 

WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL 
WARNING! - see http://btrfs.wiki.kernel.org before using 

fs created label DISK_BTRFS on /dev/mapper/TALE-VOL_BTRFS 
    nodesize 4096 leafsize 4096 sectorsize 4096 size 20.00GB 
Btrfs Btrfs v0.19 
vendredi 4 mai 2012, 19:55:30 (UTC+0200) 

Le résultat est quasi instantané ! 

En EXT4 : 
date; mkfs -t ext4 /dev/mapper/TALE-VOL_EXT4 ; date 
vendredi 4 mai 2012, 19:56:52 (UTC+0200) 
mke2fs 1.42.2 (9-Apr-2012) 
Filesystem label= 
OS type: Linux 
Block size=4096 (log=2) 
Fragment size=4096 (log=2) 
Stride=0 blocks, Stripe width=0 blocks 
1310720 inodes, 5242880 blocks 
262144 blocks (5.00%) reserved for the super user 
First data block=0 
Maximum filesystem blocks=4294967296 
160 block groups 
32768 blocks per group, 32768 fragments per group 
8192 inodes per group 
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000 
Allocating group tables: done                             
Writing inode tables: done                             
Creating journal (32768 blocks): done 
Writing superblocks and filesystem accounting information: done    
vendredi 4 mai 2012, 19:56:54 (UTC+0200) 

Deux secondes pour 20G, donc plus de trois minutes pour un disque de 2To. On monte ensuite les deux partitions et on vérifie : 
df | grep mnt 
/dev/mapper/TALE-VOL_EXT4    20907056    440692  19417788   3% /mnt/VOL_EXT4 
/dev/mapper/TALE-VOL_BTRFS   20971520       120  18845632   1% /mnt/VOL_BTRFS 
Tiens ETX4 consomme 3% ?

Tests "dd" en écriture, fichier de 8Go :  
Pour EXT4 wait 37 .. 75%    BO # 65000 .. 136000 (chiffres de "vmstat")  
256000+0 records in 
256000+0 records out 
8388608000 bytes (8,4 GB) copied, 63,0721 s, 133 MB/s

Pour BTRFS wait 29.. 55%          BO # 68000 .. 180000  
256000+0 records in 
256000+0 records out 
8388608000 bytes (8,4 GB) copied, 60,2699 s, 139 MB/s

Tests "dd" en écriture, fichier de 16Go : 

Pour EXT4 wait 37 .. 75% output # 65000 .. 136000 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 136,869 s, 123 MB/s 

Pour BTRFS wait 29.. 55% output # 68000 .. 190000 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 123,338 s, 136 MB/s 

La vitesse du BTRFS n'est que très peu supérieure mais les "wait_states" sont inférieurs (mesuré avec vmstat) mais reste plus constante pour les fichiers de 8G et 16G. 

Tests "dd" en lecture, fichier de 16Go : 

EXT4 : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 125,661 s, 134 MB/s 

BTRFS : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 119,848 s, 140 MB/s 

Léger avantage à BTRFS.

Aucune commande complexe n'a été utilisée ici, la seule différence est la pose du label de FS par "mkfs.btrf" qui simplifie un peu les commandes. 
Les tests précédents ont étés réalisés avec un noyau "xenifié", ci-dessous le même test sur la même version de noyau (3.3.4) en mode "normal" : 
Test "dd" en lecture fichier 16Go :

EXT4 : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 108,485 s, 155 MB/s 
BTRFS : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 99,3723 s, 169 MB/s 

Les résultats sont meilleurs laissant toujours un léger avantage à BTRFS. 
J'ai prévu de présenter plus loin quelques possibilités attrayantes et les outils qui permettent d'y arriver. C'est tout pour aujourd'hui ... à la prochaine.

BTRFS : après quelques mois

BTRFS : après quelques mois jpp

Après plusieurs mois d'usage BTRFS se comporte très bien. 
J'ai eu un plantage (corruption) tout à fait au début mais les outils de réparation du FS ont fonctionné correctement bien que m'ayant rappelé avant lancement qu'ils n'etaient que des versions "beta" encore incomplètes.

Depuis je suis passé à des versions de noyau très récentes (3.5 et 3.6 maintenant) et je n'ai plus souffert d'un seul ennui. Je pense que le support BTRFS a été amené à maturité dans les dernières versions de noyau et qu'il est parfaitement envisageable de l'utiliser. J'ai d'ailleurs transféré tous mes répertoires personnels sur une partition RAID (/dev/mdx) formatée en BTRFS.

Au vu des sauvegardes que j'effectue régulièrement je n'ai pas vraiment testé les "snapshots" de BTRFS. 
Note 2016 : pas d'ennuis avec les noyaux de la série 4.x.
Note 2024 : BTRFS est toujours là et fonctionne normalement

RAID1 BTRFS et EXT4

RAID1 BTRFS et EXT4 jpp
Pour ce deuxième test je me propose d'utiliser une paire de disques de 2To que je viens d'installer et qui ont été découpés de manière identique dans le but d'utiliser du RAID-1, j'aime bien le RAID 1 !
Les disques SDC et SDD sont découpés en trois partitions :
1 #400Go
2 #400Go
3 #1200Go déja utilisée par LVM
Sur les deux paires de partitions libres ( 1 et 2 ) j'ai installé du RAID-1 par les commandes suivantes :
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdc2 /dev/sdd2
Les premiers tests utiliserons EXT4 sur les deux devices MD0 et MD1, ces mêmes devices seront ensuite formatés en BTRFS. Un dernier essai sera par la suite réalisé en "cassant" le RAID-1 et en utilisant directement les possibilités de BTRFS de gestion RAID.
Pour m'affranchir un peu plus de l'influence de la mémoire j'utilise des fichiers un peu plus gros d'environ 40Go.
Après formatage d'une durée d'environ 5 secondes malgré la taille des partitions (400Go) le montage réussit :
df | grep mnt
/dev/md0                    418970516  6325372 391673684   2% /mnt/DISK1
/dev/md1                    418970516  6325372 391673684   2% /mnt/DISK2
 
Pour avoir une plus faible influence des caches mémoire j'ai utilisé les options "direct" et "fsync" de la commande "dd" :
dd if=/dev/zero of=/mnt/DISK1/test bs=32K count=1536000 conv=fsync oflag=direct
 
Tests "dd" écriture en EXT4
Partition 1 (la plus centrale)
Wait state #23%   BO # 55000 .. 73000
1536000+0 records in
1536000+0 records out
50331648000 bytes (50 GB) copied, 939,719 s, 53,6 MB/s
 
Partition 2 (plus vers l'extérieur du disque)
1536000+0 records in
1536000+0 records out
50331648000 bytes (50 GB) copied, 1025,07 s, 49,1 MB/s
 
Comme prévu les disques sont plus rapides sur la première partition que sur la deuxième et pendant le test aucune mémoire "cache" n'est utilisée.
 
Tests "dd" lecture en EXT4:
Partition 1
wait_state #23%  BI # 85000 .. 125000
1536000+0 records in
1536000+0 records out
50331648000 bytes (50 GB) copied, 418,11 s, 120 MB/s
Partition 2
Wait state #23%  BI # 100000 .. 118000
1536000+0 records in
1536000+0 records out
50331648000 bytes (50 GB) copied, 451,569 s, 111 MB/s
 
Là aussi la partition 2 est moins rapide que la première mais, vu la vitesse constatée, il semble que les lectures soient bien partagées sur les deux disques ce qui est un bon présage.
 
Après cette première salve de tests on va passer en BTRFS :
mkfs -t btrfs -L DISK1 /dev/md0
samedi 5 mai 2012, 17:23:48 (UTC+0200)
WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using
fs created label DISK1 on /dev/md0
nodesize 4096 leafsize 4096 sectorsize 4096 size 400.00GB
Btrfs Btrfs v0.19
samedi 5 mai 2012, 17:23:48 (UTC+0200)
 
mkfs -t btrfs -L DISK2 /dev/md1
samedi 5 mai 2012, 17:23:48 (UTC+0200)
WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using
fs created label DISK2 on /dev/md1
nodesize 4096 leafsize 4096 sectorsize 4096 size 400.00GB
Btrfs Btrfs v0.19
samedi 5 mai 2012, 17:23:48 (UTC+0200)
et on monte nos deux devices :
df | grep mnt
/dev/md0                    419429240       56 417303360   1% /mnt/DISK1
/dev/md1                    419429240      120 401574656   1% /mnt/DISK2
 
Tests "dd" écriture BTRFS
La syntaxe de "dd" est identique a celle adoptée pour EXT4.
Partition 1:
wait_state #19%   BO 55000 .. 70500
1536000+0 records in
1536000+0 records out
50331648000 bytes (50 GB) copied, 749,723 s, 67,1 MB/s
 
Partition 2:
1536000+0 records in
1536000+0 records out
50331648000 bytes (50 GB) copied, 761,014 s, 66,1 MB/s
 
La différence de vitesse est plus faible entre les deux partitions mais la vitesse d'écriture est largement supérieure à celle obtenue en EXT4 et là non plus aucune trace d'usage de mémoire cache.
 
Tests "dd" lecture BTRFS :
Partition 1
1536000+0 records in
1536000+0 records out
50331648000 bytes (50 GB) copied, 487,854 s, 103 MB/s
 
Partition 2
322696+0 records in
322696+0 records out
10574102528 bytes (11 GB) copied, 103,173 s, 102 MB/s
 
La faible différence de vitesse entre les deux partitions est confirmée mais la surprise est la "faiblesse" de la vitesse en lecture par rapport à EXT4.
Un petit tableau récapitulatif pour finir :
 

  Écriture Lecture
  P. 1 P. 2 P.1 P.2
EXT4 53,6 49,1 120,0 111,0
BTRFS 67,1 66,1 103,0 102,0
% BTRFS / EXT4 +20,12% +25,72% -16,50% -8,82%


La prochaine étape sera de "casser" le RAID de la partition 1 et d'utiliser BTRFS pour gérer le RAID-1.

RAID1 BTRFS et dev/md

RAID1 BTRFS et dev/md jpp

Ce dernier test doit permettre de mesurer toute la puissance et la souplesse de BTRFS car il va ici jouer deux rôles : 
- gestion du RAID 
- gestion du File system 
permettant ainsi de n'utiliser qu'un outil au lieu des deux habituels (Device Mapper ou LVM pour le RAID, Gestionnaire de FS tel EXT3, EXT4 ...). Pour améliorer la fiabilité (et la rapidité ?) les deux disques sont sur deux contrôleurs différents. On utilisera le parametre "odirect" de "dd" pour limiter l'influence de la mémoire. 
D'abord "casser" le RAID actuel, c'est super simple ... 

mdadm -S /dev/md0            # stopper le device 
mdadm --zero-superblock /dev/sde1    # effacer les traces 
mdadm --zero-superblock /dev/sdd1    # sur les deux disques 

Après cette petite opération il est de bon ton de redémarrer le système pour assurer une bonne reconnaissance des changements. effectués.
Sitôt dit, sitôt fait et on enchaîne sur la création de notre RAID1 BTRFS : 
mkfs.btrfs -m raid1 -d raid1 -L BTRFS /dev/sdc1 /dev/sdd1 
WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL 
WARNING! - see http://btrfs.wiki.kernel.org before using 
adding device /dev/sdd1 id 2 
fs created label BTRFS on /dev/sdc1 
    nodesize 4096 leafsize 4096 sectorsize 4096 size 800.00GB 
Btrfs Btrfs v0.19 
On monte ce nouveau FS : 
mount LABEL=BTRFS /mnt/DISK1omount LABEL=BTRFS /mnt/DISK1 
et on vérifie : 
df -k | grep mnt 
/dev/sdc1                   838860800      312 803151616   1% /mnt/DISK1 

Seul le premier disque est visible et le FS est bien noté 800GB. 
Un petit test "dd" en écriture : 
dd if=/dev/zero of=/mnt/DISK1/test bs=32K count=1536000 conv=fsync oflag=direct 
1536000+0 records in 
1536000+0 records out 
50331648000 bytes (50 GB) copied, 1001,96 s, 50,2 MB/s 

Pendant ce temps les deux disques sont actifs, chacun sur leur contrôleur : 
21:06:33 sdd   1577,00      0,00 100928,00     64,00      0,44      0,28      0,28     43,60 
21:06:33 sde   1578,00      0,00 100992,00     64,00      0,75      0,48      0,47     74,80 
Average: sdd   1577,00      0,00 100928,00     64,00      0,44      0,28      0,28     43,60 
Average: sde   1578,00      0,00 100992,00     64,00      0,75      0,48      0,47     74,80 

Pour corser un peu la comparaison je vais profiter de la partition "2" toujours en RAID-1 (Device Manager) pour la formater en BTRFS et comparer ainsi le RAID-1 BTRFS "pur" et le RAID-1 "DM" + BTRFS. La partition 2 étant un peu moins rapide du fait de sa position DM + BTRFS part avec un petit handicap (#5%). 
Les résultats bruts : 
RAID-1 BTRFS : 
1536000+0 records in 
1536000+0 records out 
50331648000 bytes (50 GB) copied, 966,6 s, 52,1 MB/s 
DM + BTRFS : 
1536000+0 records in 
1536000+0 records out 
50331648000 bytes (50 GB) copied, 993,912 s, 50,6 MB/s 
Au vu des chiffres on peut considérer qu'il y a égalité. 
Passons à la lecture et afin de vérifier si les deux disques sont bien utilisés on va tester deux configurations : 
DD avec l'option "idirect" 
DD sans l'option "idirect" 
RAID-1 BTRFS avec "idirect" : 
dd if=/mnt/DISK1/test of=/dev/null bs=32K conv=fsync iflag=direct 
1536000+0 enregistrements lus 
1536000+0 enregistrements écrits 
50331648000 octets (50 GB) copiés, 489,408 s, 103 MB/s 

Sans "idirect" : 
dd if=/mnt/DISK1/test of=/dev/null bs=32K conv=fsync 
dd: fsync a échoué pour « /dev/null »: Argument invalide 
1536000+0 enregistrements lus 
1536000+0 enregistrements écrits 
50331648000 octets (50 GB) copiés, 430,43 s, 117 MB/s 

DM + BTRFS avec "idirect" : 
dd if=/mnt/DISK2/test of=/dev/null bs=32K conv=fsync iflag=direct 
1536000+0 enregistrements lus 
1536000+0 enregistrements écrits 
50331648000 octets (50 GB) copiés, 508,961 s, 98,9 MB/s 

Sans idirect : 
dd if=/mnt/DISK2/test of=/dev/null bs=32K conv=fsync 
1536000+0 enregistrements lus 
1536000+0 enregistrements écrits 
50331648000 octets (50 GB) copiés, 380,004 s, 132 MB/s 

Avec l'utilisation de "idirect" les deux possibilités sont à peu près à égalité. Par contre sans ce flag le couple "DM" + BTRFS est très loin devant ... 
On refait le test en notant l'activité des différents disques sur une vingtaine de secondes : 
RAID1 BTRFS 
sar -pd 2 10 | egrep 'sdd|sde' | grep 'Average' 
Average: sde    309,50 213753,60      0,00    690,64      9,64     31,16      3,12     96,68 
Average: sdd      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00 

DM + BTRFS 
Average: sde    187,60 140957,60      0,00    751,37      5,77     30,60      3,80     71,28 
Average: sdd    163,10 109883,20      0,00    673,72      4,26     26,19      3,96     64,56 

On remarque tout de suite que BTRFS n'utilise qu'un disque au cours de ce test alors que DM en utilise deux ce qui explique probablement la meilleure vitesse obtenue. 
Remarque : lors d'un deuxième test BTRFS a utilisé l'autre disque il est donc probable que sur plusieurs IO simultanées il est capable de se servir des deux disques. 
On vérifie avec deux "dd" en parallèle : 
Average: sde    937,40 207295,20      0,00    221,14     28,18     29,98      1,06     99,60 
Average: sdd      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00 
Et bien non il se sert d'un seul disque ? Et avec deux fichiers différents que va-t-il se passer ? 
On copie d'abord une partie de notre fichier de 50G : 
RAID1 BTRFS 
dd if=test_UN of=test_DX bs=32K count=512000 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 376,779 s, 44,5 MB/s 
Pendant la copie un seul disque est utilisé en lecture et bien sûr les deux en écriture. 
La vitesse est sensiblement moindre que lors des tests d'écriture seule 44,5 contre 52,1. 

DM + BTRFS 
dd if=test_UN of=test_DX bs=32K count=512000 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 339,194 s, 49,5 MB/s 
Presque la vitesse en écriture seule 49,5 contre 50,6 ! Pendant la copie les deux disques sont utilisés en lecture et en écriture. 
Le test avec deux fichiers 
RAID1 BTRFS : 
Un seul des deux disques est utilisé et le contrôleur est à 100%, le temps de WAIT est élevé (30 à 45%) le CPU utilisé est de l'ordre de 10%  : 
Average: sde    202,70 204479,60      0,00   1008,78     23,49    116,10      4,93    100,00 
Average: sdd      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00 
Fichier 1 ; 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 319,734 s, 52,5 MB/s 
Fichier 2 : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 260,957 s, 64,3 MB/s 
Soit un total d'environ 117Mo/seconde parfaitement égal au test précédent. 
DM BTFRS 
Les deux disques sont utilisés et les deux contrôleurs à 100%, le temps de WAIT est très élevé (40 à 60%), le cpu utilisé varie de 14 à 28% : 
Average: sde    227,85 218987,20      0,00    961,10     13,08     57,72      4,39    100,00 
Average: sdd    210,60 215552,00      0,00   1023,51     11,94     56,74      4,74     99,92 
Fichier 1 : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 99,329 s, 169 MB/s 
Fichier 2 : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 155,029 s, 108 MB/s 

Soit un maximum de plus de 270 Mo/seconde ! J'ai refait le test en notant les vitesses moyennes de chaque disque (je rappelle que si les disques sont identiques ce n'est pas le cas des contrôleurs) : 
Average: sde    214,20 219289,60      0,00   1023,76     11,50     53,70      4,66     99,78 
Average: sdd    191,00 165808,40      0,00    868,11      9,27     48,44      5,02     95,92 
Un des disques va nettement plus vite ! Lors de ce second essai j'ai obtenu 150 et 112Mo/seconde soit environ 260Mo/seconde, ce qui est en phase avec le premier essai. 

En bref DM + BTRFS ça a l'air de déménager. Ce petit problème réglé je vais remettre la partition 1 en mode "DM". 
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1 
On reboote par précaution ... et on lance 
mkfs -t btrfs -L BTRFS_1 /dev/md0 
WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL 
WARNING! - see http://btrfs.wiki.kernel.org before using 

fs created label BTRFS_1 on /dev/md0 
    nodesize 4096 leafsize 4096 sectorsize 4096 size 399.87GB 
Btrfs Btrfs v0.19 
Et la synchronisation du raid commence : 
md0 : active raid1 sdd1[0] sde1[1] 
      419299136 blocks super 1.2 [2/2] [UU] 
      [>....................]  resync =  0.1% (515264/419299136) finish=67.7min speed=103052K/sec 
Ces nouveaux disques de 2To semblent nettement plus rapides que les "anciens" disques de 750 Go (2 and déjà) déja présents dans la machine. 
Ne pas oublier ensuite de positionner ce nouveau "raid" dans le fichier "/etc/..../mdadm.conf", 
mdadm --examine --scan 
est votre ami. 
Il est toutefois à noter que j'ai eu quelques plantages système, crash complets sans possibilité de reprendre la main ou "ooops" déclenchant une violation de protection mémoire de "dd" et un crash lors de l'utilisation de "cp -dpR" pour recopier une arborescence complète.

Ces plantages ont eu lieu avec des noyaux < 3.3. Avec un noyau 3.3.5 les plantages ont été moins nombreux, j'ai depuis refait quelques tests avec un noyau 3.4-rc7 pendant lesquels je n'ai noté aucun ennui, les "cp -dpR" ont parfaitement fonctionné malgré les plus de 80Go à recopier (#500 000 répertoires et plus de 2 000 000 fichiers). 
J'ai mis pour le moment mon répertoire personnel (que je sauvegarde souvent) sur une partition en RAID1 DM+BTRFS. Les résultats sont pour le moment excellents, l'affichage de photos me semble beaucoup plus rapide qu'avant malgré les 15 à 19Mo de chaque photo.

Un autre test fait sur mon répertoire HOME (maintenant en BTRFS) recopié pour sauvegarde dans une baie externe : 
Environ 16 Go avec  #5700 répertoires et #57000 fichiers (Pas mal de fichiers photo RAW et JPG de 10 à 15Mo chacun) en un peu moins de 4 minutes soit une vitesse moyenne de # 66Mo/seconde comprenant donc lecture sur BTRFS et écriture sur une partition LVM de la baie. 
Ainsi la copie de sauvegarde devient (presque) un plaisir.

Passer en RAID 1

Passer en RAID 1 jpp

Note : le système est un Debian "Jessie" mais la plupart des remarques peuvent s'appliquer à d'autres distributions. 
Sur la machine qui me sert de frontal Internet j'ai eu de multiples alertes "Smart" me signalant des dégradations sur des "seek..." et quelques autres anomalies. Ces disques sont assez anciens et très sollicités car la machine fonctionne 24/24 et héberge plusieurs services : mail, DNS, DHCP, serveur Apache, agent centralisateur de collectd, une base Mysql ainsi que Suricata et Snorby. Les deux disques de cette machine (500Go) deviennent par ailleurs un peu petits. Ils sont montés en LVM, chaque volume LVM est mirroré, mais c'est un peu lourd à gérer. Le système est sur un petit SSD que je sauvegarde régulièrement. 
J'ai donc décidé de changer les disques et de mettre deux disques en RAID1 sur lesquels je mettrais trois partitions, dont deux avec LVM, plus un swap. Il ne faut pas oublier de charger le paquet "mdadm" pour disposer des outils adéquats.  
Comme le contrôleur supporte 4 disques j'ai pu monter un des futurs disques en plus afin de : 
- Le partitionner :

  1. une partition pour le système,
  2. une pour les disques des machines virtuelles,
  3. une pour le stockage des données
  4. une de swap.

Ensuite :

  • Créer le Raid1 avec une seule patte.
  • Créer les PV pour LVM sur les partitions 2 et 3
  • Charger les données, du système et copier les images de machines virtuelles.

Pour ceci il est nécessaire de stopper le maximum de services afin de ne pas se compliquer la tâche. 
Ne pas oublier de mettre les partitions en type "Linux RAID" dans fdisk (type "fd") : 
Command (m for help): t 
Partition number (1-4, default 4): 1 
Partition type (type L to list all types): 21 
Changed type of partition 'Linux RAID' to 'Linux RAID'. 
... idem pour les autres partitions. 
On arrive alors à ceci dans fdisk :

Disk /dev/sdc: 931,5 GiB, 1000204886016 bytes, 1953525168 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 4096 bytes 
I/O size (minimum/optimal): 4096 bytes / 4096 bytes 
Disklabel type: gpt 
Disk identifier: 48D952DA-AF21-46D3-BB36-73DFFF32A96A 
Device          Start        End   Sectors  Size Type 
/dev/sdd1        2048  536872959 536870912  256G Linux RAID 
/dev/sdd2   536872960 1073743871 536870912  256G Linux RAID 
/dev/sdd3  1073743872 1912604671 838860800  400G Linux RAID 
/dev/sdd4  1912604672 1953525134  40920463 19,5G Linux RAID

Ensuite il faut créer nos "RAID" en mettant à chacun un disque physique et un disque "missing" : 
mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdd1 
.... 
Puis enregistrer la config de nos RAID pour qu'ils soient reconnus au boot avec : 
mdadm --examine --scan >>/etc/mdadm/mdadm.conf 
Vous pouvez ensuite modifier dans ce fichier l'adresse mail de destination des messages. 
Il est prudent de redémarrer la machine pour vérifier que nos RAID sont bien accrochés et se retrouvent après redémarrage.

On arrive alors a "voir" l'état de nos RAID en exécutant :  
cat /proc/mdstat 
Personalities : [raid1]  
md3 : active raid1 sdc2[1] 
      268304384 blocks super 1.2 [2/1] [_U] 
      bitmap: 1/2 pages [4KB], 65536KB chunk

md4 : active raid1 sdc3[1] 
      419299328 blocks super 1.2 [2/1] [_U] 
      bitmap: 1/4 pages [4KB], 65536KB chunk

md5 : active raid1 sdc4[1] 
      20443840 blocks super 1.2 [2/1] [_U] 
       
md2 : active raid1 sdc1[1] 
      268304384 blocks super 1.2 [2/1] [_U] 
      bitmap: 2/2 pages [8KB], 65536KB chunk

unused devices: <none> 
------------------------------------------------------- 
Le système signale par ailleurs dans les logs lors du démarrage que les RAID ne sont pas en bon état : 
Nov 25 13:24:49 xxxxxx systemd-fsck[408]: /dev/md2 : propre, 17129/16769024 fichiers, 10491322/67076096 blocs 
Nov 25 13:24:49 xxxxxx systemd-fsck[516]: BOOT : propre, 326/1222992 fichiers, 139566/4882432 blocs 
Nov 25 13:24:49 xxxxxx mdadm-raid[196]: Assembling MD array md2...done (degraded [1/2]).

et mdadm-raid vous envoie régulièrement des mails tels que : 
This is an automatically generated mail message from mdadm 
running on xxxxxx.xxx.xxx

A DegradedArray event had been detected on md device /dev/md/4.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid1] 
md4 : active raid1 sdc3[1] 
      419299328 blocks super 1.2 [2/1] [_U] 
      bitmap: 1/4 pages [4KB], 65536KB chunk

md5 : active raid1 sdc4[1] 
      20443840 blocks super 1.2 [2/1] [_U] 
....... 
------------------------------------------------------- 
On peut alors : 
Formater la première partition en ext4 
Recopier les répertoires système du vieux disque, /var, quelques morceaux de /usr ... sur la première partition, "cp -dpRx" est votre ami. 
Créer le PV LVM sur la deuxième partition puis créer les volumes logiques destinés à mes machines virtuelles (je ne le fais pas à la main mais avec "kvpm" que j'aime bien). 
Stopper les machines virtuelles et copier leurs images disque, bêtement avec : 
"dd if=ancien of=nouveau bs=65536" et cela marche très bien. 
J'ai ensuite modifié le fichier /etc/fstab" pour monter les "nouvelles" partitions à la place des "anciennes", les anciennes sont toujours là (au cas ou ?). 
Modifié les scripts de lancement des MV pour utiliser les nouveaux volumes et redémarré. 
Super, tout se passe bien, le système est OK, les MV ont bien démarré et leurs services sont accessibles. Je vais pouvoir démonter les anciens disques.  
Je stoppe encore la machine, démonte les anciens disques et je les stocke dans un coin tranquille (encore au cas ou) et monte le nouveau disque encore vierge.  
Il fait alors recommencer le partitionnement de ce nouveau disque, sans oublier de mettre le type de partition à "Linux RAID". 
Faire gaffe au nom des disques, car le démontage des anciens disques décale tout. On arrive presque à la fin on va, enfin, créer un vrai RAID1 avec deux disques : 
mdadm --manage /dev/md2 --add /dev/sdb1

cat /proc/mdstat 
Personalities : [raid1]  
md3 : active raid1 sdc2[1] 
      268304384 blocks super 1.2 [2/1] [_U] 
      bitmap: 1/2 pages [4KB], 65536KB chunk

md4 : active raid1 sdc3[1] 
      419299328 blocks super 1.2 [2/1] [_U] 
      bitmap: 1/4 pages [4KB], 65536KB chunk

md5 : active raid1 sdc4[1] 
      20443840 blocks super 1.2 [2/1] [_U] 
       
md2 : active raid1 sdb1[2] sdc1[1] 
      268304384 blocks super 1.2 [2/1] [_U] 
      [>....................]  recovery =  0.2% (781056/268304384) finish=28.5min speed=156211K/sec 
      bitmap: 2/2 pages [8KB], 65536KB chunk

La synchronisation de la première partie du RAID /dev/md2 est commencée et prévue pour un peu moins de 30 minutes, ne pas être pressé et éviter le café car il y a d'autres RAID à compléter. 
La vitesse de construction varie un peu mais reste supérieure à 100000K/sec mais la première partition fait 256G, la plus grosse 400G ce qui va durer une éternité. 
La première partition contient beaucoup de fichiers "actifs", par exemple tous les logs, la base de données mysql .... cela devrait augmenter le temps de construction. Mais, un peu plus tard : : 
md2 : active raid1 sdb1[2] sdc1[1] 
      268304384 blocks super 1.2 [2/1] [_U] 
      [================>....]  recovery = 84.4% (226534144/268304384) finish=6.7min speed=103609K/sec 
      bitmap: 2/2 pages [8KB], 65536KB chunk 
Ca s'approche de la fin .... toujours à un peu plus de 100MO/seconde. Au passage "iotop" ne voit rien et affiche des chiffres "ridicules". 
Nov 25 19:16:52 xxxxxx kernel: [  939.531841] md: recovery of RAID array md2 
Nov 25 19:59:28 xxxxxx kernel: [ 3493.885198] md: md2: recovery done. 
43 minutes environ au lieu des #30 annoncées. 
  
Pour la partition suivante il y a deux disques de machines virtuelles, je ne vais pas les stopper avant de commencer la construction du RAID pour environ 30 minutes annoncées. 
Nov 25 20:34:04 xxxxxx kernel: [ 5569.372170] md: recovery of RAID array md3 
Nov 25 21:24:56 xxxxxx kernel: [ 8618.957262] md: md3: recovery done. 
Soit environ 50 minutes. 
J'aurais mieux fait de stopper les MV car l'une d'elle a eu un problème lors du redémarrage (fsck manuel obligatoire).

Passons à la partition de 400G. 
mdadm --manage /dev/md4 --add /dev/sdb3 
mdadm: added /dev/sdb3 
date 
mercredi 25 novembre 2015, 21:28:55 (UTC+0100) 
Et quelques instants plus tard : 
cat /proc/mdstat 
Personalities : [raid1]  
md4 : active raid1 sdb3[2] sdc3[1] 
      419299328 blocks super 1.2 [2/1] [_U] 
      [=>...................]  recovery =  6.5% (27293696/419299328) finish=95.4min speed=68420K/sec 
      bitmap: 0/4 pages [0KB], 65536KB chunk 
La vitesse n'est "que" de 68Mo/seconde ? On doit approcher le milieu du disque ??? 
Beaucoup plus tard ... : 
cat /proc/mdstat 
Personalities : [raid1]  
md4 : active raid1 sdb3[2] sdc3[1] 
      419299328 blocks super 1.2 [2/1] [_U] 
      [=======>.............]  recovery = 36.8% (154667968/419299328) finish=70.2min speed=62746K/sec 
      bitmap: 0/4 pages [0KB], 65536KB chunk 
date 
mercredi 25 novembre 2015, 22:05:02 (UTC+0100) 
En 37 minutes le temps restant n'a que diminué de 25 minutes .... que dire du résidu de 70 minutes ? Ensuite en 20 minutes le temps restant a diminué de 15 minutes. 
A 22:40 ( durée 72 minutes) il reste encore 36 minutes .... 
cat /proc/mdstat ; date 
Personalities : [raid1]  
md4 : active raid1 sdb3[2] sdc3[1] 
      419299328 blocks super 1.2 [2/1] [_U] 
      [=================>...]  recovery = 89.9% (377065408/419299328) finish=13.5min speed=52082K/sec 
      bitmap: 0/4 pages [0KB], 65536KB chunk 
mercredi 25 novembre 2015, 23:09:29 (UTC+0100) 
Les 100 minutes sont atteintes il n'en reste plus que 13,5 mais la vitesse est tombée à 52MO/seconde. Pour finir : 
Nov 25 21:28:53 xxxxxx kernel: [ 8856.327974] md: recovery of RAID array md4 
Nov 25 23:24:41 xxxxxx kernel: [15800.532184] md: md4: recovery done. 
1h56 minutes soit 116 minutes, heureusement que je n'ai pas utilisé des disques de 3To !

La dernière partition (futur SWAP) ne fait que 19G, cela devrait aller vite : 
md5 : active raid1 sdb4[2] sdc4[1] 
      20443840 blocks super 1.2 [2/1] [_U] 
      [>....................]  recovery =  1.5% (311040/20443840) finish=9.7min speed=34560K/sec 
Par contre même pas 35MO/seconde ! Cette partie du disque est vraiment moins performante, mais après quelques minutes on monte à environ 45Mo/seconde ce qui est déjà un peu mieux. 
Enfin, c'est fini !  
La machine est sauvée et n'aura peut-être pas d'incident disques avant quelques années ... je croise les doigts. 

 

SSD et machines virtuelles

SSD et machines virtuelles jpp

Ayant eu l'occasion de me procurer deux SSD de 512Go j'ai rapidement décidé de les utiliser pour fournir l'espace disque à quelques machines virtuelles. 

Installation précédente : 
- Deux disques Hitachi Deskstar de 3To montés en miroir (DMRAID) avec deux Volume Group LVM.

Nouvelle installation : 
- Deux disques Samsung SSD 850 PRO 512GB montés en miroir (DMRAID) avec deux VG LVM.

Les deux nouveaux disques sont utilisés comme support d'un Volume Group LVM dans lequel j'ai pu "tailler" l'espace nécessaire à quelques machine virtuelles et d'un autre dédié à une base Mysql de quelques Go utilisées sur le système hôte et il y reste encore un peu de place. 
 La différence est très sensible sur les temps de réponse de la base Mysql : de gros "select count(*) from ..." sont passés de plus d'environ deux minutes à une trentaine de secondes, soit approximativement une performance quatre fois meilleure, comme mesuré dans l'article indiqué ci-dessous. 
 Pour les machines virtuelles la différence est également importante, le serveur Web, sur lequel sont installées ces pages assure un temps de réponse bien meilleur et les statistiques apparaissent bien plus rapidement, décidément Mysql aime les SSD et le montre bien. (Voir article Mysql et SSD). Quand à l'interface d'administration de Drupal il est devenu agréable à utiliser, pratiquement plus d'attente entre les pages. 
Une des MV est un serveur de mail Zimbra dont l'interface d'administration fournit des statistiques diverses dont une sur l'usage CPU. Une des statistiques m'a particulièrement intéressé, celle des IOWait qui est très significative.  
Statistique CPU/IOWAIT

On voit bien la baisse des Cpu_iowait lors du redémarrage de la machine. 

Le ressenti de l'interface Webmail est meilleur la réponse plus franche et plus rapide. 
En bref : les SSD c'est le pied.

Mysql : SSD / HD

Mysql : SSD / HD jpp

Un petit graphe des IO pour les deux machines : 
Graphique IO sur les deux machines lors du comptageSSD

Encore un test SSD/HDD ? J'ai récemment installé une base volumineuse sur une machine munie de SSD et j'ai constaté que les temps de réponse étaient excellents. Afin de quantifier le phénomène j'ai installé la même base sur deux machines différentes (#90 millions de rangs dans la table principale) :

Machine 1 : 
Core I7 6700 à 3.4 Mhz 
RAM : 16Go 
Base sur une partition dédiée d'un ensemble Raid1 sur HDD classique. 
Mysql 5.7.22 Inno_buffers en mémoire classique 
Machine 2 : 
Core I5 7500 à 3.4 Mhz 
Raml : 16Go 
Mysql 5.7.22 Inno_buffers en mémoire "huge pages" 
Base sur une partition dédiée d'un ensemble Raid1 sur SSD. 
Les deux machines sont donc à peu près équivalentes en vitesse au point de vue des CPU puisque Mysql n'utilise qu'un CPU par requête et que le paramétrage de Mysql est identique sur les deux systèmes. Seule différence la machine 2 utilise des "huge pages" pour les buffers InnoDB.

Le premier test consiste à :

  • Récupérer dans une table temporaire des rangs présents sur une autre machine par l'intermédiaire d'une table "federated".
  • Insérer ces rangs dans une table permanente.

Test 1. 
Machine 1 : 
Récupérer 206020 rangs      11.48 sec 
Insérer dans table "réelle"    69.70 sec 
Machine 2 : 
Récupérer 212290 rangs       5,42 sec 
Insérer dans table "réelle"    11,92 sec

Test 2. 
Machine 1 : 
Récupérer 2495 rangs           4,76 sec 
Insérer dans table "réelle"     1,87 sec 
Machine 2 : 
Récupérer 2482 rangs           0,32 sec 
Insérer dans table "réelle"     0,12 sec

Test 3. 
Machine 1 : 
Récupérer 2495 rangs           9,66 sec 
Insérer dans table "réelle"     57,04 sec 
Machine 2 : 
Récupérer 2482 rangs           2,22 sec 
Insérer dans table "réelle"     7.85 sec

Après quelques autres tests le tableau récapitulatif : 

Au final la base sur SSD effectue les opérations presque 5,7 fois plus rapidement.

Tableau à partir des mêmes données mais en rangs traités par seconde : 
 
Pour l'insertion le SSD semble moins "bon" mais cette phase comprends la lecture sur la machine origine et le transfert par le réseau qui sont probablement égaux pour les deux machines. 

Deuxième test : compter les rangs de la plus grosse table. 
Pour ce test :

  1. On redémarre Mysql pour bien vider les caches
  2. On exécute deux comptages successifs (# 90 millions de rangs).

Machine 1 : 
Premier comptage : 48,36 sec 
Comptage suivant : 22,65 sec 
Machine 2 : 
Premier comptage : 22,07 sec 
Comptage suivant : 19,44 sec

Même test le lendemain après ajout de #133000 rangs pour un total de 91176892 
Machine 1 : 
Premier comptage : 52,24 sec 
Comptage suivant : 22,61 sec 
Machine 2 : 
Premier comptage : 21,91 sec 
Comptage suivant : 19,59 sec

La différence est moins importante mais le SSD gagne quand même par plus de 2 à 1 sur le comptage "brut". On constate quand même la bonne efficacité des caches. 
iotop montre de la lecture a #30 Mo/sec pour les HDD et > 60Mo/sec pour les SSD. 
Le deuxième comptage est visiblement effectué sur les caches (peu ou pas d'IO visibles), la différence d'environ 10% est très probablement due à l'usage des "huge pages" pour le cache InnoDB de la machine 2 (large-pages pour Mysql). 
Un petit graphe des IO pour les deux machines : 
Graphique IO sur les deux machines lors du comptage 
Graphique IO sur les deux machines lors du comptage 
Petite bizarrerie au démarrage pour le SSD qui met #7 secondes pour arriver à son plein régime ? 
La même remarque s'applique à plusieurs tests. 
On peut voir par ailleurs que les temps de comptage sur la machine SSD sont très peu différents entre le premier comptage (avec accès disque) et le suivant réalisé immédiatement (ne montrant pas d'IO), les disques SSD ne semblent quasiment pas ralentir le traitement (#10% de différence seulement) par rapport au traitement depuis le cache.

Troisième test : créer un nouvel index. 
L'index est composé de trois champs. 
Machine 1 : 23 min 42,63 sec 
Machine 2 :  5 min 29,11 sec 
Le rapport de durée est d'environ 4,3. 
Pendant l'exécution j'ai vu plus de 240Mo/seconde en lecture sur les SSD contre un peu plus de 60Mo/seconde pour les HDD.

Mysql : SSD or not SSD

Mysql : SSD or not SSD jpp

Afin de mesurer un peu l'influence des disques sur une base Mysql j'ai effectué quelques petits tests par rapport à une base de référence installée sur des disques « classiques » 7200 tours. 
Les test réalisés :

  1.  Sur la machine d'origine (Core I5 à 3.4GHz, disques « classiques »), Mysql 5.6.30
  2.  Sur une autre machine (Corei3 à 3.5GHz, tout SSD) le test est réalisé avec une installation « standard » de Mysql (5.6.30). Donc tout sur le disque système (/var/lib/mysql et /var/log/mysql)
  3.  Toujours sur la machine SSD (5.6.30) avec une installation un peu plus optimisée :
    •      Logiciel sur le SSD système
    •      Données sur un SSD « DATA »    (/var/lib/mysql)
    •      Logs sur un autre SSD « LOG »   (/var/log/mysql + tmpdir)
  4. Le dernier test est réalisé sur la configuration « optimisée » avec la version 5.7.16

La base n'est pas énorme et comporte deux tables principales de # 10 millions et #100000 rangs et "tient" dans # 4Go.

Les résultats sont assez parlants, le passage sur SSD apporte une très nette amélioration de performance et pourtant le SSD supportant le système est un "vieux" modèle qui n'est pas au niveau des derniers modèles. 
Voir un autre test sur le même sujet.

Résultats comparés (Référence en secondes, les autres en % d'amélioration)
N° TEST 5.6.30 secondes (REF) 5.6.30 SSD % Gain sur REF 5.6.30 Opt. % Gain sur REF 5.7.16 Opt. % Gain sur REF
TEST A 1,00 0,00% 0,00% 0,00%
TEST B 3,09 38,51% 80,91% 82,85%
TEST C 1,45 61,38% 74,48% 74,48%
TEST D 0,93 52,69% 80,65% 86,02%
TEST E 5,96 5,70% -0,67% 5,54%
TEST F 41,30 21,57% 57,97% 65,86%
TEST G 13,68 74,12% 89,40% 94,88%
TEST H 26,04 88,86% 92,47% 92,70%
TOTAL 93,45 48,26% 69,06% 73,93%

Et en image cela donne :

 

Dernier test : comptage sur une "grosse" table :

Machine SSD : 
+-----------+ 
| count(*)  | 
+-----------+ 
| 134071332 | 
+-----------+ 
1 row in set (50,52 sec)

Machine HDD : 
+-----------+ 
| count(*)  | 
+-----------+ 
| 134072138 | 
+-----------+ 
1 row in set (4 min 9,46 sec)

Environ 5/1 en faveur du SSD.

Histoires de machines

Histoires de machines jpp

Ce titre regroupe quelques articles consacrés plus au hardware ou à une installation de nouveaux matériels et logiciels. 
Certains de ces articles décrivent des machines d'un autre age, 2010 et même avant ... mais je les garde pour mieux montrer l'évolution des matériels.

Auxiliaires utiles

Auxiliaires utiles jpp

Ce chapitre est dédié à quelques outils et périphériques utiles pour nos belles petites machines.

Baie 4 disques ESata DATATALE

Baie 4 disques ESata DATATALE jpp

Baie 4 disques ESata DATATALE RCM4QJ

Ayant eu besoin de sauvegarder des documents, des films, des photos, tous objets très volumineux j'ai cherché un système externe de très grande capacité. 
Note 2022 : cette unité fonctionne toujours parfaitement, évidement avec Linux ..., je m'en sert une fois par mois pour faire des sauvegardes. 
Un peu par hasard je suis tombé sur une firme Taïwanaise qui commercialisait un système qui m'a semblé intéressant. La boite est munie de connexions variées (USB2, Firewire 400 et 800 et ESata), c'est bien entendu la connexion ESata qui m'a le plus intéressé car elle est en principe un gage de vitesse. 
Ce boîtier permet en outre d'utiliser différents types de RAID avec ou sans disque de secours et supporte tous les types de disques, même les derniers disques de 3Téra. On peut donc créer un RAID5 de 9 Téras avec 4 disques de 3To. N'ayant que des disques de 2To je serais limité à 6To en RAID5 ou 4To en RAID10. 
Le boîtier modèle RCM4QJ (la version USB/Firewire 400/800, ESata) peut être trouvé chez quelques revendeurs européens ou sur Amazon pour environ 250 Euros et parfois moins ...Lien vers le site du constructeur. 
Ayant réussi à m'en procurer une unité depuis Taïwan je vous présente les premiers tests réalisés. 
Attention à la "qualité" des disques, certains disques (entre autre les disques "green") ne sont pas adaptés à un usage "RAID", voir la mise en garde du constructeur (lien cassé!) .  
J'ai ici utilisé des disques de 2To de marque Hitachi, un peu plus chers que les disques "verts", mais qui fonctionnent sans problème. 
J'ai aussi eu au début quelques problèmes de reconnaissance de l'unité lors du boot et des messages : 
"link is slow to respond, please be patient" peuvent apparaître. 
En effet l'unité est un peu "paresseuse" et le contrôleur "Jmicron" de ma carte mère était configuré en mode "AHCI", en principe conseillé. J'ai depuis changé de carte mère et de processeur et, bien sûr, de version du noyau (actuellement 4.7.1) et cela fonctionne toujours (Août 2016).

Avec cette configuration AHCI la reconnaissance était un peu aléatoire sans modification de quelques constantes du noyau (ATA_WAIT_AFTER_RESET, ATA_TMOUT_FF_WAIT, ATA_TMOUT_FF_WAIT_LONG) avec le contrôleur ESATA de ma carte mère (puce JMicron) pour le détail des manipulations de modification sur le noyau (c'est un bien grand mot) voir l'article spécifique. 

Autre particularité "gparted" ne reconnaît pas correctement le format des partitions et les considère toujours comme "unallocated" bien que celles-ci se montent sans difficulté ! Après usage il est préférable de n'utiliser qu'une partition et de la gérer avec LVM car 6Téra (RAID5) en une seule partition c'est dur à gérer ! Voir le "HOW TO" pour l'utilisation de LVM.  
J'ai préparé, à part, un document sur l'aspect "physique" de l'engin avec quelques belles images. L'engin est certifié compatible Windows et Mac (une version avec interface Thunderbolt et USB3 est en préparation) je l'ai d'abord monté (en USB2) sur un portable sous Windows afin de pouvoir utiliser le logiciel fourni, versions Windows et Mac. Logiciel installé sans problèmes et j'ai configuré les 4 disques présents (4 * 2 Téra) en RAID 10 ce qui doit donner outre 4 Téra, vitesse (disques en série) et securité (2 groupes en miroir). J'espère pouvoir le tester avec un MAC bientôt. Dès la fin de cette opération j'ai tenté le montage en ESata sur une machine Linux ... et l'opération s'est déroulée sans problèmes, Linux a reconnu la baie dès la mise sous tension et a bien reconnu le zinzin -Kernel Debian 3.1.5) : 
[66721.241068] scsi 6:0:0:0: Direct-Access     ATA      SMART   RAID 10  0958 PQ: 0 ANSI: 5 
[66721.241527] sd 6:0:0:0: Attached scsi generic sg4 type 0 
[66721.241552] sd 6:0:0:0: [sde] 7813857280 512-byte logical blocks: (4.00 TB/3.63 TiB) 
[66721.241774] sd 6:0:0:0: [sde] Write Protect is off 
[66721.241786] sd 6:0:0:0: [sde] Mode Sense: 00 3a 00 00 
[66721.241867] sd 6:0:0:0: [sde] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA 

Au vu de la taille de l'unité présentée "fdisk" s'est un peu affolé : 
fdisk /dev/sdg 
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel 
Building a new DOS disklabel with disk identifier 0x7945aefe. 
Changes will remain in memory only, until you decide to write them. 
After that, of course, the previous content won't be recoverable. 
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 
WARNING: The size of this disk is 4.0 TB (4000694927360 bytes). 
DOS partition table format can not be used on drives for volumes 
larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID 
partition table format (GPT). 
Il vaut donc mieux utiliser "gparted" pour initialiser le disque en "GPT" et le formater en deux partitions EXT3. Après cette petite manip qui laisse le temps d'aller boire un café : 
 
 

 

on obtient ensuite le résultat suivant : 

 

 

 

 

 

 

 

Le montage des deux partitions est ensuite possible et les tests peuvent commencer, d'abord des tests simples pour se donner une idée rapide. 
Un premier test en écriture avec "dd" : 

cd /DATATALE_1 
dd if=/dev/zero of=./toto bs=4096 count=4096000 
4096000+0 enregistrements lus 
4096000+0 enregistrements écrits 
16777216000 octets (17 GB) copiés, 295,005 s, 56,9 MB/s 

Un peu moins de 60Mo/seconde c'est déjà pas mal pour un disque externe. 
Deuxième petit test, plus réel, recopier un ensemble de répertoires comprenant environ 2500 photos réparties dans 28 sous-répertoires pour un total de 21,6Go : la copie est effectuée en un peu plus de 6 minutes soit environ 57Mo/seconde. 

Remarque : 
Après ces tests l'unité ne chauffe pas et reste parfaitement silencieuse, le boîtier en aluminium semble parfaitement remplir son rôle. Bientôt une analyse plus poussée de ce bel engin. 

Voir les tests plus complets sur EXT3 en RAID10.  Et sur EXT4 en RAID5 

Les tests en Ext4 sont en cours .... voici les premiers résultats sur une partition unique de 4To 
Tests EXT4 en écriture : 
dd if=/dev/zero of=./toto bs=4096 count=4096000 
4096000+0 records in 
4096000+0 records out 
16777216000 bytes (17 GB) copied, 232,184 s, 72,3 MB/s 

Même test avec un transfert par blocs de 16K au lieu de 4K : 
dd if=/dev/zero of=./toto bs=16535 count=1024000 
1024000+0 records in 
1024000+0 records out 
16931840000 bytes (17 GB) copied, 218,376 s, 77,5 MB/s 

On approche les 80Mo/seconde ... 

Test rapide EXT4 en lecture : 
dd if=./toto of=/dev/null 
33070000+0 records in 
33070000+0 records out 
16931840000 bytes (17 GB) copied, 162,256 s, 104 MB/s 

Les 100Mo/seconde sont dépassés ! 

Copie de 15Go dans 33 répertoires et #1800 fichiers durée 8 minutes soit #32Mo/seconde. 

Pour finir une vue de cette petite bête installée sur un boîtier moyenne tour en aluminium lui aussi. 
 

Le boîtier vide est très léger, aluminium oblige et de dimensions réduites (l = 14,H = 21,5, P = 21). 
L'aspect aluminium est très "propre". 
Tout peut être commandé à l'aide des 4 boutons et de l'écran d'affichage. 
 

ESata : disque amovible

ESata : disque amovible jpp

La sécurité des données. 
Le meilleur moyen pour assurer la pérennité de ses données est d'en assurer une sauvegarde périodique. 
Nos machines modernes ont de gros disques où nous stockons des quantités de données qui peuvent vite augmenter.. 
Les photos font aujourd'hui chacune largement plus de 10Mo pour un reflex de qualité; ou même un téléphone moderne et si vous conservez comme moi les images "RAW" on dépasse les 35Mo par photo. Les films de caméra sont encore plus volumineux et le tout finit par représenter des quantités de données conséquentes auxquelles on tient particulièrement, comment accepter de perdre des documents auxquels on tient particulièrement . 
La valeur (au moins sentimentale) de des données est importante et je ne me vois pas annoncer : tiens ! J'ai perdu les photos et les films du petit dernier ... 
La sauvegarde est donc le seul moyen de s'affranchir (au moins en limitant les dégâts à la perte d'une courte période) est donc la duplication sur un autre support. 
Mais les disques externes USB ne sont pas forcément très fiables et ne sont pas donnés bien que les prix aient là aussi bien baissé. Pour répondre à ce besoin les entreprises utilisent des sauvegardes sur bande magnétique, une bande moderne peut dépasser le Téra-Octet. Mais pour un amateur les lecteurs de bande sont chers (plus chers parfois que la machine que vous utilisez) , encombrants, bruyants et les bandes de grande capacité sont fort onéreuses, un petit parc de bandes est un investissement.

J'ai découvert sur le site d'un revendeur bien connu des petits boîtiers qui permettent d'enficher un disque SATA standard et de le connecter ainsi en USB ou en ESata sur une machine. 
Ce type de boîtier se trouve pour 20 à 30 Euros, les disques SATA standards sont par ailleurs moins chers qu'une cartouche de bande magnétique ! Pour quère plus de 40 Euros vous pouvez trouver des disques de 500Go et pour moins de 65 Euros vous atteignez le Téra. Il n'est pas ici nécessaire d'avoir le "nec plus ultra" des disques, le 7200 tours est superflu !. 
On peut donc changer facilement de disque et se constituer des archives sécurisées au maximum en mettant un disque dans un autre lieu géographique comme on le fait dans le milieu professionnel pour les cartouches de sauvegarde. 
La capacité atteinte permet de sauvegarder facilement l'intégralité d'une machine et peut permettre une sauvegarde adaptés à des artisans ou même à de petites PME pour un investissement très faible.


La procédure de sauvegarde est simple :

  • Brancher le zinzin dans le port ESata (ou USB),
  • Brancher le boîtier d'alim,
  • Enquiller votre disque (2,5 ou 3,5 pouces),
  • Mettre le courant en appuyant sur le bouton (original non), le bas de mon boîtier s'illumine en violet comme sur la photo,
  • Attendez le montage du disque (!) ou montez le "à la main"
  • Pour le premier montage songer à formater le disque, j'ai mis le mien en EXT4, tiens c'est mon premier EXT4.
  • Effectuez votre sauvegarde (simple copie) tranquillement sur un engin rapide : 
    Plus de 17000 fichiers (beaucoup de photos) représentant environ 60Go de données sont sauvegardés en 50 minutes soit environ 1,2Go par minute. Ces fichiers étant stockés sur un "partage" Windows accédé depuis une machine Linux (la seule récente avec une prise ESata) qui a effectué la sauvegarde.

Une fois la sauvegarde effectuée, on "umounte" le disque (soyez propres et ne jouez pas avec votre santé ! ) puis on enlève le disque (comme on doit procéder sagement pour une clé USB) et on le range dans un endroit sûr (dans votre coffre à la banque ?) ou dans un autre lieu, ainsi même dans le cas d'un sinistre important (inondation ... crash d'avion ...) vous conserverez vos précieuses données. 
La procédure serait identique sur une machine Windows ou sur un Mac. 
Je vais préparer de jolis graphiques comme ceux présentés dans les articles sur les SSD. 
Toutes les machines sont enfin OK et j'ai pu faire les mesures de vitesse par rapport à un disque SATA classique. En fait le SATA n'est pas tout à fait classique puisque'il s'agit de deux disques en RAID logiciel. Mais totes les mesures que j'ai pu faire n'indiquent pas (ou peu) de différence par rapport à un disque SATA géré de manière normale. 
Voici donc les deux graphiques pour lecture et écriture standard :

 Lecture  Ecriture


La lecture sur le disque est excellente et présente une courbe très régulière augmentant classiquement en fonction de la taille des enregistrements, la vitesse atteinte est assez impressionante (quasiment le double de celle du disque "classique"). 
Pour l'écriture le disque "classique" reprend l'avantage bien que sa courbe présente de fortes irrégularités pour les grands enregistrements sur des petits fichiers. C'est probablement un effet du cache mémoire. Le disque ESATA présente une courbe très régulière où l'on voit que la vitesse est très faible pour de petite enregistrements et croît très rapidement avec la longueur des enregistrements. 
Pour mémoire voici les mêmes graphiques comparant SATA et SSD :

 Lecture  Ecriture


 

That's all folks

Nas : test NS5200Pro de Thecus

Nas : test NS5200Pro de Thecus jpp

Note Juin 2019 : ce beau matériel est tombé en panne (électronique), comme il est ancien on n'en trouve plus mais il paraît que l'on peut reprendre les disques sous Linux sans problème.

Note Novembre 2023 : la machine supportant ces disques depuis 2019 est tombée en panne (elle date de 2009) et avant de la "refaire" il me fallait une solution pour stocker ces 5 disques et aucune des "boîtes" dont je dispose  n'a l'espace nécessaire à contenir ce paquet, j'ai donc trouvé un boitier externe (toujours ICY BOX) auquel j'ai consacré un article à voir ici.

Cà y est ! J'ai réussi à disposer d'un bel ensemble de stockage pour mettre toutes sortes de choses à l'abri :

  • des vandales
  • de l'usure
  • de la pluie (?)

C'est une belle boite noire fournie par Thecus ( http://www.thecus.com ) qui peut contenir jusqu'à 5 disques et permet diverses fantaisies de configurations RAID. 
Elle est équipée de :

  • 5 baies amovibles qui ferment à clef
  • 2 interfaces réseau 1Gigabit
  • quelques voyants
  • un processeur Celeron M (pour consommer moins)
  • Environ 1Go de mémoire
  • quelques prises USB
  • une prise eSATA

N'ayant pas un besoin évident de "fantaisies" j'ai bêtement configuré la boîte en RAID5 avec les 5 disques d'un coup, avec cinq disques de 1To cela représente un espace de stockage d'environ 4To ! 
Cela devrait suffire pour mettre à l'abri photos, documents et autres archives, il restera encore de la place pour s'amuser. 
L'interface d'administration est accessible par n'importe quel browser, ici Firefox fait merveille : 

La première chose à faire est de changer le mot de passe de l'administrateur ! 
On peut ensuite se balader un peu dans les menus qui semblent assez bien faits. Tiens on peut choisir la langue, je sélectionne donc le français, la traduction est bonne et ne prête pas à confusion. 

On peut même brancher une imprimante et la partager sur le réseau. 
Il est possible de paramétrer l'envoi de mails à une adresse spécifiée, accéder aux journaux du système (Linux), paramétrer les accès réseau (les deux prises Ethernet), modifier leur adresse .... Activer l'accès WebDAV en http et/ou https, activer ou désactiver le service "partage Windows" SMB/CIFS. 
Paramétrer, jour par jour, les heures de démarrage et d'arrêt, gérer une alimentation de sauvegarde. 
 Bref les menus sont très complets. 

La configuration est assez simple et rapide, la constitution du RAID se fait en un écran de paramétrage

  • Choix du mode de RAID
  • Définition de la taille (en % du total)
  • Prise en compte des disques sélectionnés

Clic c'est fini ... et non il faut maintenant que le Raid se construise et avec la taille des disques ce n'est pas juste le temps d'aller boire un café mais plutôt le moment d'aller piquer un bon roupillon  car il y en a pour une douzaine d'heures. 
... 
... 
... 

On peut ensuite dans ce grand bocal créer trois sortes d'espaces :

  • des "folders" ( accessibles dans le style partage windows ou en NFS) pour lesquels on définit une taille maximum (quota).
  • des cibles iSCSI (jusqu'à 5 cibles) pour lesquelles on définit aussi une taille qui est ici la taille du "LUN".
  • des "usbtarget" que je n'ai pas encore expérimentés.

Il y a la possibilité de protéger les accès par :

  • aucune protection
  • read only
  • accès protégé par utilisateur/groupe dans le style Unix avec séparation des accès lecture et écriture 
    On peut même récupérer ces informations depuis un serveur Active Directory dont je ne dispose pas.

Je suis un peu pressé et je crée un premier folder en read/write sans mettre aucun ACL, on verra cela plus tard et je lance le premier test qui consiste à copier tout un groupe de répertoires contenant un gros paquet de photos représentant 25 Gigaoctets pour environ 10600 fichiers. 
Le test est lancé depuis une machine Windows et dure environ 50 minutes : 
50 minutes = 3000 secondes, ce qui représente environ 10Mo par seconde, ce n'est pas merveilleux, mais c'est en fait limité par la bande passante du réseau local à 100Mbits par seconde avec un vieux hub Netgear d'amateur ... 

Visiblement d'autres tests seront nécessaires pour pousser cet engin dans ses retranchements. 

Les tests suivants ont étés réalisés sur une liaison à 1 GB avec une machine Linux, la copie est effectuée bêtement par l'intermédiaire de Nautilus et chronométrée. 
Premier test : 
Recopie depuis le partage Windows des dossiers de photos du test précédent sur une partition locale fraîchement formatée, la copie est réalisée en environ 20 minutes ce qui donne : 
30000 / (20 * 60) = 25 Mo/seconde 

Deuxième test : 
Afin de tester les connexions iSCSI un espace dédié a été crée sur le NS5200 puis accédé et formaté depuis la machine Linux. 
Les commandes suivantes ont été utilisées : 
iscsiadm -m discovery -t sendtargets -p 192.168.3.101 
qui a retourné gentiment : 
192.168.3.101:3260,1 iqn.2009-11.fr.jpp:STO01.iscsi0.vg0.tgtk2000 
J'ai donc ensuite accédé ce nouveau "disque" par : 
TARGET='iqn.2009-11.fr.jpp:STO01.iscsi0.vg0.tgtk2000' 
ADTARG='192.168.3.101' 
iscsiadm -m node -T $TARGET  -p $ADTARG  -l 

Après avoir "fdiské" ce nouveau disque (création d'une seule partition) avec : 
fdisk /dev/disk/by-path/ip-192.168.3.101:3260-iscsi-iqn.2009-11.fr.jpp:STO01.iscsi0.vg0.tgtk2000-lun-0 
puis créé le filesystem : 
mkfs -t ext3  /dev/disk/by-path/ip-192.168.3.101:3260-iscsi-iqn.2009-11.fr.jpp:STO01.iscsi0.vg0.tgtk2000-lun-0-part1 

J'ai enfin pu le monter sur le système pour les tests. 
En utilisant toujours le même bloc de fichier j'ai testé le chargement en écriture dans la partition iSCSI. 
Note : pendant ce test la consommation CPU indiquée par l'interface du NS5200 oscille entre 70 et pllus de 90%, le CPU de l'engin est donc quasiment saturé. 
Résultat final : 
30000  / ( 17 * 60) = 29Mo/seconde 

Troisième test : Recopie d'une partition "locale" de #16Go sur un "disque" iSCSI partitionné en LVM. 
lun. nov. 30 11:34:20 CET 2009 
262144+0 enregistrements lus 
262144+0 enregistrements écrits 
17179869184 octets (17 GB) copiés, 496,765 s, 34,6 MB/s 
lun. nov. 30 11:42:37 CET 2009 

Quatrième test : Recopie d'un fichier de # 16 Go d'un montage NFS sur le NS5200 sur une partition LVM. 
vendredi 4 décembre 2009, 19:20:50 (UTC+0100) 
265472+0 enregistrements lus 
265472+0 enregistrements écrits 
17397972992 octets (17 GB) copiés, 398,503 s, 43,7 MB/s (lecture) 
vendredi 4 décembre 2009, 19:27:28 (UTC+0100)La création de ce même fichier s'était faite à # 26 MB/s (écriture). 

Cinquième test: Recopie d'un fichier de # 16 Go d'un montage NFS sur le NS5200 sur une partition LVM. 
dd if=/MV/COM-MAIL-SYS.img of=/dev/mapper/VOL2-TEMPO bs=65536 
131072+0 enregistrements lus 
131072+0 enregistrements écrits

8589934592 octets (8,6 GB) copiés, 191,646 s, 44,8 MB/s

Sixième test : un peu vicieux recopie d'un fichier de #16Go d'un folder à un autre (NFS)

dd if=XP1.img of=/MV/XP1.img bs=65536 
270336+0 enregistrements lus 
270336+0 enregistrements écrits 
17716740096 octets (18 GB) copiés, 1050,02 s, 16,9 MB/s 

Consommation électrique mesurée avec un "consomètre" trouvé chez Casto:

Rappel les disques sont des Seagate Caviar "green" de 1To

  • # 63W Au repos
  • # 74W En pleine action (recopie des photos)
  • # 17W en mode "veille" (stoppé en attente de démarrage automatique)

La consommation varie peu entre "repos" et "pleine action", le mode veille consomme un peu plus que ma nouvelle machine (#11W) ce qui est un peu bizarre, mais il y a les 5 disques ... 
Le ventilateur est assez bruyant mais maintient la boite quasiment froide, aucune élévation de température n'est  constatée même lors d'utilisation intensive.

Un onduleur et Linux

Un onduleur et Linux jpp

Pour des raisons de sécurité et pour offrir un fonctionnement sans incidents aux membres de ma famille qui utilisent ce petit serveur pour centraliser leurs mails et accéder à Internet je me suis équipé d'un onduleur.

Note 2022 : Pour le télétravail j'ai installé un deuxième onduleur (le même) pour alimenter la machine télétravail et le routeur Internet.

Note 2017 : ce matériel est toujours utilisé bien que sur un hardware différent et j'ai changé la batterie après 5 années de fonctionnement. 

Ce matériel est censé :

  • protéger le serveur des surtensions
  • apporter une meilleure sécurité de fonctionnement
  • permettre un arrêt  "en bon ordre" en cas de coupure électrique prolongée
  • assurer un redémarrage tranquille lors du retour du courant

Il est prévu pour alimenter le serveur de mails mais aussi le modem ADSL car un serveur sauvegardé mais inaccessible est assez peu utile ! 
La puissance prévue est assez faible :

  • moins de 60W pour la machine
  • moins de 10W pour le modem

soit une puissance totale inférieure à 70W.

Un logiciel de gestion de mails sous Linux est obligatoire, qui irait confier ses mails secrets a W..... 
Et voilà pour le cahier des charges .... 
J'ai trouvé en promotion chez un fournisseur un onduleur donné pour 650VA et quelques minutes d'autonomie à cette puissance pour environ 90 Euros. Ce matériel est un modèle ELLIPSE ECO 650USB de taille très raisonnable et qui peut être installé verticalement ou horizontalement. 
Le CD de logiciel fourni ne comporte, évidemment, que des logiciels W.... mais le fournisseur dispose sur son site de versions spécifiques Linux pour X86/32 et X86/64 en format DEB et RPM, le pied quoi ! 
Mon petit serveur dispose d'une Debian 6 qui a accepté sans protester l'installation de la version 32bits. 
Il est nécessaire de brancher la bête sur un port USB avant de lancer l'installation du logiciel ou alors il faudra, comme moi, recourir à l'option "-install" du logiciel. 
L'installation est effectuée par "dpkg" directement dans le répertoire : 
/usr/local/Eaton/IntelligentPowerProtector qui contient ensuite : 
-rwxr-xr-x 2 root  root  3551758 Jul 26 18:23 Eaton-IPP 
drwxr-xr-x 3 root  root     4096 Jul 26 01:42 bin 
drwxr-xr-x 5 root  root     4096 Jul 26 01:46 configs 
drwxr-xr-x 2 root  root     4096 Jul 28 00:56 db 
drwxr-xr-x 2 root  root     4096 Jul 25 21:18 desktop 
-rw-r--r-- 1 root  root     1866 Jul 26 18:24 install.log 
le programme principal " Eaton-IPP" est muni d'un "--help" succinct mais suffisant pour nous : 
./Eaton-IPP --help 
Eaton Intelligent Power Protector v1.10.045 
Usage: /usr/local/Eaton/IntelligentPowerProtector/./Eaton-IPP [COMMAND] [OPTION]... 
Available commands: 
    -install:    launches the installation process (default). 
            Use graphic installer if able. 
Available options: 
    -debug:        displays debugging information on the console. 
    -dir:        specifies installation folder. 
    -silent:    install the application silently. 
            Installation folder can be provided with -dir 

Par ailleurs un script de démarrage est installé dans /etc/init.d avec tous les liens "qui vont bien" dans les différents répertoires /etc/rc?.d : 
./init.d/Eaton-IPP 
./rc0.d/K01Eaton-IPP 
./rc0.d/K20Eaton-IPP 
./rc1.d/K01Eaton-IPP 
./rc1.d/K20Eaton-IPP 
./rc2.d/S19Eaton-IPP 
./rc2.d/S20Eaton-IPP 
./rc3.d/S19Eaton-IPP 
./rc3.d/S20Eaton-IPP 
./rc5.d/S19Eaton-IPP 
./rc5.d/S20Eaton-IPP 
./rc6.d/K01Eaton-IPP 
./rc6.d/K20Eaton-IPP 
La panoplie se complète de lignes de menus (Gnome pour moi) permettant de lancer une interface de gestion "Web" dont il faudra, bien sûr, changer immédiatement les caractéristiques de l'utilisateur d'administration, le traditionnel admin/admin ! 
Cette interface permet aussi de déclencher différentes actions sur les évènements électriques y compris l'envoi de mails et bien sûr l'arrêt de la machine secourue avant l'épuisement de la batterie. 
Elle permet aussi de surveiller l'onduleur et d'afficher des graphiques d'utilisation des ressources sur quelques heures ou quelques jours et on peut exporter le log à des fins de suivi. 
C'est assez complet et permet même d'administrer plusieurs onduleurs, avis aux amateurs (la firme fournit aussi des matériels beaucoup plus professionnels). 

Un essai, en débranchant la prise, m'a montré que le tout fonctionnait très bien et donnait plus de 30 minutes d'autonomie à ma petite machine avant le déclenchement de l'arrêt du système par la commande programmée dans l'interface : "/sbin/init 0". 
Lors du retour du courant le système ne redémarre pas immédiatement mais attend pendant une certaine durée que la tension soit bien stabilisée ! 
En bref cela semble un bon produit : 
- matériel agréable à l'oeil qui semble bien conçu 
- logiciel pour Linux bien pensé et offrant de nombreuses possibilités avec une francisation impeccable.

Au sujet du logiciel j'ai installé la version 1.10 qui fonctionne fort bien, ce soir (31/07) l'interface WEB m'a proposé une version plus récente (1.20) que j'ai récupérée sur leur et installée et patatrac l'onduleur n'est plus reconnu message : "perte de liaison". J'ai ré-installé la version 1.10 et tout est de nouveau OK. 
Les notifications fonctionnent très bien et j'ai reçu ce matin le message suivant :

Alarme depuis Ellipse ECO 650 : 30/07/12 - 08:27:20 - L'onduleur est arrêté 
Alarme depuis Ellipse ECO 650 : 30/07/12 - 08:27:22 - L'onduleur fonctionne 

Un usage de quelques mois montrera la fiabilité de ce système. 
Presque 4 ans après, ce qui prouve que l'onduleur s'est fait oublier par un fonctionnement impeccable !

Après quelques années (on est en 2016) l'onduleur fonctionne toujours, il faudrait que je change la batterie qui semble un peu plus "faible" qu'à ses débuts mais tient encore bien les 5 minutes de délai avant coupure propre du système (shutdown en bon ordre). La machine a évolué vers un CoreI3 série 4, et outre les mails gère un IDS (Suricata) et 3 machines KVM :

  • mail : Zimbra sur un Ubuntu LTS 2004 depuis debut 2021.
  • Web : apache 2.4.53 sur une Debian 11.3
  • Shinken/Grafana sur une Debian 11.3, devenu Shinken/InfluxDB/Grafana au dernier trimestre 2017

Et ça tourne ! 
 

Moderniser un portable

Moderniser un portable jpp

Note 2022 : finalement j'ai donné ce portable (datant de 2009), qui fonctionne toujours fort bien, à une association.

Remise à neuf d'un portable.

Je dispose d'un portable assez ancien (Lenovo R61) que je trouvais un peu « lent », surtout au démarrage ! Et muni d'un disque un peu « court » (60Go). Les portables anciens disposent de disques 2,5 pouces à faible vitesse (consommation oblige) qui nuisent très fortement à leurs performances.

J'ai regardé sur Internet les conseils existants pour ce type de mise à niveau et cela se trouve très facilement pour cette machine somme toute assez courante. J'ai bien regardé avant de me lancer dans la mécanique fine.

Le CPU ( core 2 Duo CPU T8100 @ 2.10GHz) est suffisant pour la plupart des applications, la mémoire (1Go) est insuffisante et ne permet pas d'utiliser KVM bien que la technologie VT-d soit présente.

Il a été décidé de moderniser cette machine :

  • Mise en place d'un disque SSD pour obtenir des démarrages « canon »

  • Remplacement de la pauvre mémoire de 1Go par deux barrettes de 2Go

Première opération :

Sauvegarder ce qui peut être utile (documents, photos …. paramétrages :  /etc), on sera content de le récupérer ensuite.

Deuxième opération :

Pour le disque, pas de problèmes, une vis à défaire, tirer sur une languette et le disque d'origine glisse avec son petit support … Il faut quand même se munir d'une bonne trousse de tournevis de tailles diverses. Le premier essai (disque de récupération) n'a pas été couronné de succès car après chargement du système pas moyen de « booter » ! Un deuxième essai n'a pas eu plus de succès, ce disque ne devait pas être parfaitement compatible SATA ou au moins partiellement incompatible avec le contrôleur.

J'ai alors décidé de mettre un disque récent (Samsung 120Go) et tout a fonctionné du premier coup sans le moindre problème. Je me sers de cette machine avec plaisir depuis 5 mois.

Troisème opération :

Le changement de la mémoire est un peu plus délicat et j'ai un peu hésité avant de démonter tout l'ensemble clavier, touch-pad … petites mains et tournevis aiguille conseillés. Mais les tutoriels en image sur Internet aident bien. La mise en place de la mémoire est facile : on pousse et on enclique ! Il faut ensuite refermer le tout correctement, la remise en boite de certains petits "picots" peut être délicate.

Résultats.

Le démarrage est effectivement « canon » : moins de 15 secondes depuis le choix du noyau dans GRUB et l'affichage de la liste des utilisateurs par GDM. Le fonctionnement est hyper-rapide et les applications se chargent en un clin d’œil, GIMP se lance en moins de 8 secondes, c'est le pied !

Les 4Go de mémoire m'ont permis de lancer deux machines virtuelles KVM pour faire des tests de Suricata pendant un long séjour à la campagne.

La machine, installée avec une Debian « Wheezy » supporte les noyaux les plus récents, elle est en 3.12.0.rc4 pendant que j'écris cet article et les cœurs tournent au minimum (800Mhz).

Même avec un Windows XP ou 7 la machine doit fonctionner à bonne vitesse.

Quelques conseils.

La construction des portables étant une mécanique assez fine (un peu du genre horlogerie) ne vous lancez pas dans une telle opération sans :

  • vous être assurés que votre machine « vaut le coup »

  • avoir vérifié que les tutoriels Internet sont suffisamment détaillés

  • disposer d'un jeu de tournevis complet, notamment des tous petits cruciformes avec un manche assez gros car les vis du « tiroir » du disque m'ont donné du fil à retordre.

Si vous sautez le pas vous ne le regretterez probablement pas.

Un nouveau serveur

Un nouveau serveur jpp

Article de 2010. 
J'ai une vieille tour DELL récupérée d'une société qui a fermé suite aux incidents du 11 septembre aux USA, elle date donc déjà un peu ! Voici la description sommaire de cette relique :

  • Pentium 3 à 700 Mhz
  • 384Mo de RAM (3 x 120Mo)
  • Deux disques IDE de 20 et 160Go

Ses fonctions principales sont :

  • Pare-feu pour mon réseau privé
  • Serveur de mail
  • Petit serveur Web (pour montrer des photos aux amis) et supportant ce site
  • Serveur d'impression couplé à une imprimante HP 950C datant de quelques années et gérée par le logiciel "TurboPrint" dont j'ai utilisé la version "Amiga" pendant plusieurs années sur un Amiga 2000 (encore plus "relique") qui marche toujours et dont je vous raconterai l'histoire une autre fois.
  • DNS cache pour tout le réseau interne
  • DHCP pour le réseau interne
  • Serveur d'annuaire LDAP pour tenir à jour les adresses de nos amis
  • Il est installé avec une Debian stable (c'est l'analogue d'une machine de production), si elle ne fonctionne pas personne à la maison n'a accès à Internet ce qui déclenche jérémiades et plaisanteries du genre : Ah les informaticiens, comme les cordonniers toujours les plus mal chaussés !

Un disque IDE de 20Go qui date de bientôt 10 ans, et il n'était pas neuf quand je l'ai installé ! C'est presque un miracle ! 
Alors pour remercier ce vieux serviteur de ses bons et loyaux services .... on va le mettre progressivement à la retraite.

Recycler une machine

Recycler une machine jpp

J'ai une vieille machine, pensez, plus de trois ans, je ne suis plus du tout dans la course. Il faut d'urgence faire quelque chose. 
Afin de rester dans l'air du temps je décide de "recycler" le maximum de composants de mon ancienne machine, les deux articles suivants présentent les péripéties de ce recyclage dont une des contraintes était de garder toutes mes données personnelles, mails, documentation .... en minimisant les risques. 
 

Recyclez vos machines ... le hardware

Recyclez vos machines ... le hardware jpp

Ma machine principale commençait à donner des signes de faiblesse et était une grosse consommatrice d'énergie. 
Machine d'origine :

  • 2 Athlon MP, pas un dual core, mais bien 2 Cpu mono core
  • une carte mère MSI pour bi-processeur
  • 2 disques SCSI de 36Go à 15000 tours
  • 2 disques SATA de 250Go montés en miroir
  • 3 gigas de RAM
  • carte video AGP
  • diverses cartes d'extension : SCSI, réseau
  • Boitier tour Antec
  • Alimentation Antec de 650W quasiment neuve

La consommation de l'engin était de l'ordre de 200W électriques en pleine action, de 170 en ne faisant rien et 30W en "veille" (machine stoppée mais alimentation non coupée). 
Quelques ennuis :

  • Une alim grillée avec perte du disque système
  • Des lenteurs au boot s'étant manifestés (boot "à la manivelle" ou à l'aide du CD de secours) j'ai décidé qu'il était temps d'upgrader cette machine dont l'architecture datait de plus de trois ans.


Pour faire un peu plus "vert" j'ai regardé du coté des processeurs peu "énergivores" et j'ai jeté mon dévolu sur un AMD Phenom 950e (Quad core basse consommation à 2,5Ghz). 
Pour la carte mère j'ai longtemps hésité puis jeté mon dévolu sur une carte MSI  790FX-GD70 munie des derniers chipsets AMD  et de :

  • deux interfaces réseau 1Gb
  • plein de ports USB
  • 6 sorties SATA principales
  • 2 sorties SATA sur un deuxième contrôleur
  • 1 sortie eSATA
  • 1 sortie son qui semble très correcte
  • 1 sortie ATA pour relire les vieux disques ... pas les 78 tours quand même
  • plein de trucs pour économiser l'énergie ? Tout doit être vert maintenant.
  • facilités d'overclocking

J'ai décidé de récupérer le plus possible d'éléments de l'ancien système et de passer allègrement en 64 bits. 
Eléments récupérés :

  • le boitier, que j'utilise encore en 2022
  • l'alimentation (presque neuve !)
  • les deux disques SATA contenant toutes mes données personnelles

Auxquels ont été adjoints :

  • un disque SSD OCZ vertex de 32 Go pour le système
  • 8 gigas de RAM (4 * 2Go)
  • la carte mère
  • le processeur
  • une carte video PCI Express

 Une fois la décision prise il faut se fabriquer une petite procédure de migration afin de prendre le minimum de risques pour :

  • se garantir contre la perte des données personnelles
  • se garantir contre la perte des paramètres du système

Pour remplir ce mini cahier des charges les opérations à réaliser :

  • Sauvegarder les données personnelles importantes sur un disque externe
  • Mettre en sureté les deux disques SATA (débranchement/démontage)
  • Sauvegarder les répertoires système contenant des paramétrages qui peuvent servir notamment :
    • /etc
    • /var
    • /usr
  • tenter de relire les sauvegardes réalisées, on ne sait jamais !

Une fois toutes ces opérations "sécuritaires" réalisées on peut s'attaquer au boulot physique :

  • repérage et marquage du cablage reliant boitier et carte mère, vieux cables poussiéreux, atchoum ! (pas H1N1 heureusement)
  • démontage propre (!) des disques SCSI, si jamais j'en avais besoin
  • démontage propre de la carte vidéo et des cartes d'extension (contrôleur SCSI, contrôleur SATA, carte réseau 1Gb, carte video non réutilisable car AGP).

Après un bon dépoussiérage à l'aspirateur et on peut s'attaquer au remontage :

  • montage du processeur et de son radiateur (d'origine) "sur table"
  • mise en place de la mémoire, c'est plus facile avec la carte mère "sur table"
  • montage de la carte mère dans le boitier
  • mise en place du joli cache de la face arrière plein de belles couleurs que l'on ne voit plus ensuite !
  • disque SSD (il est tout petit dans son logement pour disques 3,5)
  • câblage avec changement des cables de l'alimentation pour les disques SATA, heureusement cette alimentation était livrée avec plusieurs jeux de cables disques aux différents formats (IDE et SATA) et trois sorties séparées "pluggables" sur le boitier pour la stabilité ...
  • Mise en place du lecteur/graveur CD/DVD en SATA, le vieux était en IDE !
  • Mise en place de la carte video PCI Express
  • pas d'autres extensions, tout est compris, son et réseau.

Je garde volontairement le montage des deux disques SATA pour plus tard lorsque le système sera stable, on ne prend pas de risques avec les données personnelles... 

Alors, on y met le feu ? 
Pas tout de suite, une petite révision du câblage pour limiter les dégâts. 
Après le branchement électrique et la mise sous tension, j'appuie sur le bouton de mise en route et tends l'oreille (et l'oeil) pour guetter le démarrage des ventilateurs. 
Horreur, un des ventilateurs du chassis ne démarre pas ! Je coupe et revérifie le câblage --> câble pas enfiché à fond ! . 
Un nouveau petit coup sur le bouton, tout ronronne normalement, aucun voyant rouge clignotant ne s'est allumé, seules quelques belles LED bleues illuminent l'intérieur du boitier, on croirait presque un arbre de Noël et l'écran affiche la configuration du BIOS ... c'est parfait. 

On va pouvoir passer à l'installation "soft" ... au prochain article.

Recyclez vos machines ... le software

Recyclez vos machines ... le software jpp

Pour le système comme je suis un fan des distributions Debian la question ne se posait même pas, j'installe donc une Debian sur le beau disque SSD. 
Je n'aime pas mettre tous les oeufs dans le même panier et je prévoit d'utiliser le partitionnement suivant :

  • Boot #1Go pour pouvoir mettre en place plusieurs versions et peut-être Xen
  • Swap # 1Go par habitude, bien qu'avec 8Go de mémoire le swap devrait être nul !
  • Le reste soit environ 30Go pour la partition racine

La carte dispose de deux contrôleurs SATA :

  • Le premier avec deux sorties, je les utilise pour le SSD système et le lecteur de CD, Ce contrôleur dispose d'une fonction RAID intégrée que je n'exploiterai pas ici.
  • Le deuxième avec six sorties que je garde pour la suite.

Je "brancherais" plus tard le disque contenant mes données personnelles, vive "ln -s ...". 
Comme j'ai lu quelque part que l'installation pouvait poser des problèmes sur les SSD si l'on démarrait "plein pot" je réduis le diviseur dans le Bios de 12,5 à 6. Comme la carte dispose d'interfaces réseau "incorporés" je lance une installation avec le CD "Net Install" promptement téléchargé et gravé sur une autre machine (# 180Mo c'est vite fait). Je démarre et je choisis l'installation "texte" et précise la langue, le clavier ... tout le "hard" semble bien reconnu et la configuration réseau automatique (vive le DHCP) est OK. Je décide de faire une installation minimale de la version "stable" de Debian avant de basculer en "unstable" que j'aime bien utiliser sur une machine personnelle (ne pas le faire sur une machine de production !). Tout se passe bien, le téléchargement par le réseau d'un grand nombre de packages (1172 paquets !) est parfait (environ 30 minutes sur ma liaison), l'installation de déroule sans aucun problème apparent. 
Je décide d'utiliser le tout nouveau "Grub" (1.97 en attendant le 2.0) et non le vieux "lilo" auquel je m'étais bien habitué. Ah, ça reboote ... et le démarrage est ultra rapide, X se lance sans problème à la bonne définition correspondant à celle de mon écran : 1680 x 1050 sans que je n'aie rien fait ! Un gros bon point à toute l'équipe Debian. 
Après quelques tests je décide de passer en "unstable" comme je l'avais prévu. Après quelques modifications dans le fichier "/etc/etc/sources-list" je lance la commande fatidique : aptitude dist-upgrade 
Après quelques temps de réflexion aptitude me propose une première solution qui me semble parfaite, je réponds donc "Oui" et appuie sur la touche "Entrée" ... c'est parti ... il y a plus de 500 Mo à charger, je laisse donc l'opération se dérouler pendant que je vais faire une petite promenade très favorable à une meilleure santé, en plus il fait très beau aujourd'hui ! Je repasse une bonne heure plus tard, tout est fini, même le noyau a été upgradé et le fichier "grub.conf" mis à jour. L'ancien noyau reste bien sûr disponible. 
Je reboote sur le nouveau noyau et tout est OK, sauf l'accès X : plus de souris et plus de clavier ... après un bon moment de réflexion je vais consulter le log de GDM qui me dit ne pas avoir trouvé les drivers clavier et souris ???? 
Je vais voir dans le répertoire "/usr/lib/xorg/modules/input" et c'est exact, les drivers "kbd_drv.so" et "mouse_drv.so" brillent par leur absence ! Je suis bon pour ré-installer les paquets :

  • kbd_drv.so
  • mouse_drv.so

Aprés ce petit "hic" l'accès est normal et je peux me lancer dans la suite : installer les paquets des logiciels auquel je suis habitué :

  • Apache + PHP
  • Mysql
  • OpenOffice
  • Postfix
  • Evolution
  • ...

On relance "aptitude" avec la liste des logiciels voulus et tout s'installe directement. 
Je sais bien que je n'ai pas pensé à tout et que pendant 3 ans j'avais, petit à petit, ajouté des utilitaires "indispensable", tant pis on les ajoutera à grands coups de "apt-get istall le_logiciel_qui_me_manque". 
Il suffit ensuite de récupérer les "anciens" fichiers de paramétrage depuis la sauvegarde de "/etc" de ces logiciels pour qu'ils fonctionnent exactement comme sur l'ancien système 32bits. 
Il est temps maintenant de reconnecter le miroir contenant mes données personnelles labellé RAIDZZZ. Quelques coups de tournevis pour tout bien fixer et on relance le zinzin. Le disque est là, il me suffit de reconnecter le répertoire "home" présent sur ce disque en lieu et place du /home par un bon : mv /home /home_ori 
ln -s /RAIDZZZ/home /home et modifier le fichier "fstab" pour qu'il reconnaisse le label "RAIDZZZ" dès le boot :  LABEL=RAIDZZZ   /RAIDZZZ  ext3  relatime    1    1 
Un reboot plus tard je fait un login sur mon utilisateur perso et je retrouve toutes mes petites affaires, documents, mails ... parfaitement en place, icônes et applets Gnome compris, comme sur l'ancien bouzin, ça c'est formidable ... Je peux donc maintenant retravailler car cela "pète le feu". Tiens au fait, ai-je remis le multiplicateur à 12.5 ? Un petit tour dans le Bios plus tard je constate que, bluffé par la performance, j'avais complètement oublié de remettre ce truc à la bonne valeur, je travaillai donc à 50% de la vitesse. Vite on remet l'accélérateur "pied au plancher". Ouahhh, là çà décoiffe carrément, l'écran de login X en une quinzaine de secondes après le choix du noyau dans Grub. Il est temps de regarder la consommation de cet engin :

  • # 10 W à l'arrêt en veille
  • # 105 W en marche sans activité processeurs à 800 Mhz
  • # 145 W en recompilant un noyau Linux avec "make -j 6" pour saturer les processeurs

Là c'est nettement moins que l'ancienne machine, ma facture EDF devrait baisser ... Allez j'y retourne pour surfer un peu. Quelques mesures ( zut j'avais oublié d'installer "hdparm" ) :

  • Disque SATA en miroir : 
    hdparm -t /dev/md2 
    /dev/md2: 
    Timing buffered disk reads:  220 MB in  3.01 seconds =  73.11 MB/sec
  • Le disque SSD : 
    hdparm -t /dev/sda2 
    /dev/sda2: 
    Timing buffered disk reads:  378 MB in  3.00 seconds = 125.95 MB/sec

La vitesse est au rendez-vous. 

Temps de démarrage :

  • Temps depuis le choix du kernel dans GRUB jusqu'à l'affichage de l'invite de X : # 20 secondes
  • Temps d'affichage complet du bureau après la saisie du mot de passe : # 9 secondes


Ces temps sont de beaucoup plus courts que ceux de l'ancien système : # 60 secondes pour le boot et # 35 secondes pour l'affichage du bureau. 

64bits + SSD ça décoiffe.

Changement de machine

Changement de machine jpp

Note 2021 : Cette machine a encore été changée après 5 années de bons et loyaux services ... elle a été "recyclée" en machine Bureautique pour madame. 
De même Snorby n'existe plus et a été remplacé par un petit développement personnel qui fournit le même genre de service. Et la nouvelle machine est, bien sûr, beaucoup plus belle. Le core I5 a été remplacé par un AMD Ryzen 5 3600.  
--------------------------------- Article Original ----------------------------- 
La machine qui me sert de tête de réseau et qui "supporte" Suricata/Barnyard2/Snorby a récemment présenté quelques signes de faiblesse et s'est mise à chauffer de manière exagérée sans qu'il y ait une cause évidente, en plus de dater de quelques années ses disques commençaient à saturer. 
Je me suis donc attelé à tout transporter dans une autre machine, avec des disques plus "gros". Après l'installation du système et avec des disques bien mirrorés (Raid 1) et partitionnés j'ai commencé à installer les mêmes logiciels que sur l'ancienne machine en utilisant "dpkg --get-selections >toto" vous fournit un gentil fichier que vous n'avez plus qu'à transporter sur une autre machine et à faire "cat toto | dpkg --set-selections" et vous avez exactement les mêmes paquets (y compris tous les paquets -dev nécessaires à la compilation de suricata, NtopNG ... et autres).

Pourtant malgré cela Snorby (recopié bêtement) s'est planté lamentablement et quand j'ai voulu faire comme la fois précédente ("bundle update") j'ai obtenu tellement d'insultes que j'ai renoncé. Vous pensez il veut du Ruby 1.9.3 et Debian fournit aujourd'hui du 2.1. J'ai donc pris les grands moyens et vidé intégralement le répertoire "snorby" (j'ai toujours les fichiers sur l'ancienne machine, surtout le paramétrage) et j'ai réinstallé complètement le produit en commençant par quelques "gems" : 
wkhtmltopdf 
bundler 
rails -v 4 
rake 
Puis j'ai réinstallé Snorby depuis le dépot Git : 
cd /opt 
git clone git://github.com/Snorby/snorby.git 
puis 
cd snorby 
bundle install 
qui "gueule" un peu car j'installe en "root" et se termine par : 
An error occurred while installing builder (3.0.4), and Bundler cannot continue. 
Make sure that `gem install builder -v '3.0.4'` succeeds before bundling. 
en rouge dans le texte. 
J'installe le truc demandé, qui malgré quelques warnings fini par dire OK et je relance. 
Après un certain temps encore une erreur : 
An error occurred while installing closure-compiler (1.1.11), and Bundler cannot 
continue. 
Make sure that `gem install closure-compiler -v '1.1.11'` succeeds before 
bundling. 
On installe le gem "a mano" et on relance ... enfin cela se termine. C'est quand même ennuyeux toutes ces interruptions ! 
On va maintenant configurer l'accès à la base de données (déjà recopiée avec mysqldump --all-databases et ré-importée). 
Je recopie es fichiers de config de l'ancienne machine : 
database.yml 
snorby_config.yml 
Et je recompare mes fichiers aux fichiers suffixés "example" pour voir s'il n'y a pas un changement de format, mais non tout est correct ... 
Je me dépêche de lancer le truc "init_snorby start" et il me crache quelques phrases bien senties ... : 
/var/lib/gems/2.1.0/gems/actionpack3.2.22/lib/action_dispatch/http/mime_type.rb:102: warning: already initialized constant Mime::PDF /var/lib/gems/2.1.0/gems/actionpack3.2.22/lib/action_dispatch/http/mime_type.rb:102: warning: previous definition of PDF was here 
syck has been removed, psych is used instead 
/var/lib/gems/2.1.0/gems/actionpack3.2.22/lib/action_dispatch/http/mime_type.rb:102: warning: already initialized constant Mime::PDF 
/var/lib/gems/2.1.0/gems/actionpack3.2.22/lib/action_dispatch/http/mime_type.rb:102: warning: previous definition of PDF was here 
syck has been removed, psych is used instead 
/var/lib/gems/2.1.0/gems/actionpack3.2.22/lib/action_dispatch/http/mime_type.rb:102: warning: already initialized constant Mime::PDF 
/var/lib/gems/2.1.0/gems/actionpack3.2.22/lib/action_dispatch/http/mime_type.rb:102: warning: previous definition of PDF was here 
Warning: no instances running. Starting... 

Mais comme j'ai vu le mot magique "Starting..." je me précipite sur Firefox "localhost:3000" qui m'affiche l'écran de login. La suite se passe tout aussi bien, j'ai droit aux mêmes remarques à chaque démarrage mais cela fonctionne. 
Quelques images , le dashboard : 

La liste des alertes : 
 
Rassurez-vous je n'ai rien contre les vietnamiens, j'ai de bons amis de ce pays, mais aujourd'hui quelques uns des habitants passent leur temps à essayer de pirater le port 23 de mes machines .... et peut-être des vôtres !

Migration matérielle

Migration matérielle jpp

Migration matérielle. 
Après plus de 6 années avec comme machine principale un couple carte mère MSI/AMD Phenom4 16Go de RAM dans un boîtier tour ANTEC encore plus ancien (son contenu a déjà été "upgradé" voir ICI) muni de quelques disques :

  • 2 SSD anciens de 32Go système en dual boot, un Debian standard, 1 Debian XEN
  • 2 x 750 Go datant de 2009 en Raid 1
  • 2 * 2To datant de 2011 en Raid 1

Ces disques ont remplacé des anciens (très anciens) 160Go qui avaient donné satisfaction durant des années. 
J'ai décidé de changer processeur et carte mère pour mettre cette machine au goût du jour, c'est à dire « Skylake » à ce jour. 
Le brave Phenom Quadcore a été remplacé par un I6700, je n'overclocke pas donc pas de modèle « K » bien que celui-ci tourne un peu plus vite. Pour la carte mère une ASUS Z170/A assistée de 4x8Go de mémoire m'a semblé correspondre à mes besoins. 
En ce qui concerne le radiateur j'avais lu que les « Skylake » avaient une certaine tendance à chauffer je ne me suis pas contenté du petit radiateur livré avec le processeur et j'ai mis un gros « Cooler Master Hyper 212 » qui remplit presque le boîtier à lui seul ! 
J'avais pris la précaution de compiler mes noyaux avec l'option Intel en plus de l'option AMD pour ne pas avoir de surprises au redémarrage. Je n'ai d'abord branché que les deux disques système afin de valider le démarrage et jj'ai bien entendu essuyé quelques remarques sur les disques « absents ». Les deux disques ayant « booté » sans problèmes j'ai rebranché les quatre autres engins dont les partitions RAID ont été détectées et montées sans problèmes. 
J'avais pris la précaution de garder quelques résultats de performance (hardinfo) de l'AMD afin de pouvoir comparer un peu.


 
AMD I6700 % Overclock %
BOGOMIPS 20000 54533 272,67% 54532 100%
Compilation kernel 
5secondes)
960 288 333,33% 276 104,35%
FPU Raytracing 14,181 2,928 484,32% 2,908 100,69%
FPU FFT 1,997 0,605 330,08% 0,565 107,08%
CPU N-Queens 10,259 0,401 2558,35% 0,380 105,53
CPU Fibonacci 2,753 1,180 233,31% 1,147 102,88%
CPY CryptoHash 357,289 1055,455 295,41% 1087,392 103,03%
CPU Blowfish 3,927 1,107 354,74% 1,101 100,54%

L'option « Asus optimal » du Bios affichée fièrement « Overclocking 20 % » au boot ne donne pas 20 % de performances supplémentaires mais seulement de 3 à 7 % sur les tests. Lors de la compiltaion kernel la fréquence du processeur culmine à 3.8G au lieu de 3.7G en mode standard soit environ 3 %, il m'a même semblé voir 3.87 sur les indicateurs de vitesse CPU, ce faible pourcentage correspond à peu près au gain de quelque pourcents enregistré sur les tests.

Remarques : 
La compilation d'un kernel a tendance à transformer le processeur en chaufferette (il dépasse parfois les 70°), le vieil AMD ne dépassait que rarement les 60°, et le ventilateur (PWM) devient audible alors qu'il est très silencieux en fonctionnement « normal ». 
Consommation électrique : 
L'ancienne machine consommait environ 110W au repos et grimpait à environ 160W sur une compilation de noyau. 
La nouvelle machine consomme environ 85W au repos et monte environ a 140 à pleine charge, ceci avec la carte graphique Geforce utilisée avec l 'AMD. Comme le i6700 dispose d'un IGP intégré, j'ai enlevé la carte graphique et utilisé la sortie VGA présente sur la carte mère. 
Résultat : la consommation est descendue à environ 55W au repos et à 120W à pleine charge la température du CPU monte alors à 75°, Skylake ça chauffe ! La différence de 55W à 120 est de 65W, c'est à dire bizarrement le TDP exact du processeur.

Au niveau du ressenti la différence ne semble pas énorme mais tout est un peu plus fluide. 
Je fais de la photo et la conversion des images "raw" en Jpeg est au moins 4 fois plus rapide, environ 0,5 seconde au lieu de plus de deux secondes, et sur les traitements par lots c'est encore plus sensible grâce au 8 coeurs.

puissance relative

puissance relative drupadmin

Afin de vérifier la puissance relative de cette machine j'ai comparé la durée de compilation d'un kernel 4.5 sur 4 machines de génération différentes :

Core i3 3330     (3.3Ghz)       10' 59''        référence 100% 
Core i3 4330     (3.4GHz)        9' 39'''       -14% 
Core I7 6700     (3.4/3.7GHz)    3' 37''        -67% 
Core I2 T8100    (2.1GHz)       50' 45''        +500%  vive ce vieux portable de 2009

La vitesse d'horloge des 3 machines n'est pas très différente (sauf pour le "vieux" portable) et on "voit" bien la différence entre machines à 2 coeurs et machine à 4 coeurs.

Cache PHP7 : performance

Cache PHP7 : performance jpp

Note 2022 : Drupal 9 ne fonctionne pas (ou très mal) avec le cache et génère des tonnes d'erreurs dans les logs, se connecter comme utilisateur devient impossible car le moteur PHP génère des tas d'erreur. 

Je n'ai jamais réussi à utiliser de manière stable "opcache" avec les versions <= 7.0 de PHP, en testant le passage de "Stretch" à "Buster" j'ai vu que la version de PHP était la 7.3 j'ai été tenté de vérifier ce que pouvait apporter ce cache.

Dans un premier temps un test un peu "brutal" qui permettra de mesurer rapidement l'apport d'Opcache. 
Un article suivant permettra de mesurer le gain à espérer dans le "monde réel". 
 

Opcache : préalable

Opcache : préalable jpp

Précisions sur l'environnement de test. 
Je dispose donc de deux Machines Virtuelles KVM identiques à la version près, une Stretch (PHP7.0) et une Buster (PHP7.3), équipées de Apache/Mariadb et des mêmes applications. 
J'ai donc réalisé quelques essais comparatifs. Je dispose d'un petit injecteur (Python simple) capable d'interroger les sites avec une liste d'Url en notant pour chaque accès le temps de réponse de la requête. Ces requêtes sont des requêtes "simple" n'impliquant qu'un accès, c'est bien plus léger puisque aucune image ni Javascript, tout provient donc "en direct" de la base de données et du moteur du CMS. 
Lors d'un premier passage on constate que MariaDB effectue pas mal de lecture ( #1600Ko ), après ce premier passage tout se passe en mémoire grâce au cache de InnoDB (320Mo) car le test ne concerne que 419 pages du site. De plus ce phénomène survit à un reboot gràce au fichier "/var/lib/mysql/ib_buffer_pool". On peut le vérifier en : 
1) Stopper MariaDB 
2) Supprimer le fichier ib_buffer_pool, non celà n'est pas dangereux ! 
3) Relancer MariaDB 
4) les tests suivants montrent que la base effectue beaucoup de lectures. 
Le premier test est réalisé avec un petit programme Python qui appelle successivement les pages du site, le seul accès est réalisé sur la page (pas de CSS, Images ...). 
Pour le test "évolué" il sera fait appel à Selenium et ses "Webdrivers" afin d'avoir des accès sur les CSS, JS et images. 
Les deux versions (Stretch et Buster) se comportent de manière quasiment identique : aucune analyse graphique ne donne l'avantage à l'un ou à l'autre et l'écart global de temps de réponse (sur 419 pages) est inférieur à 1/10 de seconde sur un total de plus de 8 secondes. Plusieurs passes (avec redémarrage) on donné des résultats similaires. 
On est donc ainsi sûrs que, si l'on réalise les mesures qu'après un "tour de chauffe", on mesurera des performances CPU en faisant abstraction des entrées/sorties.

Opcache : test brutal

Opcache : test brutal drupadmin

Le premier test consiste à utiliser le cache d'opcode de PHP (Opcache), je n'avais pas réussi à le faire fonctionner de manière stable en PHP <= 7.0, voyons comment PHP7.3 se comporte. 
Opcache comporte énormément de paramètres (plus de 30 !), c'est presque une usine à gaz à lui tout seul. Le manuel (http://php.net/manual/en/book.opcache.php) est bien fait, extrêmement volumineux, mais fournit un modèle "recommandé" :

opcache.enable=1 
opcache.memory_consumption=128 
opcache.interned_strings_buffer=8 
opcache.max_accelerated_files=4000 
opcache.revalidate_freq=60 
opcache.fast_shutdown=1 
opcache.enable_cli=1             # inutile ici

Il est possible d'invalider la sauvegarde des commentaires "opcache.save_comments=0" et d'activer "opcache.enable_file_override" afin d'améliorer  (très peu) les performances mais si votre site utilise les "Annotations" de PHP il est impératif d'autoriser la sauvegarde des commentaires ("opcache_save_comments=1") car les annotations sont contenues dans les commentaires..... je suis tombé dans ce piège ! 
Il semble conseillé d'utiliser le chemin complet de la librairie, pour moi : "/usr/lib/php/20180731/opcache.so". Un répertoire "daté" me semble un truc à surveiller ? 
Il semble par ailleurs intéressant (au moins au début des tests) de positionner : 
"opcache.log_verbosity_level" au maximum (3 ou 4) pour les tests. 
"opcache.file_update_protection" à 2 pour du développement et à 0 pour de la production. 
"opcache.huge_code_pages" à 0 si vous n'avez pas de "huge pages", à 1 sinon cela est censé améliorer les performances. 
"opcache.lockfile_path" peut être positionné dans /tmp. 
"opcache.file_cache" permet d'installer un cache sur disque, il faut dans ce cas lui donner le nom d'un répertoire à écriture autorisée pour l'utilisateur Apache, mais je n'ai pas encore réussi à faire fonctionner cette fichue option ! 
"opcache.file_cache_only" permet d'utiliser (0) la mémoire partagée pour le cache,(1) n'utilise que le cache disque, cela peut être utile pour des machines avec peu de mémoire. 
"opcache.preload" permet de charger un script au démarrage du serveur, si ce script "include" d'autres scripts ceuc-ci seront aussi compilés au départ. 
Je vais donc essayer avec :

opcache.enable=1 
opcache.memory_consumption=128 
opcache.interned_strings_buffer=8 
opcache.max_accelerated_files=4000 
opcache.revalidate_freq=60 
opcache.fast_shutdown=1 
opcache.save_comments=0 
opcache.log_verbosity_level=3 
opcache.file_update_protection=0 
opcache.lockfile_path="/tmp"

On verra plus tard pour utiliser le cache disque. 
Premier test : cache en mémoire partagée seul. 
Ce test ne réalise que l'accès "brut" aux URL du site, il est effectué sur les 419 pages du site de test. Afin de limiter l'influence des Entrées/sorties les tests ont été effectués plusieurs fois et seuls le dernier résultat de chaque série a été pris en compte. 
Deux séries de test ont été effectuées : 
1) Délai entre accès de 500 millisecondes. 
- Sans cache : on atteint une charge CPU d'environ <10%. 
- Avec cache : on atteint une charge CPU d'environ <5%% (peu visible !). 
2) Délai entre accès de 50 millisecondes 
- Sans cache : charge CPU #40% 
- Avec cache : charge CPU #20% 
(somme des temps de réponse en secondes) : 
        Sans           Avec          DELTA       Gain %        
1) 16,216021    7,682984    8,533037    52,62 % 
2) 17,812893    9,082634    8,730259    49,01 % 
Le gain de temps de #50% est très significatif. Le graphique suivant montre bien le temps de réponse avec cache (en rouge) et sans cache (en bleu), la surface en rouge est bien plus petite que celle en bleu. 
Graphique "radar" des performances relatives

A suivre tests plus réalistes avec accès plus proche de la réalité (chargement javascripts, css, images) à l'aide de Selenium et Katalon.

Opcache : test évolué

Opcache : test évolué jpp

J'ai voulu réaliser quelques tests avec Selenium, que j'ai déjà utilisé dans le passé, mais l'IDE accessible par Firefox ou Chrome ne génère plus de Python ... quel dommage. 
J'ai trouvé une autre possibilité : passer par le plugin "Katalon" qui, lui génère du bon Python facile à utiliser et "bricoler". 
Et voici les résultats. 
A partir du script Python généré par Katalon, lisible et simple à comprendre j'ai pu en y intégrant un peu de code bâti autour de la carte du site (sitemap.xml pour ne pas la citer) j'ai réussi à faire fonctionner deux scripts (un utilisant Firefox, l'autre Chrome) parcourant la carte du site en sens inverse. 
Ce test a été réalisé en lançant trois fois à 15 secondes d'intervalle les deux scripts en "background), l'affichage étant réalisé devant mes petits yeux ébahis j'ai pu vérifier que la vitesse de chaque script était légèrement supérieure à une page par seconde : #320 secondes pour #420 pages les six scripts demandaient donc à peu près 6 pages par seconde. 
Le système ayant fonctionné avant ces tests on peut supposer que tous les buffers systèmes étaient bien remplis. Ce qui est confirmé par l'absence d'I/O disques durant ces tests. 

 
La somme des "Deltas" légèrement positive semble indiquer un léger "mieux" lors de l'utilisation de Opcache, ceci est peut-être confirmé par les résultats des deux premiers tests défavorables à OPcache car il faut "compiler" le code et le stocker dans des structures mémoire ce qui doit coûter un peu de temps. 
Au niveau du CPU c'est plus net, l'utilisation de Opcache fait baisser l'usage CPU. 
Le graphe suivant présente le %CPU utilisé (en bleu et en rouge) et l'avantage de Cache par rapport à Non_cache, or cet avantage semble le plus souvent positif et montre une "économie" de CPU. 
 

Graphe usage CPU cache/nocache
Graphe usage CPU

On remarque bien qu'au début (de 0 à 50 secondes) l'avantage du cache est faible puis se stabilise aux environs de 15% avec des pointes au delà de 20%. 
Au niveau de la mémoire le cache "consomme" de la mémoire (ici le cache est limité à 128Mo), je vais refaire un essai avec un cache plus important : 256Mo par exemple. 
 

Graphe occupation mémoire
Graphe usage mémoire

On voit bien (en rouge) l'augmentation de l'empreinte mémoire et la baisse de la taille des buffers. 
En combinant le tableau de durée des tests et celui de l'usage CPU on voit qu'avec Opcache cela va "un peu plus vite" tout en consommant nettement moins de CPU. 
Ces tests ont été réalisés avec 128Mo de mémoire consacrés à Opcache j'ai voulu voir si en augmentant cet empreinte mémoire il y avait quelques choses à gagner. J'ai donc passé la taille du cache de 128M à 256M (et forcé la taille mémoire en conséquence !) et refait un test. 
Il s'avère qu'au niveau de la mémoire 128M, dans mon cas, étaient suffisants. Avec 256Mo de cache la mémoire occupée est sensiblement égale à la fin du test, voir graphe ci-dessous :

Occupation mémoire opcache 128M et 512M
Occuparion mémoire cache 128M et 256M

Il est probable que 128Mo suffisent pour le logiciel utilisé, cette valeur est donc à tester pour chaque site pour bénéficier de performances optimales ou à utiliser, au moins, le cache "fichiers".

Remarque : 
Pendant les tests avec 6 threads (3 Firefox et 3 chrome) la machine exécutant les tests (Core i7-6700 CPU @ 3.40GHz avec 16Go) était très chargée en CPU #70/80%. J'ai essayé avec 8 threads et le ventilateur CPU a commencé à vrombir car on dépassait les 90% de CPU. Les navigateurs commandés par les Webdrivers sont donc très avides de CPU ! 
Tester ainsi de gros sites demande certainement une bonne batterie de clients costauds ...

Opcache : cache fichier

Opcache : cache fichier jpp

J'ai rencontré des problèmes "idiots" pour la mise en place du cache qui m'ont retardé dans mes tests. 
Profitant de quelques jours de congés dans le centre j'ai effectué quelques recherches et fini par me rendre compte que seul l'endroit où je voulais installer le répertoire de cache (/var/tmp/opcache) posait problème, même avec tous les bons attributs. J'ai alors essayé d'utiliser le répertoire "/home/opcache" dûment autorisé par un "chown www-data:www-data /home/opcache" et ... miracle cela fonctionne dès le restart d'Apache. Je n'ai pas encore compris l'astuce ! 
Le répertoire "/home/opcache" se peuple rapidement d'un répertoire au nom abscons : "78e784e1b844f19ba1d9d3014253c3f0" , il sera différent ailleurs, contenant un arbre de répertoires correspondant à l'arbre des fichiers PHP des applications installées, le nom change par ailleurs à chaque nouvelle version du logiciel. Les "anciennes" versions peuvent être éliminées sans danger. 
Pour mémoire les paramètres "opcache" utilisés :

Paramètres Opcache
opcache.enable=1 
opcache.memory_consumption=128 
opcache.interned_strings_buffer=8 
opcache.max_accelerated_files=10000 
opcache.max_wasted_percentage=5 
opcache.use_cwd=1 
opcache.validate_timestamps=1 
opcache.revalidate_freq=2 
opcache.save_comments=1 
opcache.enable_file_override=1 
opcache.consistency_checks=20 
opcache.error_log="/var/log/apache2/opcache.log" 
opcache.log_verbosity_level=4 
opcache.file_cache = "/home/opcache" 
opcache.validate_permission=0

L'option "save_comments" est absolument nécessaire si vos applications utilisent des "annotations" car celles-ci se cachent, lâchement, au milieu des commentaires ...et sans les annotations les programmes peuvent ne plus fonctionner ou peuvent ne plus fonctionner nromalement.
L'option "use_cwd" est nécessaire afin d'éviter la collision si deux scripts PHP présents dans deux répertoires différents portent le même nom.

Et ça marche. 
Quelques mois plus tard :

  • La charge CPU est réduite
  • Les temps de réponse sont excellents.