Jak ustawić powinowactwo procesora do procesu w systemie Linux?
29
Użyłem do tego zestawu zadań. Jeśli masz zainstalowany zestaw zadań, coś takiego:
taskset -c 1,3 -p 45678
ustawiłby proces o identyfikatorze 45678 na powinowactwo do cpus 1 i 3.
taskset -p -c 1,3 45678
raczej niżtaskset -c 1,3 -p 45678
; tzn. że-c 1,3
jest to specyfikacja maski i jako taka musi być umieszczona między-p
apid
.Wewnątrz procesu będzie połączenie
sched_setaffinity()
lub dla pthreads rzeczy,pthread_setaffinity_np()
W powiązanej notatce, jeśli martwisz się powinowactwem procesora do twojego programu, warto zwrócić uwagę na sposób przydzielania pamięci. Większe systemy z pamięcią podłączoną do więcej niż jednego kontrolera (tj. Wielu gniazd procesora, każde z własnym) będą miały zmienne opóźnienie i szerokość pasma między różnymi parami procesora-pamięci. Będziesz także chciał sprawdzić powinowactwo NUMA, używając
numactl
polecenia lub wywołań systemowych, z którymi działa. Jeden program, nad którym pracowałem, uzyskał 10% poprawę wydajności.źródło
Musisz zainstalować
schedutils
(narzędzia do planowania w systemie Linux). Używam go na moim Ubuntu Desktop.Link SF
źródło
uruchamia
a.out
proces z podanymi argumentami i powinowactwem ustawionymi na procesory 1, 2 lub 3 (w oparciu o zero).Oto minimalny program testowy C, którego można użyć, aby zobaczyć go w akcji: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787
źródło