J'ai un programme. Lorsqu'il fonctionne, la température du processeur passe de 50 à 80 Celcius, ce qui est ma principale préoccupation.
Je peux contrôler la fréquence du processeur pour le ralentir, mais d'autres processus seront également ralentis, ce que je ne veux pas.
Est-il possible de ralentir un processus particulier sans affecter d'autres processus pour garder le CPU au frais?
Mon système d'exploitation est Ubuntu 10.10.
J'ai essayé de définir la priorité du processus par
nice -n 15 myprogram
, et je ne sais pas si cela fonctionnera. Le CPU a une hauteur de 77 Celcius.Ne
nice
définit- elle que la priorité relative d'un processus par rapport aux autres processus? Autrement dit, si d'autres processus ne sont pas en cours d'exécution, est-ce que ce processus en réseau fonctionnera rapidement? Je voudrais que le processus s'exécute lentement tout au long.
9
Réponses:
CPULimit est exactement ce dont vous avez besoin. Vous démarrez le programme, puis exécutez cpulimit par rapport au nom du programme ou PID, en spécifiant le pourcentage que vous souhaitez qu'il soit limité.
La commande suivante limite le processus du PID 7777 à 5% d'utilisation du processeur.
Alternativement, vous pouvez utiliser le nom de l'exécutable:
Ou le chemin absolu de l'exécutable:
Notez que le pourcentage est de tous les cœurs; donc si vous avez 4 cœurs, vous pouvez utiliser 400%.
la source
Vous pouvez redéfinir un processus en cours d'exécution pour lui donner plus ou moins de priorité (la soi-disant "belle valeur"). Notez que l'échelle de priorité UNIX est quelque peu contre-intuitive: des valeurs négatives signifient qu'un processus est préféré aux processus concurrents, c'est-à-dire qu'il a une priorité "plus".
Vous pouvez ainsi essayer de "ralentir" votre processus grâce à son PID à travers:
Chaque fois que vous exécutez ceci, le processus "nice value" est augmenté 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 valeur +10 (changez-le avec l'option
-n
). Par exemple: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 essentiellement inactif, augmenter la "valeur agréable" d'un seul processus n'empêchera pas ce processus de prendre 100% CPU. Je cite la page de manuel getpriority (2) : ( Je souligne .)
La raison de cela 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 une certaine période (fixe et courte). La "valeur intéressante" peut influencer la fréquence à laquelle le planificateur du noyau est disposé à 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 fixe.
Par conséquent, à moins de ralentir votre CPU, il n'y a aucun moyen de ralentir un processus s'il n'y a aucun autre processus dans le système qui peut prétendre à l'accès au CPU.
la source
nice
ne fera rien pour garder votre processeur au frais. Il n'est pas conçu pour fonctionner comme ça.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
Cela prend un peu de temps pour vous familiariser avec eux, et je pense que vous avez besoin d'un accès root pour les configurer, mais tout peut être scripté. Les Ubuntus plus récents ont un fichier .conf afin que vous n'ayez pas à écrire votre propre script. Je ne suis pas sûr de 10h10.
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.
L'utilisation de cpu.shares de cgroups ne fait rien qu'une valeur intéressante ne ferait pas. Il semble que vous souhaitiez réellement limiter les processus, ce qui peut certainement être fait.
Vous devrez utiliser un ou deux scripts et / ou modifier /etc/cgconfig.conf pour définir les paramètres souhaités.
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 pendant 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, le processus recevra 20% du temps processeur maximum, quoi qu'il se passe d'autre.
Dans cette capture d'écran, j'ai donné au processus 2% du temps CPU:
En ce qui concerne le processus, il fonctionne à 100%.
Les paramètres cpu.shares , d'autre part, peuvent et utiliseront toujours 100% du temps processeur 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 processeur inactif.
Références:
http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups .html
la source
systemd
fait les choses un peu différemment. Ubuntu Trusty, par exemple, semble venir avec deux services pour gérer les groupes de contrôle. Je mettrai à jour quand j'en saurai plus.renice
?renice
ne modifie pas la quantité de CPU utilisée, elle modifie simplement la priorité du processus dans le planificateur. cgroups peut modifier la limite du processeur à tout moment. Depuis que cette réponse a été publiée, les groupes de contrôle ont été ajoutés à toutes sortes de réglages et sont très puissants.renice does not change the amount of CPU uses
Je le sais;) Je viens de publier un exemple de programme qui change les choses au moment de l'exécution. Merci pour votre réponse, je vais essayer les cgroups.