Existe-t-il un moyen de limiter la consommation globale du processeur?

23

Mon ordinateur portable (un HP avec une puce i3) surchauffe comme un fou chaque fois que j'exécute un processus gourmand en ressources (comme une grande compilation, extraire de grandes archives tar ou ... jouer à Flash).

Je suis actuellement à la recherche de solutions de refroidissement mais j'ai eu l'idée de limiter la consommation mondiale de CPU. J'ai pensé que si le CPU est plafonné, il est probable que la température cessera d'augmenter frénétiquement, et je suis prêt à sacrifier un peu de performance pour faire le travail.

  1. Ai-je tort dans mon raisonnement?
  2. Comment puis-je limiter l'utilisation globale du processeur?

Si cela aide, j'utilise Debian.

rahmu
la source
Je pense que vous pouvez le faire avec des groupes de contrôle, en laissant ici un pointeur au lieu d'une réponse parce que je ne suis pas sûr, et je ne sais pas exactement comment ...
derobert
Vous pouvez essayer d'utiliser des groupes de contrôle. Voici une question avec un problème similaire: unix.stackexchange.com/questions/14537/…
Grzegorz Wierzowiecki

Réponses:

10

Je ne sais pas que limiter le CPU à l'ensemble du système est quelque chose qui est possible sans beaucoup de piratage, mais vous pouvez facilement limiter la quantité de CPU utilisée par un seul processus en utilisant cpulimit

La seule façon dont je peux penser que vous pouvez utiliser cela efficacement est d'écrire un script wrapper (ne peut pas vraiment l'appeler un script, c'est si petit) pour les applications que vous connaissez sont des porcs de ressources. Disons par exemple, que vous trouvez que google-chrome utilise beaucoup de CPU, vous pouvez remplacer le binaire google-chrome sur votre chemin par quelque chose comme:

#! /bin/bash
cpulimit --limit 70 /usr/bin/google-chrome-bin

Je n'ai pas testé cela, alors prenez-le avec un grain de sel. Sur le site Web de cpulimit, il semble que vous puissiez définir des règles pour les limites de processeur sur différentes applications. Je ne suis pas sûr, il faudrait y jeter un œil.

n0pe
la source
10

Une autre alternative qui n'a pas été mentionnée est celle cpufrequtilsque j'ai installée et utilisée sur mon ordinateur portable avec Debian 6. Elle vous permet de changer l'algorithme ( gouverneur , en cpufrequtilsterminologie) que le noyau utilise pour augmenter et diminuer la fréquence d'horloge en réponse pour charger - en particulier, le userspacegouverneur vous permet de verrouiller la fréquence à quelque chose de votre choix (bien sûr, le CPU doit être capable de fonctionner à cette vitesse).

Je l'ai utilisé pour verrouiller un Atom à 800 MHz au lieu de 1,6 GHz, par exemple. C'est très simple à utiliser.

AlexWebr
la source
1
Ce devrait être la réponse acceptée. (Ou temp_throttle)
Vajk Hermecz
6

Vous pouvez limiter automatiquement vos cœurs de processeur en fonction de la température à l'aide du script temp_throttle . Il peut fonctionner en arrière-plan pendant que vous vous concentrez sur des choses plus importantes. Un exemple sur la façon d'exécuter:

sudo ./temp_throttle.sh 80 # Will limit CPU cores when 80C is reached.

* Avertissement - Je suis l'auteur et le mainteneur de temp_throttle *

Sepero
la source
3

Allez dans le bios et underclockez le processeur. - Pas besoin d'intelligence.

Sirex
la source
Qu'en est-il des BIOS qui ne prennent pas en charge l'overclocking?
daboross
1
utilisez cgroups, mais tbh je n'ai pas vu de bios qui ne puisse jamais changer les réglages de fréquence.
Sirex
Mon ordinateur portable alienware m14x r1 (certes assez mal construit) n'a pas un tel paramètre, rien de bien disponible pour changer dans le bios à part l'ordre de démarrage et l'heure du système.
daboross
1

Il n'est pas nécessaire de changer le gouverneur, il vous suffit de changer la valeur de /sys/devices/system/cpu/*/cpufreq/scaling_max_freqpour chaque cœur de processeur.

Par exemple avec ceci pour la boucle:

for f in /sys/devices/system/cpu/*/cpufreq/scaling_max_freq; do
    sudo sh -c "echo $1 > $f" 
done

voir aussi mon script setcpu .

( commandes originales trouvées ici )

eadmaster
la source
-2

Vous pouvez utiliser renicepour modifier la priorité du processus par identifiant de processus ou de groupe. À partir des exemples pour renice:

  1. Ajustez la valeur de Nice afin que les ID de processus 987 et 32 ​​aient une valeur de Nice inférieure:

    renice -n 5 -p 987 32

  2. Ajustez la valeur gentille de sorte que les ID de groupe 324 et 76 aient une valeur gentille plus élevée, si l'utilisateur a les privilèges appropriés pour le faire:

    renice -n -4 -g 324 76

  3. Ajustez la valeur gentille de sorte que l'ID utilisateur numérique 8 et le sas utilisateur aient une valeur gentille inférieure: renice -n 4 -u 8 sas

Rilindo
la source
4
Seule une note supplémentaire à la réponse: renice, nice ou d'autres outils similaires n'affecteront pas la température du CPU, le processus problématique continuera à manger les cycles du CPU.
Rufo El Magufo
2
Nice et renice ne limiteront pas la consommation du processeur. Ils fixent simplement des priorités. Si rien d'autre ne fonctionne en même temps, le processus consommera toujours toute la puissance de traitement.
rahmu