taskset command
linux의 taskset
명령어를 통해 프로세스가 사용할 CPU를 보여주거나 설정할 수 있습니다.
기본 사용법
$> taskset -p 6525
pid 6525's current affinity mask: ff
$> taskset -pc 6525
pid 6525's current affinity list: 0-7
응용
- 동일한 코어에서 두 스레드 간에 메세지를 보내는데 걸리는 시간 측정 (이 결과로 컨텍스트 스위칭시 성능을 알 수 있습니다.)
$> taskset -c 0 perf bench sched pipe -T
# Running 'sched/pipe' benchmark:
# Executed 1000000 pipe operations between two threads
Total time: 3.761 [sec]
3.761332 usecs/op
265863 ops/sec
이 결과는 하나의 스레드에서 메시지를 보내고 받는 데 걸리는 시간을 측정하므로 2로 나눠야 정확한 값을 알 수 있습니다.
TLDR
$> tldr taskset
taskset
Get or set a process' CPU affinity or start a new process with a defined CPU affinity.
- Get a running process' CPU affinity by PID:
taskset --pid --cpu-list pid
- Set a running process' CPU affinity by PID:
taskset --pid --cpu-list cpu_id pid
- Start a new process with affinity for a single CPU:
taskset --cpu-list cpu_id command
- Start a new process with affinity for multiple non-sequential CPUs:
taskset --cpu-list cpu_id_1 cpu_id_2 cpu_id_3
- Start a new process with affinity for CPUs 1 through 4:
taskset --cpu-list cpu_id_1,cpu_id_4
Help
$> taskset --help
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]
Show or change the CPU affinity of a process.
Options:
-a, --all-tasks operate on all the tasks (threads) for a given pid
-p, --pid operate on existing given pid
-c, --cpu-list display and specify cpus in list format
-h, --help display this help
-V, --version output version information
The default behavior is to run a new command:
taskset 03 sshd -b 1024
You can retrieve the mask of an existing task:
taskset -p 700
Or set it:
taskset -p 03 700
List format uses a comma-separated list instead of a mask:
taskset -pc 0,3,7-11 700
Ranges in list format can take a stride argument:
e.g. 0-31:2 is equivalent to mask 0x55555555
For more details see taskset(1).