Recherche de site Web

Comment définir la priorité des processus Linux à l'aide des commandes nice et renice


Dans cet article, nous expliquerons brièvement le planificateur de noyau (également connu sous le nom de planificateur de processus) et la priorité de processus, qui sont des sujets au-delà de la portée de ce guide. Ensuite, nous plongerons un peu dans la gestion des processus Linux : voyez comment exécuter un programme ou une commande avec une priorité modifiée et également modifier la priorité d'exécution des processus Linux.

Lire aussi : Comment surveiller les processus Linux et définir les limites des processus par utilisateur

Comprendre le planificateur du noyau Linux

Un planificateur de noyau est une unité du noyau qui détermine le processus le plus approprié parmi tous les processus exécutables à exécuter ensuite ; il alloue le temps processeur entre les processus exécutables sur un système. Un processus exécutable est un processus qui n’attend que le temps CPU, il est prêt à être exécuté.

Le planificateur constitue le cœur du multitâche sous Linux, utilisant un algorithme de planification basé sur les priorités pour choisir entre les processus exécutables du système. Il classe les processus en fonction de ceux qui le méritent le plus ainsi que du besoin en temps CPU.

Comprendre la priorité du processus et la valeur intéressante

Le noyau stocke de nombreuses informations sur les processus, notamment la priorité des processus, qui est simplement la priorité de planification attachée à un processus. Les processus ayant une priorité plus élevée seront exécutés avant ceux ayant une priorité plus faible, tandis que les processus ayant la même priorité sont planifiés les uns après les autres, de manière répétée.

Il existe un total de 140 priorités et deux plages de priorités distinctes implémentées sous Linux. La première est une valeur agréable (niceness) qui va de -20 (valeur de priorité la plus élevée) à 19 (valeur de priorité la plus basse) et la la valeur par défaut est 0, c'est ce que nous allons découvrir dans ce guide. L'autre est la priorité en temps réel, qui va de 1 à 99 par défaut, puis de 100 à 139. sont destinés à l’espace utilisateur.

Une caractéristique importante de Linux est la planification dynamique basée sur les priorités, qui permet de modifier (augmenter ou diminuer) la valeur des processus en fonction de vos besoins, comme nous le verrons plus tard.

Comment vérifier la bonne valeur des processus Linux

Pour voir les belles valeurs des processus, nous pouvons utiliser des utilitaires tels que ps, top ou htop.

Pour afficher la belle valeur des processus avec la commande ps dans un format défini par l'utilisateur (ici le NI, la colonne montre la gentillesse des processus).

ps -eo pid,ppid,ni,comm

Alternativement, vous pouvez utiliser les utilitaires top ou htop pour afficher les belles valeurs des processus Linux, comme indiqué.

top
htop

Différence entre PR ou PRI et NI

Dans les sorties top et htop ci-dessus, vous remarquerez qu'il y a une colonne appelée PR et PRI de manière réceptive. qui montre la priorité d’un processus.

Cela signifie donc que :

  • NI – est la valeur agréable, qui est un concept de l'espace utilisateur, tandis que
  • PR ou PRI – est la priorité réelle du processus, telle que vue par le noyau Linux.
Comment calculer les valeurs PR ou PRI
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Plage de valeurs agréable (NI) : -20 à 19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

Mais si vous voyez un rt plutôt qu'un nombre comme indiqué dans la capture d'écran ci-dessous, cela signifie essentiellement que le processus s'exécute avec une priorité de planification en temps réel.

Comment exécuter une commande avec une valeur intéressante donnée sous Linux

Ici, nous verrons comment prioriser l’utilisation du processeur d’un programme ou d’une commande. Si vous avez un programme ou une tâche très gourmand en CPU, mais que vous comprenez également que son exécution peut prendre beaucoup de temps, vous pouvez lui définir une priorité élevée ou favorable à l'aide de la commande nice.

La syntaxe est la suivante :

nice -n niceness-value [command args] 
OR
nice -niceness-value [command args] 	#it’s confusing for negative values
OR
nice --adjustment=niceness-value [command args]

Important:

  • Si aucune valeur n'est fournie, nice définit une priorité de 10 par défaut.
  • Une commande ou un programme exécuté sans Nice a par défaut une priorité de zéro.
  • Seul root peut exécuter une commande ou un programme avec une priorité accrue ou élevée.
  • Les utilisateurs normaux ne peuvent exécuter qu'une commande ou un programme avec une faible priorité.

Par exemple, au lieu de démarrer un programme ou une commande avec la priorité par défaut, vous pouvez le démarrer avec une priorité spécifique en utilisant la commande nice suivante.

sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

Vous pouvez également utiliser la troisième méthode qui est un peu déroutante, notamment pour les valeurs de gentillesse négatives.

sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

Modifier la priorité de planification d'un processus sous Linux

Comme nous l'avons mentionné précédemment, Linux permet une planification dynamique basée sur les priorités. Ainsi, si un programme est déjà en cours d'exécution, vous pouvez modifier sa priorité avec la commande renice sous cette forme :

renice -n  -12  -p 1055
renice -n -2  -u apache

À partir de l'exemple de sortie top ci-dessous, la qualité du teamspe+ avec le PID 1055 est maintenant -12 et pour tous les processus appartenant à l'utilisateur Apache sont -2.

Toujours en utilisant cette sortie, vous pouvez voir la formule PR=20 + NI,

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

Toutes les modifications que vous apportez avec la commande renice aux valeurs agréables des processus d'un utilisateur ne sont applicables que jusqu'au prochain redémarrage. Pour définir des valeurs par défaut permanentes, lisez la section suivante.

Comment définir la valeur intéressante par défaut des processus d'un utilisateur spécifique

Vous pouvez définir la valeur par défaut d'un utilisateur ou d'un groupe particulier dans le fichier /etc/security/limits.conf. Sa fonction principale est de définir les limites de ressources pour les utilisateurs connectés via PAM.

La syntaxe pour définir une limite pour un utilisateur est la suivante (et les valeurs possibles des différentes colonnes sont expliquées dans le fichier) :

#<domain>   <type>  <item>  <value>

Utilisez maintenant la syntaxe ci-dessous où dur – signifie appliquer des liens durs et doux signifie – appliquer les limites souples.

<username>  <hard|soft>  priority  <nice value>

Vous pouvez également créer un fichier sous /etc/security/limits.d/ qui remplace les paramètres du fichier principal ci-dessus, et ces fichiers sont lus par ordre alphabétique.

Commencez par créer le fichier /etc/security/limits.d/tecmint-priority.conf pour l'utilisateur tecmint :

vi /etc/security/limits.d/tecmint-priority.conf

Ajoutez-y ensuite cette configuration :

tecmint  hard  priority  10

Enregistrez et fermez le fichier. Désormais, tout processus appartenant à tecmint aura une belle valeur de 10 et un PR de 30.

Pour plus d'informations, lisez les pages de manuel de nice et renice :

man nice
man renice 

Vous aimerez peut-être également lire ces articles suivants sur la gestion des processus Linux.

  1. Comment rechercher et tuer les processus en cours sous Linux
  2. Un guide des commandes Kill, Pkill et Killall pour terminer un processus sous Linux
  3. Comment surveiller l'utilisation du système, les pannes et dépanner les serveurs Linux
  4. CPUTool - Limiter et contrôler l'utilisation du processeur de n'importe quel processus sous Linux

Dans cet article, nous avons brièvement expliqué le planificateur du noyau, la priorité des processus, examiné comment exécuter un programme ou une commande avec une priorité modifiée et également modifié la priorité des processus Linux actifs. Vous pouvez partager vos réflexions sur ce sujet via le formulaire de commentaires ci-dessous.