Ist es möglich, einen Linux-Prozess so einzuschränken, dass er nur auf einem bestimmten Kern auf einem bestimmten Computer ausgeführt werden kann?

10

Angenommen, ich habe eine Quad-Core-Box und vier identische Prozesse mit jeweils zehn Threads. Kann man unter Linux sagen, dass Prozess A nur auf CPU 0, Prozess B nur auf CPU 1 usw. ausgeführt werden darf?

Mike
quelle

Antworten:

16
taskset <affinity mask> -p <process>

dh

taskset 1 -p 12345

um den Prozess 12345 so einzustellen, dass nur Prozessor / Kern 1 verwendet wird

Die Bitmaske kann eine Liste (dh 1,3,4, um die Kerne 1 3 und 4 eines 4+ Kernsystems zu verwenden) oder eine Bitmaske in hexadezimaler Form sein (0x0000000D die 1,3,4, 0x00000001 für nur Kern 1).

tasksetwird normalerweise in einem Paket aufgerufen shedutils.

Bearbeiten: fast vergessen ... Wenn Sie die Affinität eines neuen Befehls festlegen möchten, anstatt ihn für einen vorhandenen Prozess zu ändern, verwenden Sie:

taskset <mask> <program> [<arg1>]...[<argN>]
David Spillett
quelle
1

Task-Set (util-linux 2.13-pre7) Verwendung: Task-Set [Optionen] [Maske | CPU-Liste] [pid | cmd [args ...]] setzt oder erhält die Affinität eines Prozesses

-p, --pid arbeiten mit der vorhandenen pid -c, --cpu-Listenanzeige und geben cpus im Listenformat -h, --help an, um diese Hilfe anzuzeigen -v, --version Versionsversionsinformationen

Standardmäßig wird ein neuer Befehl ausgeführt: Taskset 03 sshd -b 1024 Sie können die Maske einer vorhandenen Task abrufen: Taskset -p 700 Oder legen Sie Folgendes fest: Taskset -p 03 700 Das Listenformat verwendet eine durch Kommas getrennte Liste anstelle von a mask: Task-Set -pc 0,3,7-11 700 Bereiche im Listenformat können ein Schrittargument annehmen: zB 0-31: 2 entspricht Maske 0x55555555

Sie können Ihren Server immer nach Bedarf optimieren

Rajat
quelle