Gérer la priorité des processus sous Linux grâce à Nice et Ionice

Mind And Go, Pascal DERNONCOURT
Odoo image et bloc de texte

Le 100% de mémoire du Processeur du gestionnaire des tâches qui inquiète.

Qui n’a pas grogné ou pesté car son ordinateur ralentit fortement au moment de l'exécution d'un autre processus sur son ordinateur ? Effectivement, le micro-processeur partage son temps entre tous les processus. Ils s’exécutent en même temps. Le micro-processeur leur accorde un peu de son temps de travail, et ce, à tour de rôle.

J’ai rencontré ce problème personnellement au moment de faire des sauvegardes via BackupPc. Dans mon cas, BackupPc utilise la commande rsync pour récupérer les datas et les stocker sur une autre machine via Internet. Lors du lancement des sauvegardes qui sont importantes en volume, je pouvais alors remarquer une utilisation importante du CPU au détriment des autres applications, mais aussi des délais importants en lecture et écriture sur le disque (IO Delay).


La commande nice permet de gérer la priorité du processus exécuté, et la commande ionice limite les IO Delays engendrés par le processus.

Il suffit de placer devant la commande (ici, dans mon cas rsync) nice et ionice comme ci-dessous :


   nice -n 10 ionice -c 3 /usr/bin/rsync   

  •  nice -n   gère la priorité du processeur de -19 pour la priorité la plus forte et 19 pour une priorité la plus faible.   nice   seul donne par défaut une priorité de 10.

  •   ionice -c  spécifie la classe pouvant être 0, 1, 2 ou 3 pour l’accès aux disques et espaces de stockage. 

Texte Odoo et bloc d'image


Quelques points à savoir :

 

Odoo image et bloc de texte

Si   -c 3   (idle), le processus a accès au disque seulement si aucun autre processus a besoin d’y accéder.

Si   -c 2   (best-effort), c’est la class par défaut. Chaque processus est traité en fonction du temps processeur qui lui est accordé par   nice  .

Si   -c 1   (realtime), le processus est prioritaire et passe devant tous les autres.

     -c 0   est équilvalent à   -c 2  . Il est possible d’ajouter une classdata   -m   allant de 0 à 7 pour préciser une priorité entre les processus de la class best-effort   -c 2  .
Comme pour 
  -n    de   nice 0   étant le plus prioritaire et 7 le moins. Par défaut, la classdata est de 4.

Attention, donner une class -c de 1 (realtime) peut ralentir, voir arrêter les autres processus en cours !


Vous pouvez voir dans la figure jointe le résultat sur un exemple :

 

La sauvegarde est lancée à 12h43 (  nice -n 10 ionice -c 3 /usr/bin/rsync  ).

Nous constatons dès le début un transfert de donnés via Internet (Network traffic). À 13h44, les IO Delay deviennent importants. Nous constatons  également un arrêt du trafic internet (Network traffic) s’expliquant par la faible priorité du processus rsync dans notre cas.

Le trafic internet reprend quand le IO Delay repasse sous 20 %.

L’utilisation de   nice   et de   ionice   est très intéressante. Ils permettent de préserver la vitesse des applications en donnant une faible priorité à des processus qui ne nécessitent pas d’être exécutés rapidement, ou de prioriser un autre devant être plus rapide. Cela demande une réflexion sur le délai d’exécution du processus et si il y a un temps d’exécution limite. 

Texte Odoo et bloc d'image