TASKSET(1)

NUME
taskset - stabilește sau recuperează afinitatea CPU a unui proces

REZUMAT

taskset [opțiuni] masca comanda [argument...]

taskset [opțiuni] -p [masca] pid

DESCRIERE

Comanda taskset este utilizată pentru a stabili sau a prelua afinitatea CPU a unui proces în curs de execuție, având în vedere pid-ul acestuia, sau pentru a lansa o nouă comandă cu o anumită afinitate CPU. Afinitatea CPU este o proprietate a planificatorului care „leagă” un proces de un anumit set de CPU-uri din sistem. Planificatorul Linux va respecta afinitatea CPU dată, iar procesul nu va rula pe alte CPU-uri. Rețineți că planificatorul Linux acceptă și afinitatea naturală a CPU: planificatorul încearcă să mențină procesele pe același CPU cât mai mult timp posibil din motive de performanță. Prin urmare, forțarea unei afinități CPU specifice este utilă numai în anumite aplicații. Afinitatea unor procese, cum ar fi firele per-CPU ale nucleului, nu poate fi definită.

Afinitatea CPU este reprezentată ca o mască de biți, cu bitul de ordinul cel mai mic corespunzând primei CPU logice și bitul de ordinul cel mai mare corespunzând ultimei CPU logice. Este posibil să nu existe toate CPU-urile pe un anumit sistem, dar o mască poate specifica mai multe CPU-uri decât cele prezente. O mască recuperată va reflecta numai biții care corespund CPU-urilor aflate fizic în sistem. În cazul în care se indică o mască nevalidă (adică una care nu corespunde niciunui CPU valid de pe sistemul curent), se returnează o eroare. Măștile pot fi specificate în hexazecimal (cu sau fără un "0x" de început) sau sub forma unei liste de CPU-uri cu ajutorul opțiunii --cpu-list. De exemplu,

0x00000001
    reprezintă procesorul nr. 0,

0x00000003
    reprezintă procesoarele nr. 0 și nr. 1,

FFFFFFFF
    reprezintă procesoarele de la nr. 0 la nr. 31,

0x32
    reprezintă procesoarele nr. 1, nr. 4 și nr. 5,

--cpu-list 0-2,6
    reprezintă procesoarele nr. 0, nr. 1, nr. 2 și nr. 6.

--cpu-list 0-10:2
    reprezintă procesoarele nr. 0, nr. 2, nr. 4, nr. 6, nr. 8 și nr. 10. Sufixul „:N” specifică intervalul de valori, de exemplu 0-10:3 este interpretat ca fiind lista 0,3,6,9.

Când taskset returnează, se garantează că programul dat a fost planificat pentru un procesor (CPU) legal.

OPȚIUNI

-a, --all-tasks
    Stabilește sau recuperează atributele de planificare ale tuturor sarcinilor (fire de execuție) pentru PID-ul furnizat.

-c, --cpu-list
    Interpretează masca ca o listă numerică de procesoare în loc de o mască de biți. Numerele sunt separate prin virgule și pot include intervale. De exemplu: 0,5,8-11.

-p, --pid
    Operează pe un PID existent și nu lansează o sarcină nouă. Dacă PID-ul este zero, atunci se efectuează operația asupra procesului taskset.

-h, --help
    Afișează acest mesaj de ajutor și iese.

-V, --version
    Afișează versiunea și iese.

UTILIZARE

Comportamentul implicit este de a rula o nouă comandă cu o mască de afinitate dată:
    taskset masca comanda [argumente]

De asemenea, puteți prelua afinitatea CPU a unei sarcini existente:
    taskset -p pid

Sau s-o stabiliți:
    taskset -p masca pid

Când se specifică o listă de cpu-uri pentru un proces existent, opțiunile -p și -c trebuie să fie grupate împreună:
    taskset -pc cpu-list pid

Forma --cpu-list se aplică numai pentru lansarea de noi comenzi:
    taskset --cpu-list cpu-list comanda

PERMISIUNI

Un utilizator poate modifica afinitatea CPU a unui proces aparținând aceluiași utilizator. Un utilizator trebuie să posede CAP_SYS_NICE pentru a modifica afinitatea CPU a unui proces aparținând unui alt utilizator. Un utilizator poate prelua masca de afinitate a oricărui proces.

STARE DE IEȘIRE

taskset returnează 0 în acest mod de obținere a afinităților atât timp cât există PID-ul furnizat.

taskset returnează 0 în modul său de stabilire a afinității atât timp cât apelul de sistem sched_setaffinity(2) care stă la baza acestuia o face. Succesul comenzii nu garantează faptul că firul specificat a migrat efectiv către procesorul (procesoarele) indicat(e), ci doar că firul nu va migra către un procesor aflat în afara noii măști de afinitate. De exemplu, afinitatea firului nucleului kswapd poate fi definită, dar este posibil ca firul să nu migreze imediat și nu este garantat că o va face vreodată:

$ ps ax -o comm,psr,pid | grep kswapd +
kswapd0 4 82 +
$ sudo taskset -p 1 82 +
pid 82’s current affinity mask: 1 +
pid 82’s new affinity mask: 1 +
$ echo $? +
0 +
$ ps ax -o comm,psr,pid | grep kswapd +
kswapd0 4 82 +
$ taskset -p 82 +
pid 82’s current affinity mask: 1

În schimb, atunci când utilizatorul specifică o afinitate ilegală, taskset va afișa o eroare și va returna 1:

$ ps ax -o comm,psr,pid | grep ksoftirqd/0 +
ksoftirqd/0 0 14 +
$ sudo taskset -p 1 14 +
pid 14’s current affinity mask: 1 +
taskset: failed to set pid 14’s affinity: Invalid argument +
$ echo $? +
1

EXEMPLE

Afișează afinitatea curentă a CPU-ului sub formă de listă.

$ taskset -pc 0
pid 1355988’s current affinity list: 0-47

AUTORI

Scris de Robert M. Love.

DREPTURI DE AUTOR

Drepturi de autor © 2004 Robert M. Love. Acesta este un software liber; consultați sursa pentru condițiile de copiere. Nu există nicio garanție; nici măcar pentru COMERCIALIZARE sau ADECVARE LA UN SCOP PARTICULAR.

CONSULTAȚI ȘI

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

Consultați sched(7) pentru o descriere a schemei de planificare Linux.

RAPORTAREA ERORILOR

Pentru rapoarte de eroare, folosiți

DISPONIBILITATE

Comanda taskset face parte din pachetul util-linux care poate fi descărcat de la