Être gentil avec ses disques

Publié le 23 septembre 2007 par Peck
Niveau :
Résumé : ionice

Vous avez  maintenant pris l'habitude de lancer vos programmes gourmands avec nice pour eviter qu'ils ne monopolisent le processeur. C'est bien, mais il leur arrive encore parfois de consommer tout les accès dique et de faire ramer votre swap.

Et le sauveur s'appelle ionice. Son utilisation est simple :
$ ionice -c 2 -n 4 /usr/local/monscript

Mais que veulent dire -c 2 et -n 4 ? Il s'agit simplement de la classe et de la priorité.
  • -c 1 : temps réel, ne pas utiliser sous peine de geler la machine
  • -c 2 : standard on donne acces au disque dès qu'on en a l'occasion
  • -c 3 : on donne accès au disque lorsque personne ne l'a demand depuis un certain temps (quasiment jamais)
Le -n donne le niveau de priorité à l'intérieur d'une classe. Pour le la classe 2 il y a 8 niveaux de 0 à 7 (0 étant la plus forte priorité). Tout comme celles de nice, ces priorités sont héritées.

Pour récupérer les informations pour un processus existant à partir de son pid :
$ ionice -p1
Vous constaterez que la plupart des processus sont dans la classe none. Selon les documentations cela connespond à -c2 -n4 ou à un calcul en fonction de la valeur de nice du preocessus.

Ainsi pour lancer un programme particulièrement gourmand je vous conseille quelque chose du genre
$ nice -n 19 ionice -c2 -n7 /usr/local/monscript



Passons à une partie plus technique. Ceci n'est possible que parce que le noyau contient un scheduler d'io. C'est une innovation récente. Ce n'est que depuis le 2.6.18 que le scheduler cfq est présent par défaut et c'est le seul qui supporte ces priorités. Mais ce n'est pas le seul. Vous pouvez en compiler plusieurs et en changer soit au boot (avec l'option elevator=) soit après le boot disque par disque avec la commande
$ echo "cfq" > /sys/block/hda/queue/scheduler
Le choix d'un bon scheduler peut influencer les performances de vo serveurs de base de données ...

La documentation se trouve dans le répertoire Documentation/block des sources du noyau.