GNU/Linux >> Tutoriels Linux >  >> Linux

Ralentissez un seul processus pour réguler la température du processeur

CPULimit est exactement ce dont vous avez besoin. Vous démarrez le programme, puis exécutez cpulimit par rapport au nom du programme ou au PID, en spécifiant le pourcentage que vous souhaitez limiter.

La commande suivante limite le processus au PID 7777 à 5 % d'utilisation du processeur.

cpulimit -p 7777 -l 5

Alternativement, vous pouvez utiliser le nom de l'exécutable :

cpulimit -e myprogram -l 5

Soit le chemin absolu de l'exécutable :

cpulimit -P /path/to/myprogram -l 5

Notez que le pourcentage est de tous les cœurs ; donc si vous avez 4 cœurs, vous pouvez utiliser 400 %.


Vous pouvez affiner un processus en cours d'exécution pour lui donner plus ou moins de priorité (ce que l'on appelle la "valeur agréable"). Notez que l'échelle de priorité UNIX est quelque peu contre-intuitive :des valeurs négatives signifient qu'un processus est favorisé par rapport aux processus concurrents, c'est-à-dire qu'il a "plus" de priorité.

Vous pouvez ainsi essayer de "ralentir" votre processus compte tenu de son PID via :

# lower priority of a process
renice +1 "PID"

Chaque fois que vous l'exécutez, la "valeur agréable" du processus est augmentée de 1 ; vous pouvez utiliser des valeurs entières autres que +1 bien sûr.

La commande nice vous permet de démarrer un processus avec un ajustement de la valeur nice +10 (changez ceci avec l'option -n ). Par exemple :

# start a CPU-intensive task with low priority
nice ./cpu-hog

Cependant, la "valeur agréable" n'affecte que la mesure dans laquelle le planificateur favorise l'exécution d'un processus particulier par rapport aux autres dans le système :si votre ordinateur est fondamentalement inactif, l'augmentation de la "valeur agréable" d'un seul processus ne sera pas empêcher ce processus de prendre 100 % du processeur. Je cite la page de manuel getpriority(2) :(c'est moi qui souligne.)

La mesure dans laquelle leur valeur relative de nice affecte la planification des processus varie selon les systèmes Unix et, sous Linux, selon les versions du noyau. À partir du noyau 2.6.23, Linux a adopté un analgorithme qui fait que les différences relatives dans les valeurs de nice ont un effet beaucoup plus fort. Cela provoque des valeurs très basses (+19) pour fournir vraiment peu de CPU à un processus chaque fois qu'il y en a un autre _charge prioritaire sur le système._

La raison réside dans la façon dont les processus sont exécutés sur un noyau de type UNIX :chaque fois que le noyau décide d'exécuter un processus, ce processus a le contrôle total d'un cœur de processeur pendant un certain laps de temps (fixe et court). La "valeur agréable" peut influencer la fréquence à laquelle le planificateur du noyau est prêt à donner un créneau horaire à un processus, mais vous ne pouvez pas changer le fait qu'une fois planifié, un processus s'exécute sans être perturbé pendant une durée déterminée.

Par conséquent, à moins de ralentir votre processeur, il n'y a aucun moyen de ralentir l'exécution d'un processus s'il n'y a pas d'autres processus dans le système qui peuvent se disputer l'accès au processeur.


cgroups ont été créés exactement pour cette raison.

http://www.kernel.org/doc/Documentation/cgroups/http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm

Il faut un peu de temps pour se familiariser avec eux, et je pense que vous avez besoin d'un accès root pour les configurer, mais tout peut être scripté. Les nouveaux Ubuntus ont un fichier .conf pour que vous n'ayez pas à écrire votre propre script. Je ne suis pas sûr pour 10.10.

Un bon endroit pour commencer est dans cette réponse :https://askubuntu.com/a/94743/170177

Notez que cgroups est toujours en cours de développement, donc certaines fonctionnalités peuvent ne pas être disponibles dans votre noyau actuel.

Utiliser les cpu.shares de cgroups ne fait rien qu'un gentil la valeur ne ferait pas l'affaire. Il semble que vous vouliez réellement limiter les processus, ce qui peut certainement être fait.

Vous devrez utiliser un script ou deux, et/ou modifier /etc/cgconfig.conf pour définir les paramètres que vous souhaitez.

Plus précisément, vous souhaitez modifier les valeurs cpu.cfs_period_us et cpu.cfs_quota_us . Le processus sera alors autorisé à s'exécuter pour cpu.cfs_quota_us microsecondes par cpu.cfs_period_us microsecondes.

Par exemple :

Si cpu.cfs_period_us =50000 et cpu.cfs_quota_us =10000 alors le processus recevra 20 % du temps CPU maximum, quoi qu'il se passe d'autre.

Dans cette capture d'écran, j'ai donné au processus 2 % de temps CPU :

En ce qui concerne le processus, il tourne à 100 %.

Paramètres cpu.shares d'autre part peut et utilisera toujours 100 % du temps CPU inactif.

Dans cet exemple similaire, j'ai donné le processus cpu.shares =100 (sur 1024):

Comme vous pouvez le voir, le processus consomme toujours tout le temps CPU inactif.

Références :

http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.htmlhttp://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups. html


Linux
  1. Linux - Comment limiter un processus à un seul cœur de processeur sous Linux ??

  2. Détecter les processus mangeant le CPU sans :Top, Htop, Ps ?

  3. Récupérer l'utilisation du processeur et l'utilisation de la mémoire d'un seul processus sous Linux ?

  4. Processus d'arrière-plan sous Linux

  5. Le processus vmlinuz s'exécute sur 100 % du processeur

Conseils pour le haut :surveiller la charge du processeur sous Linux

Comment vérifier la température du processeur sous Linux

Comment surveiller la température d'un processeur sur un système Redhat 7 Linux

Comment afficher la température du processeur sous Linux

Comment obtenir l'utilisation du processeur d'un seul processus sous Linux

Comment désactiver un processeur