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

  1. J'ai un programme. Quand il fonctionne, la température du CPU augmente de 50 à 80 Celcius, ce qui est mon principal souci.

    Je peux contrôler la fréquence du processeur pour le ralentir, mais d'autres process seront ralentis ainsi que je ne veux pas.

    Est-il possible de ralentir un process particulier sans affecter d'autres process pour garder le CPU au frais?

    Mon operating system est Ubuntu 10.10.

  2. J'ai essayé de définir la priorité du process par nice -n 15 myprogram , et je ne suis pas sûr que cela fonctionnera. Le processeur est de 77 degrés Celsius.

    Est-ce que nice ne définit que la priorité relative d'un process par rapport à d'autres process? C'est-à-dire, si d'autres process ne sont pas en cours d'exécution, est-ce que ce process est rapide? Je voudrais mettre le process à fonctionner lentement tout au long.

CPULimit est exactement ce dont vous avez besoin:

http://www.cyberciti.biz/faq/cpu-usage-limiter-for-linux/

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 voulez qu'il soit limité. Notez que le pourcentage est de tous les cœurs; donc si vous avez 4 cœurs, vous pourriez utiliser 400%.

Vous pouvez renommer un process en cours pour lui donner plus ou less de priorité (ce que l'on appelle la "valeur intéressante"). Notez que l'échelle de priorité UNIX est quelque peu contre-intuitive: les valeurs négatives signifient qu'un process est favorisé par rapport aux process concurrents, c'est-à-dire qu'il a une priorité plus grande.

Vous pouvez donc essayer de "ralentir" votre process count tenu de son PID à travers:

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

Chaque fois que vous exécutez ceci, le process "nice value" est augmenté de 1; vous pouvez utiliser des valeurs entières autres que +1 bien sûr.

La command nice vous permet de démarrer un process avec un +10 réglage de la valeur (changez avec l'option -n ). Par exemple:

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

Cependant, la «valeur intéressante» n'affecte que la capacité du programmateur à exécuter un process particulier par rapport à d'autres dans le système: si votre ordinateur est au ralenti, l'augmentation de la valeur d'un process ne l' empêchera pas de prendre 100% CPU. Je cite la page de manuel getpriority (2) : (Souligné par moi.)

La mesure dans laquelle leur valeur relative relative affecte la planification des process varie selon les systèmes Unix et, sur Linux, entre les versions du kernel. À partir du kernel 2.6.23, Linux a adopté un algorithm qui fait que les différences relatives dans les valeurs intéressantes ont un effet beaucoup plus fort. Cela provoque de très faibles valeurs intéressantes (+19) pour fournir vraiment peu de CPU à un process chaque fois qu'il y a une autre charge de priorité plus élevée sur le système.

La raison en est que les process sont exécutés sur un kernel de type UNIX: à chaque fois que le kernel décide d'exécuter un process, ce process a le contrôle total d'un cœur d'unité centrale pour une certaine durée (fixe et courte). La "valeur intéressante" peut influencer la fréquence à laquelle le planificateur du kernel est prêt à donner un créneau temporel à un process, mais vous ne pouvez pas changer le fait qu'une fois planifié, un process est exécuté pendant un certain time.

Par conséquent, avant de ralentir votre CPU, il est impossible de ralentir un process s'il n'y a pas d'autres process dans le système qui peuvent contester l'access au processeur.

cgroups ont été créés pour exactement 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 time pour vous familiariser avec eux, et je crois que vous avez besoin d'un access root pour les configurer, mais tout peut être écrit. Les nouvelles Ubuntus ont un file .conf pour que vous n'ayez pas à écrire votre propre script. Je ne suis pas sûr de 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, de sorte que certaines fonctionnalités peuvent ne pas être disponibles dans votre kernel actuel.

Utiliser cpu.shares de cgroups ne fait rien qu'une valeur intéressante ne ferait pas. On dirait que vous voulez vraiment ralentir les process, ce qui peut certainement être fait.

Vous devrez utiliser un script ou deux, et / ou éditer /etc/cgconfig.conf pour définir les parameters que vous voulez.

Spécifiquement, vous voulez éditer les valeurs cpu.cfs_period_us et cpu.cfs_quota_us . Le process 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 process recevra 20% du time CPU maximum, peu importe ce qui se passe.

Dans cette capture d'écran j'ai donné au process 2% du time CPU:

2% de temps CPU

En ce qui concerne le process, il fonctionne à 100%.

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

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

cpu.shares

Comme vous pouvez le voir, le process consum toujours tout le time CPU inactif.

Les references:

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