TASKSET(1)

NAZWA
taskset - ustawia lub pobiera koligację procesora dla wątku

SKŁADNIA

taskset [opcje] maska polecenie [argument...]

taskset [opcje] -p [maska] pid

OPIS

Polecenie taskset służy do ustawiania lub pobierania koligacji (przypisania) procesora działającego procesu o podanym pid albo do uruchomienia nowego polecenia o podanej koligacji procesora. Koligacja procesora jest własnością dyspozytora, która "wiąże" proces z podanym zbiorem procesorów w systemie. Linuksowy planista będzie przestrzegał podanego przypisania procesora i nie uruchomi procesu na innym procesorze. Proszę zauważyć, że linuksowy dyspozytor obsługuje również naturalną koligację procesora: planista stara się utrzymywać procesy na tym samym procesorze, dopóki jest to praktyczne, ze względów wydajnościowych. Z tego względu, wymuszanie niestandardowego przypisania procesora jest użyteczne tylko w niektórych zastosowaniach. Koligacja niektórych procesów, jak wątków jądra przypisanych procesorowi, nie może być ustawiona.

Koligacja procesora jest reprezentowana jako maska bitowa, gdzie najniższy bit odpowiada pierwszemu logicznego procesorowi, a najwyższy bit odpowiada ostatniemu logicznemu procesorowi. Nie wszystkie procesory muszą istnieć w danym systemie, jednak maska może podawać więcej procesorów, niż jest obecnych. Pobrana maska odwzoruje jedynie bity odnoszące się do procesorów fizycznie dostępnych w systemie. Jeśli poda się nieprawidłową maskę (tj. niezawierającej żadnego prawidłowego procesora w bieżącym systemie) zwracany jest błąd. Maski można podawać szesnastkowo (z lub bez przedrostka "0x") albo jako listę procesorów wraz z opcją --cpu-list. Na przykład:

0x00000001
    obejmuje procesor #0

0x00000003
    obejmuje procesory #0 i #1,

FFFFFFFF
    obejmuje procesory od #0 do #31,

0x32
    obejmuje procesory #1, #4 i #5,

--cpu-list 0-2,6
    obejmuje procesory #0, #1, #2 i #6.

--cpu-list 0-10:2
    obejmuje procesory #0, #2, #4, #6, #8 i #10. Przyrostek ":N" określa krok w podanym zakresie np. 0-10:3 jest interpretowane jako lista 0,3,6,9.

Gdy taskset powraca, jest gwarantowane, że podany program został zaszeregowany na prawidłowy procesor.

OPCJE

-a, --all-tasks
    Ustawia lub pobiera koligację procesora wszystkich zadań (wątków) o podanym PID.

-c, --cpu-list
    Interpretuje maskę jako numeryczną listę procesorów zamiast maskę bitową. Numery są oddzielane przecinkami i mogą zawierać przedziały. Przykład: 0,5,8-11.

-p, --pid
    Działa na istniejącym identyfikatorze procesu i nie uruchamia nowego zadania. Jeśli PID wynosi zero, działa na procesie taskset.

-h, --help
    Wyświetla ten tekst i wychodzi.

-V, --version
    Wyświetla wersję i wychodzi.

STOSOWANIE

Domyślnym zachowaniem jest uruchomienie nowego polecenia z podaną maską koligacji:
    taskset maska polecenie [argumenty]

Można również pobrać koligację procesora istniejącego zadania:
    taskset -p pid

Albo ją ustawić:
    taskset -p maska pid

Jeśli poda się listę procesorów dla istniejącego procesu, konieczne jest łączne stosowanie opcji -p i -c:
    taskset -pc lista-procesorów pid

Postać --cpu-list służy wyłącznie do uruchamiania nowych poleceń:
    taskset --cpu-list lista-procesorów polecenie

UPRAWNIENIA

Użytkownik może zmienić koligację procesora procesu należącego do tego samego użytkownika. Użytkownik musi posiadać przywilej CAP_SYS_NICE, aby zmienić przypisanie procesora procesu należącego do innego użytkownika. Użytkownik może pobrać maskę koligacji dowolnego procesu.

STATUS ZAKOŃCZENIA

taskset zwraca 0 w trybie pobierania koligacji, o ile tylko podany PID istnieje.

taskset zwraca 0 w trybie ustawiania koligacji, o ile tylko zwróci je podległe wywołanie systemowe sched_setaffinity(2). Powodzenie polecenia nie gwarantuje, że podany wątek faktycznie został zmigrowany na wskazany procesor(y), lecz jedynie że nie zostanie przeniesiony na procesor spoza maski koligacji. Na przykład, można ustawić koligację wątku jądra kswapd, lecz wątek może nie być zmigrowany od razu, nie ma też gwarancji, że kiedykolwiek tak się stanie:

$ ps ax -o comm,psr,pid | grep kswapd
kswapd0 4 82
$ sudo taskset -p 1 82
aktualna lista przypisań dla pidu 82: 1
nowa lista przypisań dla pidu 82: 1
$ echo $?
0
$ ps ax -o comm,psr,pid | grep kswapd
kswapd0 4 82
$ taskset -p 82
aktualna lista przypisań dla pidu 82: 1

Inaczej będzie, gdy użytkownik poda nieprawidłową koligację, wówczas taskset wypisze błąd i zwróci 1:

$ ps ax -o comm,psr,pid | grep ksoftirqd/0
ksoftirqd/0 0 14
$ sudo taskset -p 1 14
aktualna lista przypisań dla pidu 14: 1
taskset: nie udało się ustawić przypisań dla pidu 14: błędny argument
$ echo $?
1

PRZYKŁADY

Wypisanie bieżącej koligacji procesora jako listy.

$ taskset -pc 0
aktualna lista przypisań dla pidu: 1355988: 0-47

AUTORZY

Autor: Robert M. Love.

PRAWA AUTORSKIE

Copyright © 2004 Robert M. Love. Jest to wolne oprogramowanie; warunki rozpowszechniania znajdują się w źródle programu. NIE ma gwarancji, nawet PRZYDATNOŚCI HANDLOWEJ czy PRZYDATNOŚCI DO OKREŚLONEGO CELU.

ZOBACZ TAKŻE

chrt(1), nice(1), renice(1), sched_getaffinity(2), sched_setaffinity(2)

Schemat szeregowania zadań w Linuksie opisano w podręczniku sched(7).

ZGŁASZANIE BŁĘDÓW

Problemy należy zgłaszać w

DOSTĘPNOŚĆ

Polecenie taskset jest częścią pakietu util-linux, który można pobrać ze strony