Niveau :      
Résumé : ionice

Vous avez maintenant pris l'habitude de lancer vos programmes gourmands avec nice pour éviter 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 demand2 depuis un certain temps (quasiment jamais)

Le -n donne le niveau de priorité à l'intérieur d'une classe. Pour 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 à exister. 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 vos serveurs de base de données ...

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