TASKSET(1)

NAMN
taskset - ange eller hämta en process CPU-affinitet

SYNOPSIS

taskset [flaggor] mask kommando [argument...]

taskset [flaggor] -p [mask] pid

BESKRIVNING

Kommandot taskset används för att ställa in eller hämta CPU-affiniteten för en process som körs med hjälp av dess pid, eller för att starta ett nytt kommando med en given CPU-affinitet. CPU-affinitet är en schemaläggningsegenskap som "binder" en process till en viss uppsättning processorer i systemet. Linux-schemaläggaren kommer att respektera den givna CPU-affiniteten och processen kommer inte att köras på några andra CPU:er. Observera att Linux-schemaläggaren även stöder naturlig CPU-affinitet: schemaläggaren försöker hålla processerna på samma CPU så länge som möjligt av prestandaskäl. Att tvinga fram en specifik CPU-affinitet är därför endast användbart i vissa applikationer. Affiniteten för vissa processer, t.ex. kärnans per-CPU-trådar, kan inte ställas in.

CPU-affiniteten representeras som en bitmask, där den lägsta biten motsvarar den första logiska CPU:n och den högsta biten motsvarar den sista logiska CPU:n. Det är inte säkert att alla processorer finns i ett visst system, men en mask kan ange fler processorer än vad som finns. En hämtad mask kommer endast att återspegla de bitar som motsvarar processorer som fysiskt finns i systemet. Om en ogiltig mask anges (dvs. en mask som inte motsvarar några giltiga processorer i det aktuella systemet) returneras ett felmeddelande. Maskerna kan anges i hexadecimal (med eller utan en inledande "0x") eller som en CPU-lista med flaggan --cpu-list. Till exempel,

0x00000001
    är processor #0,

0x00000003
    är processorerna #0 och #1,

FFFFFFFFFF
    är processorerna #0 till #31,

0x32
    är processorerna #1, #4 och #5,

--cpu-list 0-2,6
    är processorerna #0, #1, #2 och #6.

--cpu-list 0-10:2
    är processorer #0, #2, #4, #6, #8 och #10. Suffixet ":N" anger stride i intervallet, t.ex. 0-10:3 tolkas som 0,3,6,9 list.

När taskset återkommer är det garanterat att det givna programmet har schemalagts till en laglig CPU.

FLAGGOR

-a, --all-tasks
    Ställ in eller hämta CPU-affiniteten för alla uppgifter (trådar) för en given PID.

-c, --cpu-list
    Tolka mask som en numerisk lista över processorer i stället för en bitmask. Siffrorna separeras med kommatecken och kan innehålla intervall. Till exempel 0,5,8-11.

-p, --pid
    Operate on an existing PID and do not launch a new task. If PID is zero, then operate on the taskset process.

-h, --help
    Visa hjälptext och avsluta.

-V, --version
    Visa version och avsluta.

ANVÄNDNING

Standardbeteendet är att köra ett nytt kommando med en given affinitetsmask:
    taskset mask kommando [argument]

Du kan också hämta CPU-affiniteten för en befintlig uppgift:
    taskset -p pid

Eller ställ in den:
    taskset -p mask pid

När en cpu-lista anges för en befintlig process måste flaggan -p och -c grupperas tillsammans:
    taskset -pc cpu-list pid

Formuläret --cpu-list är endast tillämpligt för att starta nya kommandon:
    taskset --cpu-lista cpu-lista kommando

TILLSTÅND

En användare kan ändra CPU-affiniteten för en process som tillhör samma användare. En användare måste ha CAP_SYS_NICE för att ändra CPU-affiniteten för en process som tillhör en annan användare. En användare kan hämta affinitetsmasken för vilken process som helst.

AVSLUTSSTATUS

taskset returnerar 0 i sitt affinity-getting-läge så länge som det angivna PID:et existerar.

taskset returnerar 0 i sitt affinitetsinställningsläge så länge som det underliggande systemanropet sched_setaffinity(2) gör det. Om kommandot lyckas garanterar det inte att den angivna tråden faktiskt har migrerat till den eller de angivna processorerna, utan endast att tråden inte kommer att migrera till en processor utanför den nya affinitetsmasken. Till exempel kan affiniteten för kärntråden kswapd ställas in, men det är inte säkert att tråden omedelbart migrerar och det är inte heller säkert att den någonsin gör det:

$ ps ax -o comm,psr,pid | grep kswapd
kswapd0 4 82
$ sudo taskset -p 1 82
pid 82:s aktuella affinitetsmask: 1
pid 82:s nya affinitetsmask: 1
$ echo $?
0
$ ps ax -o comm,psr,pid | grep kswapd
kswapd0 4 82
$ taskset -p 82
pid 82:s aktuella affinitetsmask: 1

Om användaren däremot anger en olaglig affinitet kommer taskset att skriva ut ett felmeddelande och returnera 1:

$ ps ax -o comm,psr,pid | grep ksoftirqd/0
ksoftirqd/0 0 14
$ sudo taskset -p 1 14
pid 14:s aktuella affinitetsmask: 1
taskset: misslyckades med att ställa in pid 14:s affinitet: Ogiltigt argument
$ echo $?
1

EXEMPEL

Print the current CPU affinity as a list.

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

UPPHOVSPERSONER

Skriven av Robert M. Love.

UPPHOVSRÄTT

Copyright © 2004 Robert M. Love. Detta är fri programvara; se källan för kopieringsvillkor. Det finns INGEN garanti; inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR ETT BESTÄMMT SYFTE.

SE ÄVEN

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

Se sched(7) för en beskrivning av Linux schemaläggningssystem.

FELRAPPORTERING

För felrapporter, använd

TILLGÄNGLIGHET

Kommandot taskset ingår i paketet util-linux som kan hämtas från