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).