Un surplus soudain des E/S disque violente peut faire baisser les performances de votre serveur de mail ou de votre serveur Web.
Pour éviter ce genre de problème d'explosion soudaine, exécutez votre script avec une classe de d'ordonnancement et de priorité.
Linux est livré avec divers utilitaires pour gérer ce genre d'incident.
Vous devez avoir un noyaux Linux 2.6.13+ avec l'ordonnanceur CFQ IO.
CFQ (Completely Fair Queuing) est un ordonnanceur d'E/S pour le noyau Linux, qui est par défaut dans le noyau 2.6.18+.
Comme son nom l'indique, il permet d'ordonner les entrées et sorties des périphériques.
Pour la définition exacte Wikipedia.org
Pour savoir quel ordonnanceur vous utilisez, entrez:
for d in /sys/block/sd[a-z]/queue/scheduler; do echo "$d => $(cat $d)" ; done
Voici, le résultat :
/sys/block/sda/queue/scheduler => noop deadline [cfq]
L'ordonnanceur entre crochet [cfq]
est celui qui est actif.
Le changement est actif jusqu'au prochain redémarrage, ou nouveau changement de votre part.
Vous pouvez rendre le changement permanent à l'aide d'une règle “udev”, de manière indépendante pour chaque disque (rotationel ou SSD).
Vous pouvez exécuter un programme avec une priorité d'ordonnancement modifiée en utilisant la commande nice
.
La gestion de la rpiorité sous Linux est celle-ci :
Exemple :
nice -n19 /chemin/vers/script.sh
Dans un crontab :
00 00 * * * /bin/nice -n19 /chemin/vers/script.sh
La commande ionice
fournit un meilleur contrôle que la commande nice
pour les E/S de classe d'ordonnancement et la priorité d'un programme ou d'un script.
Un processus peut appartenir à une des trois classes d’ordonnancement possible (je cite le man man-linux-magique.net):
Syntax de la commande :
ionice options PID ionice options -p PID ionice -c1 -n0 PID
Comment puis-je utiliser la commande ionice sur Linux?
Classe d’ordonnancement | nombre | priorité possible |
---|---|---|
real time | 1 | 8 niveaux de priorité sont définis pour indiquer la taille d'une tranche de temps que recevra un processus donné à chaque fenêtre de planification |
best-effort | 2 | 0-7 avec le numéro de priorité le plus élevée étant inférieure |
idle | 3 | ne prend pas d'argument de priorité |
Exemple :
onice -c3 -p 89
Définit le processus avec le PID 89 comme un processus de la classe d’entrées/sorties idle.
ionice -c2 -n 0 /chemin/vers/script.sh
Exécute “/chemin/vers/script.sh” comme un programme best-effort avec la priorité la plus élevée.
ionice -p 89 91
Renvoie la classe et la priorité des processus de PID 89 et 91.
Voici, le résultat
none : priorité 4 none : priorité 4
Enfin, vous pouvez combiner les deux nice
et ionice
ensemble:
nice -n 19 ionice -c2 -n7 /chemin/vers/script.sh
Autre suggestion pour améliorer les E/S disque :