Ich habe ein Programm. Wenn es läuft, steigt die CPU-Temperatur von 50 auf 80 Grad Celsius, was mein Hauptanliegen ist.
Ich kann die CPU-Frequenz steuern, um sie zu verlangsamen, aber auch andere Prozesse werden verlangsamt, was ich nicht möchte.
Ist es möglich, einen bestimmten Prozess zu verlangsamen, ohne andere Prozesse zu beeinflussen, um die CPU kühl zu halten?
Mein Betriebssystem ist Ubuntu 10.10.
Ich habe versucht, die Priorität des Prozesses durch festzulegen
nice -n 15 myprogram
, und bin mir nicht sicher, ob dies funktionieren wird. Die CPU ist 77 Celcius hoch.Ist
nice
nur eine relative Priorität eines Prozesses WRT anderen Verfahren festgelegt? Dh wenn andere Prozesse nicht ausgeführt werden, wird dieser gewürfelte Prozess schnell ausgeführt? Ich möchte den Prozess so einstellen, dass er durchgehend langsam läuft.
9
Antworten:
CPULimit ist genau das, was Sie brauchen. Sie starten das Programm und führen dann cpulimit für den Programmnamen oder die PID aus. Geben Sie dabei an, wie viel Prozent Sie darauf beschränken möchten.
Der folgende Befehl begrenzt den Prozess bei PID 7777 auf 5% CPU-Auslastung.
Alternativ können Sie den Namen der ausführbaren Datei verwenden:
Oder der absolute Pfad der ausführbaren Datei:
Beachten Sie, dass der Prozentsatz aller Kerne ist. Wenn Sie also 4 Kerne haben, können Sie 400% verwenden.
quelle
Sie können renice einen laufenden Prozess , um ihn mehr oder weniger Priorität (die so genannten „nice value“). Beachten Sie, dass die UNIX-Prioritätsskala etwas kontraintuitiv ist: Negative Werte bedeuten, dass ein Prozess gegenüber gleichzeitigen Prozessen bevorzugt wird, dh "mehr" Priorität hat.
Sie können also versuchen, Ihren Prozess aufgrund seiner PID zu "verlangsamen" durch:
Jedes Mal, wenn Sie dies ausführen, wird der Prozess "nice value" um 1 erhöht. Sie können andere als
+1
natürlich ganzzahlige Werte verwenden .Mit dem Befehl nice können Sie einen Prozess mit einer +10 nice value-Anpassung starten (ändern Sie dies mit der Option
-n
). Zum Beispiel:Der "nette Wert" wirkt sich jedoch nur darauf aus, wie sehr der Scheduler die Ausführung eines bestimmten Prozesses gegenüber anderen im System bevorzugt: Wenn Ihr Computer im Grunde genommen im Leerlauf ist, wird durch Erhöhen des "netten Werts" eines einzelnen Prozesses nicht verhindert , dass dieser Prozess 100% dauert ZENTRALPROZESSOR. Ich zitiere aus der Manpage getpriority (2) : (Hervorhebung von mir hinzugefügt.)
Der Grund dafür liegt in der Art und Weise, wie Prozesse auf einem UNIX-ähnlichen Kernel ausgeführt werden: Jedes Mal, wenn der Kernel einen Prozess ausführt, hat dieser Prozess für einen bestimmten (festen und kurzen) Zeitraum die volle Kontrolle über einen CPU-Kern. Der "nette Wert" kann beeinflussen, wie oft der Kernel-Scheduler bereit ist, einem Prozess ein Zeitfenster zuzuweisen. Sie können jedoch nicht die Tatsache ändern, dass ein Prozess nach dem Planen für einen festgelegten Zeitraum ungestört ausgeführt wird.
Wenn Sie Ihre CPU nicht verlangsamen, kann ein Prozess daher nicht langsamer ausgeführt werden, wenn keine anderen Prozesse im System vorhanden sind, die um den CPU-Zugriff kämpfen können.
quelle
nice
wird nichts tun, um Ihren Prozessor kühl zu halten. Es ist nicht dafür ausgelegt, so zu funktionieren.Aus genau diesem Grund wurden cgroups erstellt.
http://www.kernel.org/doc/Documentation/cgroups/ http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm
Es dauert eine Weile, bis Sie sich mit ihnen vertraut gemacht haben, und ich glaube, Sie benötigen Root-Zugriff, um sie einzurichten, aber alles kann per Skript ausgeführt werden. Die neueren Ubuntus haben eine .conf-Datei, so dass Sie kein eigenes Skript schreiben müssen. Ich bin mir über 10.10 nicht sicher.
Ein guter Anfang ist in dieser Antwort: /ubuntu//a/94743/170177
Beachten Sie, dass sich cgroups noch in der aktiven Entwicklung befindet, sodass einige Funktionen in Ihrem aktuellen Kernel möglicherweise nicht verfügbar sind.
Die Verwendung von cpu.shares von cgroups bewirkt nichts, was ein netter Wert nicht tun würde. Es hört sich so an, als ob Sie die Prozesse tatsächlich drosseln möchten, was definitiv möglich ist.
Sie müssen ein oder zwei Skripte verwenden und / oder /etc/cgconfig.conf bearbeiten , um die gewünschten Parameter zu definieren.
Insbesondere möchten Sie die Werte cpu.cfs_period_us und cpu.cfs_quota_us bearbeiten . Der Prozess wird dann erlaubt werden , für laufen cpu.cfs_quota_us Mikrosekunden pro cpu.cfs_period_us Mikrosekunden.
Zum Beispiel:
Wenn cpu.cfs_period_us = 50000 und cpu.cfs_quota_us = 10000 , erhält der Prozess 20% der maximalen CPU-Zeit, unabhängig davon, was sonst noch vor sich geht.
In diesem Screenshot habe ich dem Prozess 2% der CPU-Zeit gegeben:
Der Prozess läuft zu 100%.
Einstellungen cpu.shares hingegen können und werden 100% der Leerlauf-CPU-Zeit nutzen.
In diesem ähnlichen Beispiel habe ich den Prozess cpu.shares = 100 (von 1024) angegeben:
Wie Sie sehen, verbraucht der Prozess immer noch die gesamte Leerlaufzeit der CPU.
Verweise:
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
quelle
systemd
macht die Dinge etwas anders. Ubuntu Trusty zum Beispiel scheint mit zwei Diensten zum Verwalten von Gruppen zu kommen. Ich werde aktualisieren, wenn ich mehr weiß.renice
?renice
ändert nicht die Menge der verwendeten CPU, sondern nur die Priorität des Prozesses im Scheduler. cgroups können das CPU-Limit jederzeit ändern. Seit diese Antwort veröffentlicht wurde, haben cgroups alle Arten von Optimierungen hinzugefügt und sind sehr mächtig.renice does not change the amount of CPU uses
Ich weiß es;) Ich habe gerade als Beispiel für ein Programm gepostet, das Dinge zur Laufzeit ändert. Vielen Dank für Ihre Antwort, ich werde cgroups versuchen.