GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist das Ändern der Priorität eines Spielprozesses auf Echtzeit schlecht für die CPU?

Das Ändern der Priorität eines Prozesses bestimmt nur, wie oft dieser Prozess ausgeführt wird, wenn andere Prozesse um 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, genauso 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 verwendet eine erhebliche Menge an CPU-Zeit.

Ich empfehle, die Priorität niedriger als die des X-Servers 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 normalerweise eine CPU-intensive Aufgabe ist (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 darauf ausgelegt, Code auszuführen. Das Ändern der Prozessprioritäten hat keinen Einfluss darauf, wie viel Arbeit die CPU leistet, aber selbst wenn dies der Fall wäre, würde dies die CPU nicht beschädigen, sie würde nur heißer laufen und die Lüfter im Computer stärker blasen.


Sprechen Sie davon, die Höhe der CPU-Anforderung zu ändern, während der Thread ausgeführt wird?

Moderne CPUs verwenden tatsächlich extrem schnelle Geschwindigkeitsschritte. 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 aufgenommenen Leistung optimieren kann. Möglicherweise haben Sie in einem Desktop-PC eine Menge Strom zur Verfügung, aber das Zeug wird in Wärme umgewandelt, wenn die CPU härter arbeitet, daher ist es wichtig, das Beste aus dem Watt herauszuholen.

Ich kenne das nur aus dem, was ich in anderen Gaming-Foren gelesen habe. Ich bin kein CPU-Wissenschaftler.

Ich glaube nicht, dass Sie Schaden anrichten würden, wenn Sie einen Thread auf seine maximale "Bösartigkeit" einstellen. Das einzige, was Sie im Auge behalten sollten, ist, wie heiß Ihre CPU wird, aber wenn Sie im BIOS keine Überspannung verwendet haben, ist es ziemlich unmöglich, die CPU zu erhitzen, bevor sie herunterfährt.

Moderne CPUs sind darauf ausgelegt, die Geschwindigkeit schnell zu ändern. Suchen Sie nach Intel Speed ​​Stepping und 'CPU C states' und Sie werden sehen, was ich meine.


Mit renice auf einem Linux-Programm wird Ihre CPU nicht verbrennen, aber es wird nicht unbedingt das tun, was Sie wollen.

Prioritäten haben nichts damit zu tun, wie schnell eine CPU Code ausführt. Es führt Code von Programmen mit unterschiedlichen Prioritätsstufen gleich schnell aus. Welche Prioritäten sich ändern, ist, welches Programm das Betriebssystem auswählt, wenn es eine Wahl 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 tun muss, verlässt es sich auf Multitasking – es wechselt zwischen der Ausführung verschiedener Programme hin und her, um den Eindruck zu erwecken, dass mehr Threads ausgeführt werden, als CPUs vorhanden sind. Bei der Auswahl, wie viel Zeit jeder dieser Aufgaben gewidmet werden soll, verwendet es die Priorität als Hinweis.

Was „Echtzeit“ für einen Computer bedeutet, ist weniger „so schnell ausführen“ und mehr „diesen Prozess nicht unterbinden“. Echtzeitprogrammierung ist in vielen Bereichen sehr wichtig. Wenn ich zum Beispiel Software geschrieben habe, die Antiblockiersysteme in einem Auto verwaltet, habe ich wirklich Ich möchte nicht, dass meine Aufgabe ein paar Millisekunden zu spät ausgeführt wird, weil das Betriebssystem entschieden hat, dass eine Diagnose der Scheibenwischer ausgeführt werden muss. Dementsprechend wird die Antiblockier-Bremsmanagement-Software in Autos mit "Echtzeit"-Priorität ausgeführt.

Ehrlich gesagt ist die Prioritätsstufe „Echtzeit“ unter Linux etwas irreführend. Dies liegt daran, wie Linux seine Prozesse plant. Wenn in Windows ein Prozess mit höherer Priorität ausgeführt wird, erhalten die Prozesse mit niedrigerer Priorität keine CPU-Zeit, es sei denn, die Aufgabe mit höherer Priorität wartet auf etwas – überhaupt nicht. Nur Kernel-Prozesse dürfen über einer "Echtzeit"-Windows-Aufgabe ausgeführt werden. Windows hat eine Tonne von Bloatware, die die ganze Zeit im Hintergrund läuft, also verhindert das Erhöhen der Priorität auf „Echtzeit“, dass all dieser Müll ausgeführt wird.

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 "Prioritätsinversion" genannt und ist ein großes Thema in der Welt der Multithread-Programmierung. Wenn dies geschieht, kann die Task mit höherer Priorität die Task mit niedrigerer Priorität aushungern, ohne zu bemerken, dass sie sich selbst stoppt! Unter Linux geschieht dies nicht, da die Prioritäten unter Linux als eine Möglichkeit angesehen werden, zu bestimmen, welcher Anteil der CPU jedem Programm zugewiesen wird, und nicht als Alles-oder-Nichts-Ansatz. Ein Prozess, der bei -20 läuft, wird erheblich mehr CPU-Zeit als bei 0, aber selbst bei Anwesenheit eines -20-Programms bekommt das 0-Programm etwas CPU-Zeit. Wenn der Speicher ausreicht, gibt der aktuelle Linux-Scheduler einem Programm bei -1 doppelt so viel CPU-Leistung wie einer 0 und einem Programm bei -2 doppelt so viel wie einer -1 und so weiter. Das bedeutet, dass 0,9999046 % Ihrer CPU-Zeit für das Programm mit -20 aufgewendet werden, aber ein kleiner Teil geht Gehen Sie zum Programm bei 0. Das Programm bei 0 fühlt sich an, als würde es auf einem 200-kHz-Prozessor laufen!

Wenn Sie jemals wahr wollen Echtzeit, wo Sie verhindern können, dass irgendetwas anderes Sie davon abhält, müssen Sie einen Kerneltreiber schreiben oder eine Echtzeiterweiterung für Linux verwenden. Redhat hat einen namens MRG, der eine echte Echtzeitverarbeitung mit Linux ermöglicht. "Echtzeit" bedeutet in diesem Fall etwas Bestimmtes. Unter MRG dürfen Benutzer in der "Realtime"-Gruppe diese Echtzeit-Erweiterungen verwenden (was den Prozessor ewig beschäftigen könnte, weil sie absichtlich nicht den netten freundlichen Linux-Scheduler verwenden).


Linux
  1. Rsync ändert die Verzeichnisberechtigungen?

  2. CentOS / RHEL :So priorisieren Sie die Geräte, die für die Swap-Partition verwendet werden

  3. Wie stellt man die CPU-Affinität für einen Prozess von C oder C++ in Linux ein?

  4. Wie berechnet man die CPU-Auslastung eines Prozesses durch PID in Linux von C?

  5. Überprüfen Sie das offene FD-Limit für einen bestimmten Prozess in Linux

So ändern Sie die Priorität eines Prozesses in Linux

3 Tipps zur Verbesserung der Linux-Prozessleistung mit Priorität und Affinität

Slack für die CLI – Slack

Die 30 besten Spieleemulatorkonsolen für Linux-Systeme

Die 5 besten Weltraumspiele für Linux:Spielen Sie, um das Universum zu erkunden

Die 5 besten Horrorspiele für Linux, um die virtuelle Welt des Terrors zu genießen