2015-11-30 17 views
5

Gibt es eine Möglichkeit, einen Prozess mit einer bestimmten PID zu erzwingen und nur auf einer der CPUs eines Servers auszuführen? Ich weiß, dass es einen Befehl wie folgt gibtZuweisen eines CPU-Kerns zu einem Prozess - Linux

taskset -cp <Cpu_Number> <Pid> 

aber der obige Befehl funktioniert nicht auf meinem System. Also lass es mich wissen, wenn es einen anderen Befehl gibt.

+1

Was ist der Server-Betriebssystem? Ein Benutzer muss 'CAP_SYS_NICE' besitzen, um die CPU-Affinität eines Prozesses zu ändern. Jeder Benutzer kann die Affinitätsmaske abrufen. – sjsam

+0

Es ist nicht fair, von der Frage wegzulaufen, die Sie gerade gepostet haben. Bitte warten Sie auf die unmittelbaren Kommentare. Kommentare sind oft nützlich für Klarstellungen in Ihrer Frage – sjsam

Antwort

5

Es gibt zwei Möglichkeiten, einem laufenden Prozess CPU-Kern/Kerne zuzuweisen.

Erste Methode:

taskset -cp 0,4 9030 

ziemlich klar! Zuweisen von CPU-Kernen 0 und 4 an der pid 9030

Zweite Methode:

taskset -p 0x11 9030 

dies ein wenig komplexer ist. Die Hexadezimalzahl, die auf -p folgt, ist eine Bitmaske.

Die CPU Affinität wird als Bitmaske dargestellt, mit der niedrigsten Ordnung Bit mit dem ersten logischen CPU entsprechen, und das höchstwertige Bit entsprechen: Eine Erklärung kann here, ein Auszug aus der unten gefunden wird gegeben ist die letzte logische CPU. Nicht alle CPUs können auf einem gegebenen System vorhanden sein, aber eine Maske kann mehr CPUs als vorhanden angeben. Eine abgerufene Maske spiegelt nur die Bits wider, die den physischen CPUs im System entsprechen. Wenn eine ungültige Maske angegeben wird (d. H. Eine, die keine gültigen CPUs auf dem aktuellen System entspricht), wird ein Fehler zurückgegeben. Die Masken werden typischerweise in hexadezimal angegeben.

Immer noch verwirrt? Schauen Sie sich das Bild unten:

enter image description here

Ich habe hinzugefügt werden, um die Binärdateien entsprechend der hexadezimalen Zahl und die Prozessoren von links beginnend von Null gezählt. Im ersten Beispiel gibt es eine one in der Bitmaske, die dem zero ten Prozessor entspricht, so dass der Prozessor für einen Prozess aktiviert wird. Alle Prozessoren, die zero an ihre entsprechende Position in der Bitmaske haben, werden deaktiviert. In der Tat wird dies als Maske bezeichnet.

all dies gesagt ist, unter Verwendung des Prozessors taskset Affinität Änderung erfordert, dass:

Ein Benutzer CAP_SYS_NICE besitzen muß die CPU Affinität eines Prozesses zu ändern. Jeder Benutzer kann die Affinitätsmaske abrufen.

Bitte überprüfen Sie die Capabalities Man Page.

Sie könnten interessiert sein, um diese SO Question, die sich mit CAP_SYS_NICE befasst.

Meine Ressourcen

  1. Tutorials Point

  2. XModulo

+0

@Mahdi: Darf ich wissen, wie Sie es aussortiert haben? – sjsam

+0

Ist die zweite von Ihnen zur Verfügung gestellte Methode nur eine weitere Darstellung der ersten Methode? Oder hat die zweite Methode einen stärkeren Einfluss auf die CPU-Zuordnung? – Admia

+0

Es hat keine stärkere Wirkung, glaube ich. Es ist nur eine andere Darstellung .. – sjsam