Des outils de test pour stresser votre système

Date: 18/09/2012 | Catégories: Open-source,Planet-libre,Systeme | Tags: ,,,,,

Le développement logiciel nécessite des phases de test et de validation qui sont souvent menées sur des machines non chargées. Je vous propose donc de découvrir, dans ce billet, une série de petits logiciels permettant de simuler une charge sur votre système et qu'il faudra donc lancer en parallèle de vos applications à valider. J'ai uniquement sélectionné des logiciels libres, légers, en ligne de commande et disponible dans les dépôts Ubuntu standards.

Comment stresser une machine ?

Plusieurs leviers permettent de "stresser" une machine:

  • consommation CPU
  • utilisation de la mémoire MEM
  • entrée/sortie IO
  • lecture/écriture disque DISK
  • entrée/sortie réseau NET

L'utilisation conjointe de ces leviers permet de simuler une charge sur une machine cible. L'amplitude des paramètres appliquées à ces leviers est bien sûr à adapter à votre configuration hardware et système.

Note: l'utilisation des logiciels décrits si-dessous peut entraîner le plantage pure et simple de votre machine (cela m'est arrivé pendant mes tests...). Je vous conseille donc vivement de ne pas les appliquer sur une machine en production...

Fuzz

Le premier logiciel est Fuzz. Contrairement aux autres solutions, ce dernier ne génère pas de "stress" par lui même mais demande à d'autres programmes de le faire.

Ainsi, la ligne de commande suivante:

fuzz grep foo

va lancer 10.000 fois la commande "grep foo" en lui donnant en entrée des données factices. Ainsi votre machine va chercher la chaîne de caractère foo dans un flot de données. Nous pouvons donc voir, grâce à Glances (un peu de pub...),  que la charge CPU (recherche de sous-chaine) et IO (entrée-sortie disque) augmentent.

Le nombre d’exécution (-r par défaut 10.000) et le time-out (-t par défaut 120 secondes) sont bien-sur paramétrable en ligne de commande (voir le man).

Si vous connaissez les applications qui tourneront en parallèle de la votre, il est facile de simuler votre environnement cible. Il manque par contre un peu de finesse pour tester votre application avec des contraintes pré-définies (par exemple avec une charge CPU de 75%).

Spew

Développé par HP et mis à disposition de la communauté, Spew est spécialisé sur le stress par entrée-sortie disque. Il permet d'écrire et/ou de lire des fichiers de test sur votre disque.

Pour générer un fichier de 5 Go nommé /tmp/bibi:

$ spew 5G /tmp/bibi
WTR:    90320.56 KiB/s   Transfer time: 00:00:58    IOPS:   180641.12

La même commande mais en forçant la relecture du fichier à la fin de l'écriture:

$ spew --read-after-write 5G /tmp/titi
WTR:    74740.25 KiB/s   Transfer time: 00:01:10    IOPS:   149480.49
RTR:  1761227.45 KiB/s   Transfer time: 00:00:02    IOPS:  3522454.90
On peut voir une montée en charge globale de la machine (LOAD) mais juste avec des entrées/sorties (IO):

Note: pensez à supprimer vos fichiers de test (/tmp/bibi)...

Stress et StressAppTest

Deux logiciels qui font fonctionnellement la même chose (jouer sur l'ensemble des leviers permettant de stresser une machine) mais de manière différente...

Stress est une application permettant de générer des processus (worker) ayant des caractéristiques communes:

  • CPU (consommation de la CPU grâce à l’exécution de la commande sqrt)
  • MEM (avec exécution des commandes malloc et free)
  • IO (avec execution de la commande sync)
  • DISK (execuiyon des commandes read et write)

Avec la commande suivante:

stress -m 10 --vm-bytes 512000000 -t 30

On se retrouve donc avec 10 processus consommant chacun 512 Mo:

Contrairement à Stress, StressAppTest ne génère par défaut qu'un seul processus qui va regrouper les caractéristiques de stress souhaitées.

Ainsi, la commande:

$ stressapptest -s 30 -M 256 -m 8 -C 8 -W

Log: Commandline - stressapptest -s 30 -M 256 -m 8 -C 8 -W
Stats: SAT revision 1.0.3_autoconf, 64 bit binary
Log: buildd @ allspice on Wed Jan 11 17:38:51 UTC 2012 from open source release
Log: 1 nodes, 4 cpus.
Log: Prefer plain malloc memory allocation.
Log: Using memaligned allocation at 0x7f9e9f157000.
Stats: Starting SAT, 256M, 30 seconds
Log: Region mask: 0x1
Log: Seconds remaining: 20
Log: Seconds remaining: 10
Stats: Found 0 hardware incidents
Stats: Completed: 458960.00M in 31.10s 14756.72MB/s, with 0 hardware incidents, 0 errors
Stats: Memory Copy: 458960.00M at 15298.83MB/s
Stats: File Copy: 0.00M at 0.00MB/s
Stats: Net Copy: 0.00M at 0.00MB/s
Stats: Data Check: 0.00M at 0.00MB/s
Stats: Invert Data: 0.00M at 0.00MB/s
Stats: Disk: 0.00M at 0.00MB/s
Status: PASS - please verify no corrected errors

Donne:

Je vous invite à consulter la documentation officielle du projet pour y découvrir les nombreuses options.

Pour finir...

Cette liste est très loin d'être exhaustive. L'idée étant de partager votre savoir...

Quel logiciel utilisez vous pour faire vos test de performances sur des machines chargées ?

Avez-vous des solutions multi-plateforme ?

A vos claviers 🙂

Partager ce billet