Gibt es eine Möglichkeit, den Gesamt-CPU-Verbrauch zu begrenzen?

23

Mein Laptop (ein HP mit einem i3-Chip) überhitzt sich jedes Mal wie verrückt, wenn ich einen ressourcenintensiven Prozess durchführe (wie eine große Zusammenstellung, das Extrahieren großer Tarballs oder ... das Spielen von Flash).

Ich suche derzeit nach Kühllösungen, habe aber die Idee, den globalen CPU-Verbrauch zu begrenzen. Ich dachte, wenn die CPU begrenzt ist, steigt die Temperatur wahrscheinlich nicht mehr so ​​rasant an, und ich bin bereit, ein wenig Leistung zu opfern, um die Arbeit zu erledigen.

  1. Irre ich mich in meiner Argumentation?
  2. Wie kann ich vorgehen, um die CPU-Auslastung insgesamt zu begrenzen?

Wenn es hilft, führe ich Debian aus.

rahmu
quelle
Ich glaube, Sie können dies mit cgroups tun und dies hier als Zeiger anstelle einer Antwort
belassen,
Sie können versuchen, cgroups zu verwenden. Hier ist eine Frage mit ähnlichem Problem: unix.stackexchange.com/questions/14537/…
Grzegorz Wierzowiecki

Antworten:

10

Ich weiß nicht, dass die Beschränkung der CPU auf das gesamte System ohne viel Hacken möglich ist. Mit cpulimit können Sie jedoch problemlos die CPU- Auslastung eines einzelnen Prozesses begrenzen

Ich kann mir nur vorstellen, dass Sie dies effektiv nutzen können, indem Sie ein Wrapper-Skript für die Anwendungen schreiben, von denen Sie wissen, dass sie Ressourcenfresser sind. Angenommen, Sie stellen fest, dass Google Chrome viel CPU verbraucht. Sie könnten die Google Chrome-Binärdatei in Ihrem Pfad durch Folgendes ersetzen:

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

Ich habe das nicht getestet, also nimm es mit einem Körnchen Salz. Auf der Website von cpulimit können Sie möglicherweise Regeln für CPU-Grenzwerte für verschiedene Anwendungen festlegen. Ich bin mir nicht sicher, du musst es dir ansehen.

n0pe
quelle
10

Eine andere Alternative, die nicht erwähnt wurde, ist die cpufrequtils, die ich auf meinem Laptop mit Debian 6 installiert und verwendet habe. Sie ermöglicht es Ihnen, den Algorithmus ( Governor , in der cpufrequtilsTerminologie) zu ändern, den der Kernel verwendet, um die Taktrate als Reaktion auf und ab zu skalieren Zum Laden - insbesondere userspacekönnen Sie mit dem Regler die Frequenz auf eine beliebige Geschwindigkeit einstellen (natürlich muss die CPU in der Lage sein, mit dieser Geschwindigkeit zu laufen).

Ich habe es zum Beispiel verwendet, um einen Atom mit 800MHz anstatt mit 1,6GHz zu sperren. Es ist sehr einfach zu bedienen.

AlexWebr
quelle
1
Dies sollte die akzeptierte Antwort sein. (Oder temp_throttle)
Vajk Hermecz
6

Mit dem Skript temp_throttle können Sie Ihre CPU-Kerne automatisch temperaturabhängig begrenzen . Es kann im Hintergrund ausgeführt werden, während Sie sich auf wichtigere Dinge konzentrieren. Ein Beispiel zur Ausführung:

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

* Haftungsausschluss- Ich bin der Autor und Betreuer von temp_throttle *

Sepero
quelle
3

Geh ins BIOS und übertakte die CPU. - Kein Grund zur Klugheit.

Sirex
quelle
Was ist mit BIOSes, die keine Untertaktung unterstützen?
Daboross
1
benutze cgroups, aber ich habe noch kein BIOS gesehen, das die Frequenzeinstellungen niemals ändern kann.
Sirex
Mein (zugegebenermaßen ziemlich schlecht gebauter) alienware m14x r1-Laptop hat keine solche Einstellung, außer der Startreihenfolge und der Systemzeit gibt es nicht viel, was man im BIOS ändern kann.
Daboross
1

Es ist nicht erforderlich, den Governor zu ändern. Sie müssen lediglich den Wert /sys/devices/system/cpu/*/cpufreq/scaling_max_freqfür jeden CPU-Kern ändern .

ZB mit dieser for-Schleife:

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

siehe auch mein setcpu script .

( Originalbefehle hier zu finden )

eadmaster
quelle
-2

Mit können Sie renicedie Priorität des Prozesses nach Prozess- oder Gruppen-ID ändern. Aus den Beispielen für renice:

  1. Passen Sie den Nizza-Wert so an, dass die Prozess-IDs 987 und 32 einen niedrigeren Nizza-Wert haben:

    renice -n 5 -p 987 32

  2. Passen Sie den Nizza-Wert so an, dass die Gruppen-IDs 324 und 76 einen höheren Nizza-Wert haben, wenn der Benutzer die entsprechenden Berechtigungen dazu hat:

    renice -n -4 -g 324 76

  3. Passen Sie den netten Wert so an, dass die numerische Benutzer-ID 8 und der Benutzer sas einen niedrigeren netten Wert haben: renice -n 4 -u 8 sas

Rilindo
quelle
4
Nur eine zusätzliche Anmerkung zur Antwort: Renice, Nice oder andere ähnliche Tools haben keinen Einfluss auf die Temperatur der CPU, der problematische Prozess frisst die CPU-Zyklen weiter.
Rufo El Magufo
2
Nice and Renice wird den CPU-Verbrauch nicht begrenzen. Sie setzen einfach Prioritäten. Wenn zur gleichen Zeit nichts anderes ausgeführt wird, verbraucht der Prozess immer noch die gesamte Rechenleistung.
Rahmu