Ist es für die CPU schlecht, die Priorität eines Spielprozesses auf Echtzeit zu ändern?


7

Unter Windows habe ich häufig die Priorität eines Spielprozesses auf "Hoch" oder "Echtzeit" geändert, um eine Leistungssteigerung zu erzielen. Dies hat nie zu Problemen mit meiner Hardware geführt. Ich dachte, dass ich dies unter Linux vielleicht mit dem chrtBefehl tun könnte , um die Echtzeitpriorität des Spielprozesses zu ändern, da reniceselbst auf -20 (die höchste Priorität) keinen merklichen Schub zu bringen scheint. Ich bin jedoch vorsichtig, ohne zu wissen, ob dies für meine CPU schlecht sein könnte. Kann mich jemand über die Risiken informieren?


2
Ich glaube, wenn ein Echtzeitprozess beschließt, die gesamte verfügbare CPU zu verwenden (z. B. aufgrund von Fehlern, die mehrere Threads zu unendlichen Wartezeiten führen), bleibt er auf allen CPUs geplant, mit Ausnahme von fast allem anderen . Sie könnten nicht einmal ein Terminalfenster oder SSH von einem anderen Ort aus öffnen, um die außer Kontrolle geratenen Prozesse zu beenden.
Celada

Jedes moderne Betriebssystem führt eine Form der Zeitteilung durch. "Priorität" bedeutet also einfach, dass sie mehr Zeitscheiben erhalten als Dinge mit niedrigerer Priorität. Alles, was mit dem System zu tun hat, sollte immer die höchste Priorität haben (denken Sie an Festplatten-E / A und dergleichen), damit die CPU nicht beschädigt werden kann. Wenn das Spiel Ihr einziger Benutzerprozess ist, macht das Ändern der Priorität ohnehin keinen großen Unterschied.
SDsolar

Antworten:


23

Das Ändern der Priorität eines Prozesses bestimmt nur, wie oft dieser Prozess ausgeführt wird, wenn andere Prozesse um die CPU-Zeit konkurrieren. Es hat keine Auswirkungen, wenn der Prozess der einzige ist, der CPU-Zeit verwendet. Ein Prozess mit minimaler Priorität auf einem ansonsten inaktiven System erhält 100% CPU-Zeit, genau wie ein Prozess mit maximaler Priorität.

Sie können Ihr Spiel also mit einer höheren Priorität ausführen, aber dadurch wird es nicht schneller ausgeführt, es sei denn, etwas anderes auf dem System verbraucht eine erhebliche Menge an CPU-Zeit.

Ich empfehle, die Priorität niedriger als der X-Server zu halten, denn wenn der X-Server CPU-Zeit benötigt, liegt dies wahrscheinlich daran, dass das Spiel ihn auffordert, etwas Komplexes anzuzeigen, und die Anzeige ist normalerweise eine CPU-anspruchsvolle Aufgabe (aber es hängt davon ab, wie viel der Arbeit wird in der GPU erledigt - CPU-Prioritäten haben keinen Einfluss auf die GPU).

CPUs sind für die Ausführung von Code ausgelegt. Das Ändern der Prozessprioritäten hat keinen Einfluss darauf, wie viel Arbeit die CPU leistet. Selbst wenn dies der Fall wäre, würde dies die CPU nicht beschädigen, sie nur heißer laufen lassen und die Lüfter im Computer stärker blasen lassen.


10
Es gibt eine Menge Dinge in der Computernomenklatur, aber es verwirrt mich immer noch wirklich, dass so ziemlich jeder, der neu in diesem Konzept ist, denkt, "Priorität" bedeutet eine Art "Gas" oder "Limit". Ist die einfache englische Definition irgendwie mehrdeutig? Wenn ich bei X Vorrang vor dir habe und du X nicht machen musst, dann ist es so, als ob du nicht existierst, oder? Warum sind die Leute darüber verwirrt, weißt du?
user541686

2
"Es würde nur dazu führen, dass es heißer läuft und die Lüfter im Computer stärker blasen." Nein, nicht unbedingt. Ich könnte einen Prozess mit hoher Priorität haben, der sich in einer engen Schleife befindet, wobei Speicherzugriffe vom L1-Cache aus bedient werden und daher nur wenig blockieren. Wenn das Spiel eine höhere Priorität erhält, kann es weniger Hitze verursachen, da die CPU für den Speicherzugriff weitaus mehr blockiert. Die Priorität korreliert nicht mit den CPU-Temperaturen oder der Auslastung - dies ist keine Begrenzung, wie @Mehrdad angibt.
Nanofarad

2
@hexafraction, " aber selbst wenn es so wäre "; niemand sagte, dass es heißer laufen wird
Akiiino

1
@hexafraction Verbraucht eine Intel-CPU weniger Strom, wenn sie bei einem Speicherzugriff blockiert? Nicht, dass dies einen Einfluss auf meine Antwort hätte (die CPU würde heißer laufen, wenn der Prozess mehr CPU-Zeit verbrauchen würde), aber AFAIK ist eine zu kurze Zeitspanne, um einen messbaren Einfluss auf den Stromverbrauch zu haben.
Gilles 'SO - hör auf böse zu sein'

5
@Mehrdad Meine Vermutung wäre, dass die Leute manchmal "oberste Priorität" verwenden, um "alles, was Sie tun, fallen zu lassen und dies sofort zu erledigen, auch wenn es Sie umbringt", im Gegensatz zu "dies vor Aufgaben mit nicht oberster Priorität tun". Wenn Sie den Computer nur ein wenig anthropomorphisieren, macht Ersteres Sinn, obwohl Letzteres das ist, was es für Computer wirklich bedeutet.
Ixrec

2

Sprechen Sie über das Ändern des CPU-Bedarfs, während der Thread ausgeführt wird?

Moderne CPUs verwenden tatsächlich extrem schnelle Geschwindigkeitsstufen. Wenn Sie beispielsweise die Taktung eines Intel Core i5 / i7 analysiert haben, können Sie sehen, dass die Taktraten sehr, sehr schnell auf und ab flackern. Dies ist Teil der Art und Weise, wie Intel die Leistung im Verhältnis zur verbrauchten Leistung optimieren kann. Möglicherweise steht auf einem Desktop-PC eine Menge Strom zur Verfügung, aber das Material wird in Wärme umgewandelt, wenn die CPU härter arbeitet. Daher ist es wichtig, das Beste aus dem Watt herauszuholen.

Ich weiß das nur aus dem, was ich in anderen Spielforen gelesen habe. Ich bin kein CPU-Wissenschaftler.

Ich glaube nicht, dass Sie Schaden anrichten würden, wenn Sie einen Thread auf seine maximale "Gemeinheit" einstellen. Das einzige, was Sie im Auge behalten sollten, ist, wie heiß Ihre CPU wird. Wenn Sie jedoch keine Überspannung im BIOS verwendet haben, ist es ziemlich unmöglich, die CPU vor dem Herunterfahren zu kochen.

Moderne CPUs sind so konzipiert, dass sie die Geschwindigkeit schnell ändern. Wenn Sie nach Intel Speed ​​Stepping und "CPU C-Status" suchen, werden Sie sehen, was ich meine.


2

Wenn Sie reniceein Linux-Programm verwenden, wird Ihre CPU nicht verbrannt, aber es wird nicht unbedingt das tun, was Sie möchten.

Prioritäten haben nichts damit zu tun, wie schnell eine CPU Code ausführt. Es führt Code aus Programmen mit unterschiedlichen Prioritätsstufen gleich schnell aus. Welche Prioritäten sich ändern, ist, welches Programm das Betriebssystem auswählt, wenn es eine Auswahl hat. CPUs können jeweils nur einen "Thread" der Ausführung ausführen (technisch gesehen 1 pro Kern für Mehrkern-CPUs). Wenn es mehr als das tun muss, setzt es auf Multitasking - es wechselt zwischen der Ausführung verschiedener Programme hin und her, um die Illusion zu erzeugen, mehr Threads auszuführen als CPUs. Bei der Auswahl, wie viel Zeit für jede dieser Aufgaben zur Verfügung steht, wird die Priorität als Hinweis verwendet.

Was "Echtzeit" für einen Computer bedeutet, ist weniger "so schnell laufen" als vielmehr "diesen Prozess nicht verhindern". Echtzeitprogrammierung ist in vielen Bereichen sehr wichtig. Zum Beispiel, wenn ich Software schreibe , die in einem Autoantiblockiersystem verwaltet, ich wirklich nicht will , dass meine Aufgabe ein paar Millisekunden spät laufen , weil das Betriebssystem entschied er eine Diagnose auf den Scheibenwischer läuft benötigt. Dementsprechend wird die Antiblockiersystem-Verwaltungssoftware in Autos mit einer "Echtzeit" -Priorität ausgeführt.

Um ehrlich zu sein, ist unter Linux die Prioritätsstufe "Echtzeit" eine Fehlbezeichnung. Dies liegt daran, wie Linux seine Prozesse plant. Wenn in Windows ein Prozess mit einer höheren Priorität ausgeführt wird, wird den Prozessen mit einer niedrigeren Priorität keine CPU-Zeit zugewiesen, es sei denn, die Aufgabe mit der höheren Priorität wartet auf etwas - überhaupt keine. Es dürfen nur Kernelprozesse über eine "Echtzeit" -Fensteraufgabe ausgeführt werden. Windows verfügt über eine Tonne bloatware im Hintergrund jederzeit ausgeführt wird , so die Priorität Anhebung auf „Realtime“ verhindert alle diesen Müll vom Laufen.

Es gibt jedoch ein Problem damit. Manchmal hängt Ihre Aufgabe mit höherer Priorität von einer dieser Aufgaben mit niedrigerer Priorität ab. Dies wird als "Prioritätsinversion" bezeichnet und ist ein großes Thema in der Welt der Multithread-Programmierung. In diesem Fall kann die Aufgabe mit der höheren Priorität die Aufgabe mit der niedrigeren Priorität aushungern lassen, ohne zu bemerken, dass sie sich selbst stoppt! Unter Linux geschieht dies nicht, da unter Linux die Prioritäten als eine Möglichkeit angesehen werden, zu bestimmen, welcher Teil der CPU jedem Programm zugewiesen wird, und nicht als Alles-oder-Nichts-Ansatz. Ein Prozess, der mit -20 ausgeführt wird, erhält wesentlich mehr CPU-Zeit als ein Prozess, der mit 0 ausgeführt wird, aber selbst wenn ein -20-Programm vorhanden ist, erhält das 0-Programm einigeCPU-Zeit. Wenn Speicher zur Verfügung steht, gibt der aktuelle Linux-Scheduler ein Programm mit -1 doppelt so viel CPU-Leistung wie eine 0 und ein Programm mit -2 doppelt so viel wie -1 und so weiter. Dies bedeutet , dass 0.9999046% Ihrer CPU - Zeit wird in das Programm gehen , die bei -20 ist, aber einige kleine Fraktion wird auf 0 Das Programm bei 0 , um das Programm gehen fühlen , wie es auf einem 200 kHz - Prozessor läuft!

Wenn Sie jemals echte Echtzeit wollen , bei der Sie verhindern können, dass Sie von etwas anderem behindert werden, müssen Sie einen Kerneltreiber schreiben oder eine Echtzeiterweiterung für Linux verwenden. Redhat hat eine namens MRG, die eine echte Echtzeitverarbeitung unter Linux ermöglicht. In diesem Fall bedeutet "Echtzeit" etwas Besonderes. Unter MRG dürfen Benutzer in der Gruppe "Echtzeit" diese Echtzeiterweiterungen verwenden (was den Prozessor für immer beschäftigen könnte, da sie absichtlich nicht den netten, freundlichen Linux-Scheduler verwenden).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.