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 chrt
Befehl tun könnte , um die Echtzeitpriorität des Spielprozesses zu ändern, da renice
selbst 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?
7
Antworten:
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.
quelle
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.
quelle
Wenn Sie
renice
ein 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).
quelle