Czy można ograniczyć proces Linuksa, aby mógł on działać tylko na określonym rdzeniu na konkretnej maszynie?

10

Powiedzmy, że mam pudełko czterordzeniowe i cztery identyczne procesy, każdy z dziesięcioma wątkami. Czy w Linuksie można powiedzieć, że Proces A może działać tylko na CPU 0, Proces B może działać tylko na CPU 1 itd.?

mikrofon
źródło

Odpowiedzi:

16
taskset <affinity mask> -p <process>

to znaczy

taskset 1 -p 12345

ustawić proces 12345 na używanie tylko procesora / rdzenia 1

Maska bitów może być listą (tzn. 1,3,4, aby użyć rdzeni 1 3 i 4 systemu rdzenia 4+) lub maską bitową w systemie szesnastkowym (0x0000000D 1,3,4, 0x00000001 tylko dla rdzenia 1)

tasksetjest zwykle w pakiecie o nazwie shedutils.

Edycja: prawie zapomniałem ... Jeśli chcesz ustawić powinowactwo nowego polecenia zamiast go zmienić dla istniejącego procesu, użyj:

taskset <mask> <program> [<arg1>]...[<argN>]
David Spillett
źródło
1

użycie zestawu zadań (util-linux 2.13-pre7): zestaw zadań [opcje] [maska ​​| cpu-list] [pid | cmd [args ...]] ustaw lub uzyskaj powinowactwo procesu

-p, --pid działają na istniejącym podanym pid -c, --cpu-list wyświetlają i określają cpus w formacie listy -h, --help wyświetlają tę pomoc -v, - informacje o wersji wyjściowej wersji

Domyślnym zachowaniem jest uruchomienie nowej komendy: zestaw zadań 03 sshd -b 1024 Można pobrać maskę istniejącego zadania: zestaw zadań -p 700 Lub ustawić: zestaw zadań -p 03 700 Format listy używa listy oddzielonej przecinkami zamiast maska: zestaw zadań-pc 0,3,7-11 700 Zakresy w formacie listy mogą przyjmować argument kroku: np. 0-31: 2 jest równoważne z maską 0x55555555

zawsze możesz zoptymalizować swój serwer, jeśli potrzebujesz

Rajat
źródło