Wie starte ich ein Programm mit nur einem CPU-Kern?

28

Ich versuche, eine Reihe von Skripten für einen Spieleserver in Terminator auszuführen. Das einzige Problem dabei ist, dass Terminator alle meine CPU-Kerne erkennt und der PC nachlässt. Gibt es eine Möglichkeit, es zu starten, aber denken Sie, ich habe nur 1 CPU-Kern?

user245115
quelle
2
Hallo, es hört sich so an, als ob Sie hier unter dem xy-Problem leiden könnten. Manchmal lohnt es sich, einen Blick auf das zu werfen, was Sie erreichen möchten, und nicht auf die versuchte Lösung PC, nicht nur um etwas auf einem Kern laufen zu lassen. Trotzdem ist dies eine sehr gute Frage. +1
Vality
related: unix.stackexchange.com/questions/23106/…
Ciro Santilli am

Antworten:

44

Es ist nicht so, terminatordass das "Verteilen" auf die gesamte CPU eines bestimmten Prozesses erfolgt. Linux selbst (der Kernel) macht das. Ein Task (Prozess) ist so geplant, dass er standardmäßig auf allen CPUs ausgeführt werden kann. Wenn es Threads verwendet, kann es mehr als eine CPU gleichzeitig verwenden.

Um einen Prozess auf eine bestimmte CPU zu beschränken, verwenden Sie den Befehl taskset.

taskset --cpu-list 1,2 my_command 

Dieser Befehl erzwingt, dass my_command nur auf den CPUs 1 oder 2 ausgeführt wird.

Um mehr zu erfahren, geben Sie man taskset"Linux-CPU-Affinität" ein oder suchen Sie nach "Linux-CPU-Affinität" (erster Treffer hier ).

Rmano
quelle
2
Übrigens könnten Sie auch versuchen, die "schlechten" Prozesse einfach zu ignorieren und ihre Planungspriorität zu verringern.
Matteo Italia
@ MatteoItalia Ich fand, dass Ubuntu 13.10 und 14.04 nettes Niveau standardmäßig ignorieren. Sie müssen hinzufügen , kernel.sched_autogroup_enabled = 0um /etc/sysctl.confes Arbeit zu machen. Allerdings habe ich auch festgestellt, dass 13.10 beim Booten häufig Kernel-Panics auftreten, wenn die automatische Gruppierung deaktiviert ist.
Kasperd
Was ist mit untergeordneten Prozessen des übergeordneten Prozesses? Erben sie die Core / CPU-Affinität ihres übergeordneten Prozesses?
Yildizabdullah
5

Obwohl eine andere Antwort bereits die wörtliche Antwort gegeben hat, würde ich die Möglichkeit untersuchen, dass dies nicht richtig gemacht wird. Stattdessen sollten Sie mit dem niceBefehl ein Skript ausführen, das den Computer nicht verlangsamen soll (z. B. nicht interaktive Skripts) .

Stellen Sie dazu einfach den Befehl nice command_to_run voran, den Sie mit nice ausführen möchten, zum Beispiel: Dadurch wird die Priorität des Programms gegenüber anderen Aufgaben aufgehoben, und Ihr Computer wird nicht verlangsamt. Ich verwende diese Technik oft, wenn ich eine lange Kompilierung durchführe, die meinen PC sonst zu einem Crawl verlangsamen würde. Dies hat den Vorteil, dass das Programm alle Kerne verwenden kann, wenn der Computer nicht ausgelastet ist, sie jedoch schnell beendet, wenn Sie etwas ausführen sonst.

Wertigkeit
quelle
Wenn ich einen Befehl wie "nice open terminator" verwende, läuft der Terminator trotzdem mit allen CPU-Kernen?
user245115
Oh, und übrigens, wenn ich meine Maus bewege und nichts öffne, werden dann alle CPUs verwendet? Und wie lange dauert es, bis ich meine Maus nicht mehr bewege, um alle CPUs zu nutzen? Und kann ich das mit taskset verwenden? (Ja, ich bin ein echter Neuling unter Linux.)
user245115
@ user245115 Wenn Sie das Dienstprogramm nice verwenden, werden möglicherweise mehrere CPU-Kerne vom Terminator verwendet. Die Verwendung dieser Kerne wird jedoch sofort beendet, wenn ein anderes Programm (das nicht mit nice ausgeführt wird) sie verwenden möchte, sodass es nicht zu einer Verlangsamung kommt Verwenden Sie sie, wenn sie ansonsten völlig kostenlos und unbenutzt sind. Dies sollte nicht durch die Verwendung der Maus oder andere Interaktionen mit dem Programm beeinträchtigt werden.
Vality
@ user245115 Es sollte auch möglich sein, dies mit dem Task-Set zu verwenden, indem einfach geschrieben wird taskset nice open terminator, um beide zu verwenden. Dies ist jedoch zu viel des Guten, da Sie zwei verschiedene Programme verwenden, um den Ressourcenverbrauch des Programms zu verringern.
Vality
@ user245115 In dem Moment, in dem Sie eine andere Aktion ausführen (z. B. das Bewegen der Maus), wird dem Terminator weniger CPU-Zeit
zugewiesen.